package advancedsystemsmanager.flow.menus;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.elements.*;
import advancedsystemsmanager.containers.ContainerManager;
import advancedsystemsmanager.client.gui.GuiManager;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.network.PacketHandler;
import advancedsystemsmanager.reference.Names;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.nbt.NBTTagCompound;
public class MenuPulse extends Menu
{
public static final int CHECK_BOX_X = 5;
public static final int CHECK_BOX_Y = 5;
public static final int RADIO_BUTTON_X = 5;
public static final int RADIO_BUTTON_Y = 44;
public static final int RADIO_BUTTON_SPACING_X = 67;
public static final int RADIO_BUTTON_SPACING_Y = 12;
public static final int TEXT_BOX_X_LEFT = 10;
public static final int TEXT_BOX_X_RIGHT = 70;
public static final int TEXT_BOX_Y = 25;
public static final String NBT_USE_PULSE = "UsePulse";
public static final String NBT_TYPE = "Type";
public static final String NBT_SECOND = "Seconds";
public static final String NBT_TICK = "Ticks";
public CheckBoxList checkBoxes;
public boolean usePulse;
public RadioButtonList radioButtons;
public TextBoxNumberList textBoxes;
public TextBoxNumber ticksTextBox;
public TextBoxNumber secondsTextBox;
public MenuPulse(FlowComponent parent)
{
super(parent);
checkBoxes = new CheckBoxList();
checkBoxes.addCheckBox(new CheckBox(getParent(), Names.DO_EMIT_PULSE, CHECK_BOX_X, CHECK_BOX_Y)
{
@Override
public void setValue(boolean val)
{
usePulse = val;
}
@Override
public boolean getValue()
{
return usePulse;
}
});
radioButtons = new RadioButtonList(getParent());
for (int i = 0; i < PULSE_OPTIONS.values().length; i++)
{
int x = i % 2;
int y = i / 2;
radioButtons.add(new RadioButton(RADIO_BUTTON_X + x * RADIO_BUTTON_SPACING_X, RADIO_BUTTON_Y + y * RADIO_BUTTON_SPACING_Y, PULSE_OPTIONS.values()[i].getName()));
}
textBoxes = new TextBoxNumberList();
textBoxes.addTextBox(secondsTextBox = new TextBoxNumber(getParent(), TEXT_BOX_X_LEFT, TEXT_BOX_Y, 2, true));
textBoxes.addTextBox(ticksTextBox = new TextBoxNumber(getParent(), TEXT_BOX_X_RIGHT, TEXT_BOX_Y, 2, true)
{
@Override
public int getMaxNumber()
{
return 19;
}
});
setDefault();
}
public void setDefault()
{
radioButtons.setSelectedOption(0);
secondsTextBox.setNumber(0);
ticksTextBox.setNumber(10);
}
@Override
public String getName()
{
return Names.PULSE_MENU;
}
@SideOnly(Side.CLIENT)
@Override
public void draw(GuiManager gui, int mX, int mY)
{
checkBoxes.draw(gui, mX, mY);
if (usePulse)
{
radioButtons.draw(gui, mX, mY);
textBoxes.draw(gui, mX, mY);
gui.drawCenteredString(Names.SECONDS, secondsTextBox.getX(), secondsTextBox.getY() - 7, 0.7F, secondsTextBox.getWidth(), 0x404040);
gui.drawCenteredString(Names.TICKS, ticksTextBox.getX(), ticksTextBox.getY() - 7, 0.7F, ticksTextBox.getWidth(), 0x404040);
}
}
@SideOnly(Side.CLIENT)
@Override
public void onClick(int mX, int mY, int button)
{
checkBoxes.onClick(mX, mY);
if (usePulse)
{
radioButtons.onClick(mX, mY, button);
textBoxes.onClick(mX, mY, button);
}
}
@SideOnly(Side.CLIENT)
@Override
public boolean onKeyStroke(GuiManager gui, char c, int k)
{
return usePulse && textBoxes.onKeyStroke(gui, c, k);
}
@Override
public void copyFrom(Menu menu)
{
MenuPulse menuPulse = (MenuPulse)menu;
usePulse = menuPulse.usePulse;
if (usePulse)
{
radioButtons.setSelectedOption(menuPulse.radioButtons.getSelectedOption());
secondsTextBox.setNumber(menuPulse.secondsTextBox.getNumber());
ticksTextBox.setNumber(menuPulse.ticksTextBox.getNumber());
} else
{
setDefault();
}
}
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
usePulse = nbtTagCompound.getBoolean(NBT_USE_PULSE);
if (usePulse)
{
radioButtons.setSelectedOption(nbtTagCompound.getByte(NBT_TYPE));
secondsTextBox.setNumber(nbtTagCompound.getByte(NBT_SECOND));
ticksTextBox.setNumber(nbtTagCompound.getByte(NBT_TICK));
} else
{
setDefault();
}
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup)
{
nbtTagCompound.setBoolean(NBT_USE_PULSE, usePulse);
if (usePulse)
{
nbtTagCompound.setByte(NBT_TYPE, (byte)radioButtons.getSelectedOption());
nbtTagCompound.setByte(NBT_SECOND, (byte)secondsTextBox.getNumber());
nbtTagCompound.setByte(NBT_TICK, (byte)ticksTextBox.getNumber());
}
}
public void sendClientPacket(ContainerManager container, ComponentSyncType type)
{
ASMPacket dw = getWriterForClientComponentPacket(container);
writeData(dw, type);
PacketHandler.sendDataToListeningClients(container, dw);
}
public void writeData(ASMPacket dw, ComponentSyncType type)
{
dw.writeByte(type.ordinal());
switch (type)
{
case CHECK_BOX:
dw.writeBoolean(usePulse);
break;
case RADIO_BUTTON:
dw.writeByte(radioButtons.getSelectedOption());
break;
case TEXT_BOX_1:
dw.writeVarIntToBuffer(secondsTextBox.getNumber());
break;
case TEXT_BOX_2:
dw.writeByte(ticksTextBox.getNumber());
}
}
public boolean shouldEmitPulse()
{
return usePulse;
}
public PULSE_OPTIONS getSelectedPulseOverride()
{
return PULSE_OPTIONS.values()[radioButtons.getSelectedOption()];
}
public int getPulseTime()
{
return secondsTextBox.getNumber() * 20 + ticksTextBox.getNumber();
}
public enum PULSE_OPTIONS
{
EXTEND_OLD(Names.EXTEND_OLD),
KEEP_ALL(Names.KEEP_ALL),
KEEP_OLD(Names.KEEP_OLD),
KEEP_NEW(Names.KEEP_NEW);
public String name;
PULSE_OPTIONS(String name)
{
this.name = name;
}
@Override
public String toString()
{
return name;
}
public String getName()
{
return name;
}
}
public enum ComponentSyncType
{
CHECK_BOX,
RADIO_BUTTON,
TEXT_BOX_1,
TEXT_BOX_2
}
}