package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.CheckBox;
import advancedsystemsmanager.flow.elements.CheckBoxList;
import advancedsystemsmanager.flow.elements.TextBoxNumber;
import advancedsystemsmanager.flow.elements.TextBoxNumberList;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.reference.Names;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
public class MenuCamouflageShape extends MenuCamouflageAdvanced
{
public static final int CHECK_BOX_X = 5;
public static final int CHECK_BOX_Y = 3;
public static final int CHECK_BOX_SPACING_X = 50;
public static final int CHECK_BOX_SPACING_Y = 10;
public static final int TEXT_X = 6;
public static final int TEXT_X_TO = 55;
public static final int TEXT_Y = 28;
public static final int TEXT_BOX_X = 30;
public static final int TEXT_BOX_Y = 25;
public static final int TEXT_BOX_SPACING_X = 40;
public static final int TEXT_BOX_SPACING_Y = 15;
public static final String NBT_USE = "Use";
public static final String NBT_COLLISION = "UseCollision";
public static final String NBT_FULL = "FullCollision";
public static final String NBT_MIN_X = "MinX";
public static final String NBT_MAX_X = "MaxX";
public static final String NBT_MIN_Y = "MinY";
public static final String NBT_MAX_Y = "MaxY";
public static final String NBT_MIN_Z = "MinZ";
public static final String NBT_MAX_Z = "MaxZ";
public CheckBoxList checkBoxes;
public boolean inUse;
public boolean useCollision;
public boolean fullCollision;
public TextBoxNumberList textBoxes;
public String[] coordinates = {Names.X, Names.Y, Names.Z};
public MenuCamouflageShape(FlowComponent parent)
{
super(parent);
checkBoxes = new CheckBoxList();
checkBoxes.addCheckBox(new CheckBox(getParent(), Names.CAMOUFLAGE_BOUNDS_USE, CHECK_BOX_X, CHECK_BOX_Y)
{
@Override
public void setValue(boolean val)
{
inUse = val;
}
@Override
public boolean getValue()
{
return inUse;
}
});
checkBoxes.addCheckBox(new CheckBox(getParent(), Names.CAMOUFLAGE_COLLISION_USE, CHECK_BOX_X, CHECK_BOX_Y + CHECK_BOX_SPACING_Y)
{
@Override
public void setValue(boolean val)
{
useCollision = val;
}
@Override
public boolean getValue()
{
return useCollision;
}
@Override
public boolean isVisible()
{
return inUse;
}
});
checkBoxes.addCheckBox(new CheckBox(getParent(), Names.CAMOUFLAGE_COLLISION_FULL, CHECK_BOX_X + CHECK_BOX_SPACING_X, CHECK_BOX_Y + CHECK_BOX_SPACING_Y)
{
@Override
public void setValue(boolean val)
{
fullCollision = val;
}
@Override
public boolean getValue()
{
return fullCollision;
}
@Override
public boolean isVisible()
{
return inUse && useCollision;
}
});
textBoxes = new TextBoxNumberList();
for (int i = 0; i < 6; i++)
{
int x = i % 2;
int y = i / 2;
textBoxes.addTextBox(new TextBoxRange(TEXT_BOX_X + TEXT_BOX_SPACING_X * x, TEXT_BOX_Y + TEXT_BOX_SPACING_Y * y, x == 0 ? 0 : 32));
}
loadDefault();
}
public void loadDefault()
{
inUse = false;
useCollision = true;
fullCollision = false;
for (int i = 0; i < 6; i++)
{
((TextBoxRange)textBoxes.getTextBox(i)).reset();
}
}
public boolean shouldUpdate()
{
return inUse;
}
public boolean isUseCollision()
{
return useCollision;
}
public boolean isFullCollision()
{
return fullCollision;
}
public int getBounds(int id)
{
return textBoxes.getTextBox(id).getNumber();
}
@Override
public String getName()
{
return Names.BOUNDS_MENU;
}
@SideOnly(Side.CLIENT)
@Override
public void onClick(int mX, int mY, int button)
{
checkBoxes.onClick(mX, mY);
if (inUse)
{
textBoxes.onClick(mX, mY, button);
}
}
@SideOnly(Side.CLIENT)
@Override
public boolean onKeyStroke(GuiManager gui, char c, int k)
{
if (inUse)
{
return textBoxes.onKeyStroke(gui, c, k);
} else
{
return super.onKeyStroke(gui, c, k);
}
}
@Override
public void copyFrom(Menu menu)
{
MenuCamouflageShape menuShape = (MenuCamouflageShape)menu;
if (menuShape.inUse)
{
inUse = true;
useCollision = menuShape.useCollision;
fullCollision = menuShape.fullCollision;
for (int i = 0; i < 6; i++)
{
textBoxes.getTextBox(i).setNumber(menuShape.textBoxes.getTextBox(i).getNumber());
}
} else
{
loadDefault();
}
}
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
inUse = nbtTagCompound.getBoolean(NBT_USE);
if (inUse)
{
useCollision = nbtTagCompound.getBoolean(NBT_COLLISION);
fullCollision = nbtTagCompound.getBoolean(NBT_FULL);
textBoxes.getTextBox(0).setNumber(nbtTagCompound.getByte(NBT_MIN_X));
textBoxes.getTextBox(1).setNumber(nbtTagCompound.getByte(NBT_MAX_X));
textBoxes.getTextBox(2).setNumber(nbtTagCompound.getByte(NBT_MIN_Y));
textBoxes.getTextBox(3).setNumber(nbtTagCompound.getByte(NBT_MAX_Y));
textBoxes.getTextBox(4).setNumber(nbtTagCompound.getByte(NBT_MIN_Z));
textBoxes.getTextBox(5).setNumber(nbtTagCompound.getByte(NBT_MAX_Z));
} else
{
loadDefault();
}
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
nbtTagCompound.setBoolean(NBT_USE, inUse);
if (inUse)
{
nbtTagCompound.setBoolean(NBT_COLLISION, useCollision);
nbtTagCompound.setBoolean(NBT_FULL, fullCollision);
nbtTagCompound.setByte(NBT_MIN_X, (byte)textBoxes.getTextBox(0).getNumber());
nbtTagCompound.setByte(NBT_MAX_X, (byte)textBoxes.getTextBox(1).getNumber());
nbtTagCompound.setByte(NBT_MIN_Y, (byte)textBoxes.getTextBox(2).getNumber());
nbtTagCompound.setByte(NBT_MAX_Y, (byte)textBoxes.getTextBox(3).getNumber());
nbtTagCompound.setByte(NBT_MIN_Z, (byte)textBoxes.getTextBox(4).getNumber());
nbtTagCompound.setByte(NBT_MAX_Z, (byte)textBoxes.getTextBox(5).getNumber());
}
}
@SideOnly(Side.CLIENT)
@Override
public void draw(GuiManager gui, int mX, int mY)
{
super.draw(gui, mX, mY);
checkBoxes.draw(gui, mX, mY);
if (inUse)
{
textBoxes.draw(gui, mX, mY);
for (int i = 0; i < coordinates.length; i++)
{
gui.drawString(coordinates[i], TEXT_X, TEXT_Y + TEXT_BOX_SPACING_Y * i, 0x404040);
gui.drawString(Names.TO, TEXT_X_TO, TEXT_Y + TEXT_BOX_SPACING_Y * i, 0x404040);
}
}
}
@Override
public String getWarningText()
{
return Names.BOUNDS_WARNING;
}
public class TextBoxRange extends TextBoxNumber
{
public int defaultNumber;
public TextBoxRange(int x, int y, int defaultNumber)
{
super(getParent(), x, y, 2, false);
this.defaultNumber = defaultNumber;
}
@Override
public int getMaxNumber()
{
return 32;
}
public void reset()
{
setNumber(defaultNumber);
}
}
}