icbm/src/main/java/icbm/zhapin/gui/GRadarTower.java

288 lines
11 KiB
Java

package icbm.zhapin.gui;
import icbm.zhapin.ICBMExplosion;
import icbm.zhapin.daodan.EMissile;
import icbm.zhapin.jiqi.BMachine;
import icbm.zhapin.jiqi.RadarTowerGuiPacket;
import icbm.zhapin.jiqi.TRadarTower;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import universalelectricity.core.electricity.ElectricityDisplay;
import universalelectricity.core.vector.Vector2;
import universalelectricity.prefab.GuiBase;
import universalelectricity.prefab.TranslationHelper;
import universalelectricity.prefab.vector.Region2;
public class GRadarTower extends GuiBase {
private TRadarTower tileEntity;
private int containerPosX;
private int containerPosY;
private GuiTextField textFieldAlarmRange;
private GuiTextField textFieldSafetyZone;
private Vector2 mouseOverCoords;
private Vector2 mousePosition;
private Vector2 radarCenter;
private float radarMapRadius;
private String info;
private String info2;
public GRadarTower(final TRadarTower tileEntity) {
this.mouseOverCoords = new Vector2();
this.mousePosition = new Vector2();
this.info = "";
this.tileEntity = tileEntity;
this.mouseOverCoords
= new Vector2(this.tileEntity.xCoord, this.tileEntity.zCoord);
super.xSize = 256;
this.radarCenter = new Vector2(
this.containerPosX + super.xSize / 3 - 14,
this.containerPosY + super.ySize / 2 + 4
);
this.radarMapRadius = 7.836991f;
}
@Override
public void initGui() {
super.initGui();
(this.textFieldSafetyZone
= new GuiTextField(this.fontRendererObj, 155, 83, 30, 12))
.setMaxStringLength(3);
this.textFieldSafetyZone.setText(this.tileEntity.safetyRadius + "");
(this.textFieldAlarmRange
= new GuiTextField(this.fontRendererObj, 155, 110, 30, 12))
.setMaxStringLength(3);
this.textFieldAlarmRange.setText(this.tileEntity.alarmRadius + "");
}
@Override
public void keyTyped(final char par1, final int par2) {
super.keyTyped(par1, par2);
this.textFieldSafetyZone.textboxKeyTyped(par1, par2);
this.textFieldAlarmRange.textboxKeyTyped(par1, par2);
try {
final int newSafetyRadius = Math.min(
500, Math.max(0, Integer.parseInt(this.textFieldSafetyZone.getText()))
);
this.tileEntity.safetyRadius = newSafetyRadius;
ICBMExplosion.channel.sendToServer(new RadarTowerGuiPacket(this.tileEntity));
} catch (final NumberFormatException ex) {}
try {
final int newAlarmRadius = Math.min(
500, Math.max(0, Integer.parseInt(this.textFieldAlarmRange.getText()))
);
this.tileEntity.alarmRadius = newAlarmRadius;
ICBMExplosion.channel.sendToServer(new RadarTowerGuiPacket(this.tileEntity));
} catch (final NumberFormatException ex2) {}
}
@Override
public void mouseClicked(final int par1, final int par2, final int par3) {
super.mouseClicked(par1, par2, par3);
this.textFieldAlarmRange.mouseClicked(
par1 - this.containerPosX, par2 - this.containerPosY, par3
);
this.textFieldSafetyZone.mouseClicked(
par1 - this.containerPosX, par2 - this.containerPosY, par3
);
}
@Override
protected void drawForegroundLayer(final int var2, final int var3, final float var1) {
this.fontRendererObj.drawString(
"§7" + TranslationHelper.getLocal("icbm.machine.9.name"),
super.xSize / 2 - 30,
6,
4210752
);
this.fontRendererObj.drawString("Coordinates:", 155, 18, 4210752);
this.fontRendererObj.drawString(
"X: " + (int) Math.round(this.mouseOverCoords.x)
+ " Z: " + (int) Math.round(this.mouseOverCoords.y),
155,
30,
4210752
);
this.fontRendererObj.drawString("§6" + this.info, 155, 42, 4210752);
this.fontRendererObj.drawString("§4" + this.info2, 155, 54, 4210752);
this.fontRendererObj.drawString("Safe Zone:", 155, 70, 4210752);
this.textFieldSafetyZone.drawTextBox();
this.fontRendererObj.drawString("Blocks", 190, 85, 4210752);
this.fontRendererObj.drawString("Alarm Range:", 155, 98, 4210752);
this.textFieldAlarmRange.drawTextBox();
this.fontRendererObj.drawString("Blocks", 190, 112, 4210752);
this.fontRendererObj.drawString(
ElectricityDisplay.getDisplay(
this.tileEntity.getRequest().getWatts() * 20.0,
ElectricityDisplay.ElectricUnit.WATT
),
155,
128,
4210752
);
this.fontRendererObj.drawString(
ElectricityDisplay.getDisplay(
this.tileEntity.getVoltage(), ElectricityDisplay.ElectricUnit.VOLTAGE
),
155,
138,
4210752
);
String color = "§4";
String status = "Idle";
if (this.tileEntity.isDisabled()) {
status = "Disabled!";
} else if (this.tileEntity.canRun()) {
color = "§2";
status = "Radar On!";
} else {
status = "No Electricity!";
}
this.fontRendererObj.drawString(color + status, 155, 150, 4210752);
}
@Override
protected void drawBackgroundLayer(final int var2, final int var3, final float var1) {
this.mc.renderEngine.bindTexture(
new ResourceLocation("icbm", "textures/gui/gui_radar.png")
);
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
this.containerPosX = (this.width - super.xSize) / 2;
this.containerPosY = (this.height - super.ySize) / 2;
this.drawTexturedModalRect(
this.containerPosX, this.containerPosY, 0, 0, super.xSize, super.ySize
);
this.radarCenter = new Vector2(
this.containerPosX + super.xSize / 3 - 10,
this.containerPosY + super.ySize / 2 + 4
);
this.radarMapRadius = 7.0422535f;
this.info = "";
this.info2 = "";
if (this.tileEntity.canRun()) {
int range = 4;
for (final Entity entity : this.tileEntity.entitiesInRange) {
final Vector2 position = new Vector2(
this.radarCenter.x
+ (entity.posX - this.tileEntity.xCoord) / this.radarMapRadius,
this.radarCenter.y
- (entity.posZ - this.tileEntity.zCoord) / this.radarMapRadius
);
if (entity instanceof EMissile) {
if (this.tileEntity.isWeiXianDaoDan((EMissile) entity)) {
this.mc.renderEngine.bindTexture(
new ResourceLocation("icbm", "textures/gui/reddot.png")
);
} else {
this.mc.renderEngine.bindTexture(
new ResourceLocation("icbm", "textures/gui/yellowdot.png")
);
}
} else {
this.mc.renderEngine.bindTexture(
new ResourceLocation("icbm", "textures/gui/yellowdot.png")
);
}
this.drawTexturedModalRect(position.intX(), position.intY(), 0, 0, 2, 2);
final Vector2 minPosition = position.clone();
minPosition.add(-range);
final Vector2 maxPosition = position.clone();
maxPosition.add(range);
if (new Region2(minPosition, maxPosition).isIn(this.mousePosition)) {
this.info = entity.getCommandSenderName();
if (entity instanceof EntityPlayer) {
this.info = "§1" + this.info;
}
if (!(entity instanceof EMissile)
|| ((EMissile) entity).target == null) {
continue;
}
this.info2 = "(" + ((EMissile) entity).target.intX() + ", "
+ ((EMissile) entity).target.intZ() + ")";
}
}
range = 2;
for (final TileEntity jiQi : this.tileEntity.tileEntitiesInRange) {
final Vector2 position = new Vector2(
this.radarCenter.x
+ (jiQi.xCoord - this.tileEntity.xCoord) / this.radarMapRadius,
this.radarCenter.y
- (jiQi.zCoord - this.tileEntity.zCoord) / this.radarMapRadius
);
this.mc.renderEngine.bindTexture(
new ResourceLocation("icbm", "textures/gui/whitedot.png")
);
this.drawTexturedModalRect(position.intX(), position.intY(), 0, 0, 2, 2);
final Vector2 minPosition = position.clone();
minPosition.add(-range);
final Vector2 maxPosition = position.clone();
maxPosition.add(range);
if (new Region2(minPosition, maxPosition).isIn(this.mousePosition)
&& jiQi.getBlockType() != null) {
if (jiQi.getBlockType() instanceof BMachine) {
this.info = BMachine.getMachineName(jiQi);
} else {
this.info = jiQi.getBlockType().getLocalizedName();
}
}
}
}
}
@Override
public void updateScreen() {
super.updateScreen();
if (Mouse.isInsideWindow() && Mouse.getEventButton() == -1) {
this.mousePosition = new Vector2(
Mouse.getEventX() * this.width / this.mc.displayWidth,
this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1
);
final float difference = 500.0f / this.radarMapRadius;
if (this.mousePosition.x > this.radarCenter.x - difference
&& this.mousePosition
.x<this.radarCenter.x + difference&& this.mousePosition.y> this
.radarCenter.y
- difference
&& this.mousePosition.y < this.radarCenter.y + difference) {
final int xDifference = (int) (this.mousePosition.x - this.radarCenter.x);
final int yDifference = (int) (this.mousePosition.y - this.radarCenter.y);
final int xBlockDistance = (int) (xDifference * this.radarMapRadius);
final int yBlockDistance = (int) (yDifference * this.radarMapRadius);
this.mouseOverCoords = new Vector2(
this.tileEntity.xCoord + xBlockDistance,
this.tileEntity.zCoord - yBlockDistance
);
}
}
if (!this.textFieldSafetyZone.isFocused()) {
this.textFieldSafetyZone.setText(this.tileEntity.safetyRadius + "");
}
if (!this.textFieldAlarmRange.isFocused()) {
this.textFieldAlarmRange.setText(this.tileEntity.alarmRadius + "");
}
}
}