package rts.core.engine.ingamegui;
import java.util.ArrayList;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SpriteSheet;
import rts.core.engine.Engine;
import rts.core.engine.layers.entities.EData;
import rts.utils.ResourceManager;
public class GuiMenu {
private Engine engine;
private ArrayList<Integer> buildingList;
private ArrayList<GuiPanel> panels;
private GuiButton[] menusButton;
private GuiButton repairButton;
private GuiButton sellButton;
private SpriteSheet sheet;
private int selected;
private boolean sellMod;
private boolean repairMod;
public GuiMenu(Engine engine) {
this.engine = engine;
this.buildingList = new ArrayList<Integer>();
}
public void init() {
sheet = ResourceManager.getSpriteSheet("buttons");
menusButton = new GuiButton[5];
for (int i = 0; i < menusButton.length; i++) {
menusButton[i] = new GuiButton(engine, sheet.getSprite(i, 0), (engine.getContainer().getWidth() - 190) + (i * 30), 240);
menusButton[i].setTabButton(true);
}
// Needed combinations
// Repair
repairButton = new GuiButton(engine, sheet.getSprite(5, 0), engine.getContainer().getWidth() - 190, 200);
repairButton.setTabButton(true);
repairButton.setName("Repair");
repairButton.setAlwaysEnable(true);
sellButton = new GuiButton(engine, sheet.getSprite(6, 0), engine.getContainer().getWidth() - 160, 200);
sellButton.setTabButton(true);
sellButton.setName("Sell");
sellButton.setAlwaysEnable(true);
// Building
menusButton[0].addEnableCombination(new int[] { EData.BUILDING_BUILDER });
menusButton[0].setName("Building");
// Defense
menusButton[1].addEnableCombination(new int[] { EData.BUILDING_BUILDER });
menusButton[1].setName("Defense");
// Earth
menusButton[2].addEnableCombination(new int[] { EData.BUILDING_BARRACK });
menusButton[2].addEnableCombination(new int[] { EData.BUILDING_CONSTRUCTOR });
menusButton[2].addEnableCombination(new int[] { EData.BUILDING_BIG_CONSTRUCTOR });
menusButton[2].setName("Vehicle");
// Air
menusButton[3].addEnableCombination(new int[] { EData.BUILDING_STARPORT });
menusButton[3].addEnableCombination(new int[] { EData.BUILDING_STARPORT_2 });
menusButton[3].setName("Aircraft");
// Marine
menusButton[4].addEnableCombination(new int[] { EData.BUILDING_PORT });
menusButton[4].setName("Marine");
selected = -1;
// Panels
panels = GuiPanelFactory.getAllPanels(engine, this);
}
public void resizeMenu() {
for (int i = 0; i < menusButton.length; i++) {
menusButton[i].setLocation((engine.getContainer().getWidth() - 190) + (i * 30), 240);
menusButton[i].setTabButton(true);
}
repairButton.setLocation(engine.getContainer().getWidth() - 190, 200);
repairButton.setTabButton(true);
sellButton.setLocation(engine.getContainer().getWidth() - 160, 200);
sellButton.setTabButton(true);
for (int i = 0; i < panels.size(); i++) {
panels.get(i).setLocation(engine.getContainer().getWidth() - 190, 280);
}
}
public void mousePressed(int button, int x, int y) {
if (button == Input.MOUSE_LEFT_BUTTON) {
for (int i = 0; i < menusButton.length; i++) {
if (menusButton[i].isMouseOver(x, y) && menusButton[i].isEnable()) {
for (int j = 0; j < menusButton.length; j++) {
menusButton[j].setImage(sheet.getSprite(j, 0));
}
menusButton[i].setImage(sheet.getSprite(i, 1));
selected = i;
return;
}
}
sellMod = false;
repairMod = false;
repairButton.setImage(sheet.getSprite(5, 0));
sellButton.setImage(sheet.getSprite(6, 0));
if (sellButton.isMouseOver(x, y)) {
sellButton.setImage(sheet.getSprite(6, 1));
sellMod = true;
return;
} else {
if (repairButton.isMouseOver(x, y)) {
repairButton.setImage(sheet.getSprite(5, 1));
repairMod = true;
return;
}
}
for (int i = 0; i < panels.size(); i++) {
panels.get(i).mousePressed(x, y);
}
}
}
public void blinkButton(int id, int delta) {
menusButton[id].blink(delta);
}
public void stopBlinkButton(int id) {
menusButton[id].resetBlink();
}
public void increaseBuildLimit(int panelId, int increase) {
panels.get(panelId).increaseBuildLimit(increase);
}
public void decreaseBuildLimit(int panelId, int decrease) {
panels.get(panelId).decreaseBuildLimit(decrease);
}
public void render(GameContainer container, Graphics g) {
for (int i = 0; i < menusButton.length; i++) {
menusButton[i].render(container, g);
}
repairButton.render(container, g);
sellButton.render(container, g);
for (int i = 0; i < menusButton.length; i++) {
menusButton[i].renderInfo(container, g);
}
repairButton.renderInfo(container, g);
sellButton.renderInfo(container, g);
if (selected != -1) {
panels.get(selected).render(container, g);
}
}
public void update(GameContainer container, int delta) {
for (int i = 0; i < menusButton.length; i++) {
menusButton[i].checkEnable(buildingList, delta, true);
}
for (int i = 0; i < panels.size(); i++) {
panels.get(i).update(buildingList, delta, (selected == i));
}
repairButton.checkEnable(buildingList, delta, true);
sellButton.checkEnable(buildingList, delta, true);
}
public void addEntityToBuildingList(int type) {
buildingList.add(new Integer(type));
}
public void removeEntityFromBuildingList(int type) {
buildingList.remove(new Integer(type));
}
public boolean containRadarOrDevCenter() {
return buildingList.contains(new Integer(EData.BUILDING_RADAR)) || buildingList.contains(new Integer(EData.BUILDING_DEV_CENTER));
}
public void clear() {
buildingList.clear();
selected = -1;
sellMod = false;
repairMod = false;
for (int i = 0; i < menusButton.length; i++) {
menusButton[i].clear();
}
for (int i = 0; i < panels.size(); i++) {
panels.get(i).clear();
}
repairButton.clear();
sellButton.clear();
}
public boolean isRepairMod() {
return repairMod;
}
public boolean isSellMod() {
return sellMod;
}
public ArrayList<GuiPanel> getPanels() {
return panels;
}
}