Skip to content

Commit

Permalink
Adding container and gui for infinite emitter
Browse files Browse the repository at this point in the history
  • Loading branch information
jakimfett committed May 29, 2014
1 parent 303beb8 commit 5add8dd
Show file tree
Hide file tree
Showing 3 changed files with 315 additions and 17 deletions.
33 changes: 16 additions & 17 deletions src/main/java/particlephysics/tileentity/emitter/EmitterGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,22 @@
// Thanks to VSWE for assorted bits of the code
public class EmitterGUI extends GuiContainer
{
private static final ResourceLocation texture = new ResourceLocation("particlephysics", "textures/gui/emitter.png");
protected static final ResourceLocation texture = new ResourceLocation("particlephysics", "textures/gui/emitter.png");
private final EmitterTileEntity tile;

public static final int sliderLeftOffset = 38;
private int intervalPercent = 0;
private int progressBar = 0;
private int progressVertical = 0;
private int progressHorizontal = 0;
private int burstOffset = 0;
private int guiParticle = 0;
private int fuelLoadVertical = 0;
private int fuelLoadhorizontal = 0;
private long oldTick = 0;
private long tickCounter = 0;
protected int intervalPercent = 0;
protected int progressBar = 0;
protected int progressVertical = 0;
protected int progressHorizontal = 0;
protected int burstOffset = 0;
protected int guiParticle = 0;
protected int fuelLoadVertical = 0;
protected int fuelLoadhorizontal = 0;
protected long oldTick = 0;
protected long tickCounter = 0;
protected int tempHeightSetting = 25;
protected boolean isDragging;

public static final GUIRectangle bar = new GUIRectangle(sliderLeftOffset, 15, 87, 6);
public static final GUIRectangle slider = new GUIRectangle(sliderLeftOffset, 12, 8, 11);
Expand All @@ -51,7 +53,7 @@ protected void drawGuiContainerBackgroundLayer(float f, int x, int y)

drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);

if (tile.intervalReset > 0 && tile.fuelStored != 0)
if (tile.intervalReset > 0 && tile.fuelStored != 0)
{
intervalPercent = (int) (((float) tile.intervalReset / (float) ((tile.interval + 1) * 20)) * 200);
progressBar = (int) ((float) intervalPercent * 0.7F);
Expand Down Expand Up @@ -192,9 +194,6 @@ protected void actionPerformed(GuiButton button)

}

private int tempHeightSetting = 25;
private boolean isDragging;

@Override
public void initGui()
{
Expand Down Expand Up @@ -248,13 +247,13 @@ public void mouseMovedOrUp(int x, int y, int button)
}
}

private void updateSliderPosition()
protected void updateSliderPosition()
{

slider.setX(sliderLeftOffset + (isDragging ? tempHeightSetting : tile.interval));
}

private void syncGUIElements()
protected void syncGUIElements()
{
// update and sync GUI elements with current machine state
intervalPercent = (int) (((float) tile.intervalReset / (float) ((tile.interval + 1) * 20)) * 200);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
package particlephysics.tileentity.infiniteemitter;

import particlephysics.tileentity.emitter.*;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class InfiniteEmitterContainer extends EmitterContainer
{

private EmitterTileEntity machine;

public InfiniteEmitterContainer(InventoryPlayer invPlayer, InfiniteEmitterTileEntity machine)
{
super(invPlayer, machine);
this.machine = machine;


// Player inventory hotbar slots
for (int x = 0; x < 9; x++)
{
addSlotToContainer(new Slot(invPlayer, x, 8 + 18 * x, 64 + 130));
}
// Player non-hotbar inventory
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 9; x++)
{
addSlotToContainer(new Slot(invPlayer, x + y * 9 + 9, 8 + 18 * x, 64 + 72 + y * 18));
}
}

// Add active fuel slot
addSlotToContainer(new EmitterFuelSlot(machine, 0, 8, 73));

}

public EmitterTileEntity getMachine()
{
return this.machine;
}

@Override
public boolean canInteractWith(EntityPlayer entityplayer)
{
return machine.isUseableByPlayer(entityplayer);
}

@Override
public ItemStack transferStackInSlot(EntityPlayer player, int i)
{
Slot slot = getSlot(i);

if (slot != null && slot.getHasStack())
{
ItemStack stack = slot.getStack();

if (i >= 36)
{
if (!mergeItemStack(stack, 0, 36, false))
{
return null;
}
} else if (machine.isValidFuel(stack.itemID) || !mergeItemStack(stack, 36, 36 + machine.getSizeInventory(), false))
{
return null;
}

if (stack.stackSize == 0)
{
slot.putStack(null);
} else
{
slot.onSlotChanged();
}

slot.onPickupFromSlot(player, stack);

}
return null;
}

@Override
public void addCraftingToCrafters(ICrafting player)
{
super.addCraftingToCrafters(player);

player.sendProgressBarUpdate(this, 0, machine.fuelStored);
player.sendProgressBarUpdate(this, 1, machine.fuelType);
player.sendProgressBarUpdate(this, 2, machine.fuelMeta);
player.sendProgressBarUpdate(this, 3, machine.interval);
}

@Override
@SideOnly(Side.CLIENT)
public void updateProgressBar(int id, int data)
{
if (id == 0)
{
machine.fuelStored = data;
}
if (id == 1)
{
machine.fuelType = data;
}
if (id == 2)
{
machine.fuelMeta = data;
}
if (id == 3)
{
machine.interval = data;
}
}

