package advancedsystemsmanager.flow.menus; import advancedsystemsmanager.api.ISystemType; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.elements.CheckBox; import advancedsystemsmanager.flow.elements.CheckBoxList; import advancedsystemsmanager.client.gui.GuiManager; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.registry.SystemTypeRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class MenuContainerTypes extends Menu { public static final int CHECK_BOX_X = 5; public static final int CHECK_BOX_Y = 5; public static final int CHECK_BOX_SPACING_X = 55; public static final int CHECK_BOX_SPACING_Y = 12; public static final String NBT_CHECKED = "Checked"; public List<ISystemType> types; public boolean[] checked; public CheckBoxList checkBoxes; public MenuContainerTypes(FlowComponent parent) { super(parent); types = new ArrayList<ISystemType>(); for (ISystemType connectionBlockType : SystemTypeRegistry.getTypes()) { if (!connectionBlockType.isGroup()) { types.add(connectionBlockType); } } checked = new boolean[types.size()]; for (int i = 0; i < checked.length; i++) { checked[i] = true; } checkBoxes = new CheckBoxList(); for (int i = 0; i < types.size(); i++) { final int id = i; int x = i % 2; int y = i / 2; checkBoxes.addCheckBox(new CheckBox(getParent(), types.get(i).getName(), CHECK_BOX_X + CHECK_BOX_SPACING_X * x, CHECK_BOX_Y + CHECK_BOX_SPACING_Y * y) { @Override public void setValue(boolean val) { setChecked(id, val); } @Override public boolean getValue() { return isChecked(id); } }); } } protected void setChecked(int id, boolean value) { checked[id] = value; } protected boolean isChecked(int id) { return checked[id]; } @Override public String getName() { return Names.CONTAINER_TYPE_MENU; } @SideOnly(Side.CLIENT) @Override public void draw(GuiManager gui, int mX, int mY) { checkBoxes.draw(gui, mX, mY); } @Override public void onClick(int mX, int mY, int button) { checkBoxes.onClick(mX, mY); } @Override public void copyFrom(Menu menu) { MenuContainerTypes menuTypes = (MenuContainerTypes)menu; System.arraycopy(menuTypes.checked, 0, checked, 0, checked.length); } @Override public void readFromNBT(NBTTagCompound nbtTagCompound, boolean pickup) { short data = nbtTagCompound.getShort(NBT_CHECKED); for (int i = 0; i < checked.length; i++) { checked[i] = ((data >> i) & 1) != 0; } } @Override public void writeToNBT(NBTTagCompound nbtTagCompound, boolean pickup) { short data = 0; for (int i = 0; i < checked.length; i++) { if (checked[i]) { data |= 1 << i; } } nbtTagCompound.setShort(NBT_CHECKED, data); } public Set<ISystemType> getValidTypes() { Set<ISystemType> types = new HashSet<ISystemType>(); for (int i = 0; i < getTypes().size(); i++) { if (getChecked()[i]) { types.add(getTypes().get(i)); } } return types; } public List<ISystemType> getTypes() { return types; } public boolean[] getChecked() { return checked; } }