Dartcraft/src/main/java/ley/modding/dartcraft/client/gui/GuiEngine.java

274 lines
9.7 KiB
Java

package ley.modding.dartcraft.client.gui;
import cpw.mods.fml.common.Loader;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.api.energy.EngineLiquid;
import ley.modding.dartcraft.client.gui.tabs.GuiTab;
import ley.modding.dartcraft.client.gui.tabs.Tab;
import ley.modding.dartcraft.tile.TileEntityForceEngine;
import ley.modding.dartcraft.util.ForceEngineLiquids;
import ley.modding.dartcraft.util.FortunesUtil;
import net.minecraft.client.gui.Gui;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class GuiEngine extends GuiTab {
private TileEntityForceEngine engine;
private ContainerForceEngine container;
private Rectangle fuelBounds;
private Rectangle throttleBounds;
private Rectangle energyBounds;
private Rectangle throttleMeterBounds;
public GuiEngine(ContainerForceEngine container) {
super(container);
this.engine = container.engine;
this.container = container;
this.xSize = 176;
this.ySize = 161;
addTab(new EnergyTab(this));
addTab(new InfoTab(this));
}
public void initGui() {
super.initGui();
this.fuelBounds = new Rectangle(this.guiLeft + 66, this.guiTop + 11, 16, 58);
this.throttleBounds = new Rectangle(this.guiLeft + 94, this.guiTop + 11, 16, 58);
}
public List<String>
handleItemTooltip(ItemStack stack, int x, int y, List<String> tooltip) {
Point pointerLoc = new Point(x, y);
if (this.fuelBounds.contains(pointerLoc))
try {
tooltip.add(
"" + this.engine.fuelTank.getFluid().getFluid().getLocalizedName()
+ " (" + (this.engine.fuelTank.getFluid()).amount + ")"
);
} catch (Exception e) {
tooltip.add("Empty");
}
if (this.throttleBounds.contains(pointerLoc))
try {
tooltip.add(
"" + (this.engine.throttleTank.getInfo()).fluid.getFluid().getName()
+ " (" + (this.engine.throttleTank.getFluid()).amount + ")"
);
} catch (Exception e) {
tooltip.add("Empty");
}
return tooltip;
}
@Override
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Dartcraft.proxy.bindTexture("engineGui.png");
int posX = (this.width - this.xSize) / 2;
int posY = (this.height - this.ySize) / 2;
drawTexturedModalRect(posX, posY, 0, 0, this.xSize, this.ySize);
if (this.engine.fuelTank.getFluid() != null
&& (this.engine.fuelTank.getFluid()).amount > 0)
displayGauge(
this.fuelBounds.x, this.fuelBounds.y, this.engine.fuelTank.getFluid()
);
if (this.engine.throttleTank.getFluid() != null
&& (this.engine.throttleTank.getFluid()).amount > 0)
displayGauge(
this.throttleBounds.x,
this.throttleBounds.y,
this.engine.throttleTank.getFluid()
);
}
private void displayGauge(int x, int y, FluidStack liquid) {
int tempx;
if (liquid == null)
return;
int start = 0;
int squaled = (int) (58.0F * liquid.amount / 10000.0F);
Dartcraft.proxy.bindTexture("textures/atlas/blocks.png");
do {
tempx = 0;
if (squaled > 16) {
tempx = 16;
squaled -= 16;
} else {
tempx = squaled;
squaled = 0;
}
IIcon icon = liquid.getFluid().getStillIcon();
if (icon == null)
icon = FluidRegistry.LAVA.getStillIcon();
drawTexturedModelRectFromIcon(
x, y + 58 - tempx - start, icon, 16, 16 - 16 - tempx
);
start += 16;
} while (tempx != 0 && squaled != 0);
Dartcraft.proxy.bindTexture("engineGui.png");
drawTexturedModalRect(x, y, 176, 0, 16, 58);
}
protected void drawTooltips() {}
private class EnergyTab extends Tab {
public EnergyTab(Gui gui) {
super(gui);
this.leftSide = false;
this.overlayColor = 13914449;
this.maxHeight = 48;
this.maxWidth = 90;
}
public void draw(int x, int y) {
drawBackground(x, y);
drawIcon("items.png", 49, x + 2, y + 2);
if (!isFullyOpened())
return;
float output = GuiEngine.this.engine.getEnergyPerProcess();
float throttle = 0.0F;
if (GuiEngine.this.engine.throttleTank.getFluid() != null) {
EngineLiquid throttleLiquid = ForceEngineLiquids.getEngineLiquid(
GuiEngine.this.engine.throttleTank.getFluid()
);
if (throttleLiquid != null)
throttle = throttleLiquid.getModifier();
}
if (!GuiEngine.this.engine.isActive)
output = throttle = 0.0F;
int subColor = 15000804;
Tab.tabFontRenderer.drawStringWithShadow("Output", x + 22, y + 6, 16777215);
Tab.tabFontRenderer.drawStringWithShadow("MJ/t:", x + 8, y + 20, 16777215);
if (output > 0.0F) {
Tab.tabFontRenderer.drawStringWithShadow(
"" + GuiEngine.this.engine.getEnergyPerProcess(),
x + 36,
y + 20,
subColor
);
} else {
Tab.tabFontRenderer.drawStringWithShadow(
"None", x + 36, y + 20, subColor
);
}
Tab.tabFontRenderer.drawStringWithShadow(
"Throttle:", x + 8, y + 30, 16777215
);
if (throttle > 0.0F) {
Tab.tabFontRenderer.drawStringWithShadow(
"" + throttle, x + 55, y + 30, subColor
);
} else {
Tab.tabFontRenderer.drawStringWithShadow(
"None", x + 55, y + 30, subColor
);
}
}
public String getTooltip() {
return null;
}
}
private class InfoTab extends Tab {
public ArrayList<String> infoStrings = new ArrayList<String>();
private String currentInfo;
private int index;
public InfoTab(Gui gui) {
super(gui);
this.leftSide = false;
this.overlayColor = 1217260;
this.maxHeight = 100;
this.maxWidth = 120;
initializeItems();
this.currentInfo = getRandomItem();
this.index = -1;
}
private void initializeItems() {
this.infoStrings.add(
"The Force Engine can be throttled with a few liquids, most notably water."
);
this.infoStrings.add(
"The Force Engine's output is determined by the base output of the Fuel multiplied by the Throttle's value."
);
this.infoStrings.add(
"The Force Engine will never explode or die of loneliness."
);
this.infoStrings.add("The Force Engine requires a redstone signal to run.");
this.infoStrings.add(
"You can right-click the Force Engine with a valid liquid container to add liquid quickly."
);
if (Loader.isModLoaded("BuildCraft|Energy")) {
this.infoStrings.add(
"A wide variety of fuels are usable inside the Force Engine. While Liquid Force is the most effective, BuildCraft Fuel or even lava is also usable."
);
this.infoStrings.add(
"Using Fuel or Lava in the Force Engine will yield the same output as the Combustion Engine if water is used as a throttle."
);
} else {
this.infoStrings.add(
"Lava is also a valid Force Engine Fuel, although not as effective as Liquid Force."
);
}
if (Loader.isModLoaded("Forestry")) {
this.infoStrings.add(
"Liquid Force may also be obtained by squeezing Force Logs."
);
this.infoStrings.add("Milk is also an effective throttle.");
this.infoStrings.add("Did someone say Glacial bees?");
}
}
public void toggleOpen() {
super.toggleOpen();
if (isOpen()) {
this.index++;
if (this.index > this.infoStrings.size())
this.index = 0;
try {
this.currentInfo = this.infoStrings.get(this.index);
} catch (Exception e) {
this.currentInfo = getRandomItem();
}
}
}
public void draw(int x, int y) {
drawBackground(x, y);
drawIcon("items.png", 0, x + 2, y + 2);
if (!isFullyOpened())
return;
Tab.tabFontRenderer.drawStringWithShadow(
"Information", x + 22, y + 6, 16777215
);
Tab.tabFontRenderer.drawSplitString(
this.currentInfo, x + 8, y + 20, this.maxWidth - 14, 0
);
}
private String getRandomItem() {
return FortunesUtil.getFortune();
}
public String getTooltip() {
return null;
}
}
}