private int oldFuelStored;
private int oldFuelType;
private int oldFuelMeta;

@Override
public void detectAndSendChanges()
{
super.detectAndSendChanges();
for (Object player : crafters)
{

if (oldFuelStored != machine.fuelStored)
{
((ICrafting) player).sendProgressBarUpdate(this, 0, machine.fuelStored);
}
if (oldFuelType != machine.fuelType)
{
((ICrafting) player).sendProgressBarUpdate(this, 1, machine.fuelType);
}
if (oldFuelMeta != machine.fuelMeta)
{
((ICrafting) player).sendProgressBarUpdate(this, 2, machine.fuelMeta);
}

}
this.oldFuelMeta = machine.fuelMeta;
this.oldFuelStored = machine.fuelStored;
this.oldFuelType = machine.fuelType;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
package particlephysics.tileentity.infiniteemitter;

import particlephysics.tileentity.emitter.*;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.InventoryPlayer;
import particlephysics.entity.particle.TemplateParticle;

public class InfiniteEmitterGUI extends EmitterGUI
{
private final InfiniteEmitterTileEntity tile;

public InfiniteEmitterGUI(InventoryPlayer invPlayer, InfiniteEmitterTileEntity tile)
{
super(invPlayer, tile);
this.tile = tile;

xSize = 176;
ySize = 218;

this.syncGUIElements();

}

@Override
protected void drawGuiContainerBackgroundLayer(float f, int x, int y)
{
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);

drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);

if (tile.intervalReset > 0 && tile.fuelStored != 0)
{
intervalPercent = (int) (((float) tile.intervalReset / (float) ((tile.interval + 1) * 20)) * 200);
progressBar = (int) ((float) intervalPercent * 0.7F);
if (intervalPercent <= 100)
{
burstOffset = 0;

if (progressBar <= 7)
{
progressVertical = progressBar;
progressHorizontal = 0;
} else
{
progressVertical = 7;
progressHorizontal = progressBar - 6;
}

} else if (intervalPercent >= 100 && intervalPercent <= 200)
{
burstOffset = (int) (((float) tile.intervalReset / (float) ((tile.interval + 1) * 20)) * 20) - 11;
} else
{
// a safety net for
// verifying sanity
// never should be called
burstOffset = 0;
}

}

// draw the burst
if (intervalPercent >= 0 && intervalPercent <= 200 && tile.fuelStored != 0)
{
// particle progress bar
drawTexturedModalRect(guiLeft + 42, guiTop + 38 - progressVertical, 211, 20 - progressVertical, 5, progressVertical);
drawTexturedModalRect(guiLeft + 42, guiTop + 27, 191, 0, progressHorizontal + 1, 10);

if (intervalPercent >= 100)
{
if (intervalPercent <= 113)
{
guiParticle = (int) ((float) (intervalPercent - 100));
if (tile.interval <= 1)
{
// adjust for 0 and 1 interval
guiParticle = guiParticle + 3;
}
}
// draw "particle" in GUI
drawTexturedModalRect(guiLeft + 105 + guiParticle, guiTop + 31, 254, 4, 2, 2);

// draw "burst" pattern
drawTexturedModalRect(guiLeft + 118 - burstOffset, guiTop + 31 - burstOffset, 200 - burstOffset, 22 - burstOffset, 2 + burstOffset * 2, 2 + burstOffset * 2);
}
}

if (tile.fuelStored > 0)
{
int offset = (tile.fuelStored / 2);
// draw the fuel meter
drawTexturedModalRect(guiLeft + 37, guiTop + 89 - offset, 176, 50 - offset, 15, 0 + offset);
}

if (tile.fuelStored <= 1)
{
if (oldTick != tile.worldObj.getWorldTime())
{
oldTick = tile.worldObj.getWorldTime();
tickCounter++;
if (tickCounter >= 10 + (20 * tile.interval) * 2)
{
if (fuelLoadVertical <= 13)
{
fuelLoadVertical++;
} else if (fuelLoadhorizontal <= 18)
{
fuelLoadhorizontal++;
}
}
}
if (tile.inventory[0] != null)
{
drawTexturedModalRect(guiLeft + 10, guiTop + 70 - fuelLoadVertical, 191, 47 - fuelLoadVertical, 13, fuelLoadVertical);
drawTexturedModalRect(guiLeft + 17, guiTop + 53, 225, 13, fuelLoadhorizontal, 8);
}
} else
{
fuelLoadVertical = 0;
fuelLoadhorizontal = 0;
tickCounter = 0;
}

if (!this.isDragging)
{
this.tempHeightSetting = tile.interval;
}

bar.draw(this, 0, 218);
this.updateSliderPosition();
slider.draw(this, 0, 224);

fontRenderer.drawString((this.tempHeightSetting + 1) + " Seconds", guiLeft + 48, guiTop + 4, 0x404040);
fontRenderer.drawString("Queue", guiLeft + 85, guiTop + 101, 0x404040);

if (tile.getStackInSlot(0) != null)
{
TemplateParticle particle = tile.getParticleFromFuel(tile.getStackInSlot(0).itemID, tile.getStackInSlot(0).getItemDamage());
if (particle != null)
{
// Display particle type
fontRenderer.drawString(particle.getName(), guiLeft + 115, guiTop + 46, 0x404040);
fontRenderer.drawString("Type:", guiLeft + 89, guiTop + 46, 0x404040);
}
}

}
}

0 comments on commit 5add8dd

Please sign in to comment.