package com.rebelkeithy.ftl.view.upgrade;
import java.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.google.common.eventbus.Subscribe;
import com.rebelkeithy.ftl.ship.Resource;
import com.rebelkeithy.ftl.ship.Ship;
import com.rebelkeithy.ftl.view.Button;
import com.rebelkeithy.ftl.view.CrewTabButton;
import com.rebelkeithy.ftl.view.FTLView;
import com.rebelkeithy.ftl.view.Fonts;
import com.rebelkeithy.ftl.view.GUI;
import com.rebelkeithy.ftl.view.TextureRegistry;
import com.rebelkeithy.ftl.view.events.RenderScrap;
public class UpgradeUI extends GUI
{
private Texture background;
private Button crewButton;
private Button equipmentButton;
private Texture systemMaxOn;
private Texture systemMaxOff;
private Texture systemMaxSelect;
private Texture systemNone;
private Texture systemOn;
private Texture systemSelect;
private Texture subsystemMaxOn;
private Texture subsystemMaxOff;
private Texture subsystemMaxSelect;
private Texture subsystemNone;
private Texture subsystemOn;
private Texture subsystemSelect;
private Texture acceptBase;
private Texture undoBase;
private List<Button> systems;
private List<Button> subsystems;
private Button reactor;
private Button accept;
private Button undo;
private Ship ship;
private int scrap;
public UpgradeUI(Ship ship)
{
this.ship = ship;
scrap = Resource.getResource("scrap").getResourceAmount(ship);
background = TextureRegistry.registerSprite("UpgradeBackground", "upgradeUI/Equipment/upgrades_main");
Texture crewTab = TextureRegistry.registerSprite("upgrades_crew_on", "upgradeUI/Equipment/tabButtons/upgrades_crew_on");
Texture crewTabHover = TextureRegistry.registerSprite("upgrades_crew_select2", "upgradeUI/Equipment/tabButtons/upgrades_crew_select2");
crewButton = new CrewTabButton(549, 593, crewTab);
crewButton.setHoverImage(crewTabHover);
crewButton.setDownImage(crewTabHover);
this.addButton(crewButton);
Texture equipmentTab = TextureRegistry.registerSprite("upgrades_equipment_on", "upgradeUI/Equipment/tabButtons/upgrades_equipment_on");
Texture equipmentTabSelect = TextureRegistry.registerSprite("upgrades_equipment_select2", "upgradeUI/Equipment/tabButtons/upgrades_equipment_select2");
equipmentButton = new Button(682, 593, equipmentTab);
equipmentButton.setHoverImage(equipmentTabSelect);
equipmentButton.setDownImage(equipmentTabSelect);
this.addButton(equipmentButton);
systemMaxOn = TextureRegistry.registerSprite("systemMaxOn", "upgradeUI/upgrade_system_bar_max_on");
systemMaxOff = TextureRegistry.registerSprite("systemMaxOff", "upgradeUI/upgrade_system_bar_off");
systemMaxSelect = TextureRegistry.registerSprite("systemMaxSelect", "upgradeUI/upgrade_system_bar_max_select2");
systemNone = TextureRegistry.registerSprite("systemNone", "upgradeUI/upgrade_system_bar_none");
systemOn = TextureRegistry.registerSprite("systemOn", "upgradeUI/upgrade_system_bar_on");
systemSelect = TextureRegistry.registerSprite("systemSelect", "upgradeUI/upgrade_system_bar_select2");
subsystemMaxOn = TextureRegistry.registerSprite("subsystemMaxOn", "upgradeUI/upgrade_subsystem_bar_max_on");
subsystemMaxOff = TextureRegistry.registerSprite("subsystemMaxOff", "upgradeUI/upgrade_subsystem_bar_off");
subsystemMaxSelect = TextureRegistry.registerSprite("subsystemMaxSelect", "upgradeUI/upgrade_subsystem_bar_max_select2");
subsystemNone = TextureRegistry.registerSprite("subsystemNone", "upgradeUI/upgrade_subsystem_bar_none");
subsystemOn = TextureRegistry.registerSprite("subsystemOn", "upgradeUI/upgrade_subsystem_bar_on");
subsystemSelect = TextureRegistry.registerSprite("subsystemSelect", "upgradeUI/upgrade_subsystem_bar_select2");
Texture reactorOn = TextureRegistry.registerSprite("equipment_reactor_on", "upgradeUI/Equipment/equipment_reactor_on");
Texture reactorSelect = TextureRegistry.registerSprite("equipment_reactor_select2", "upgradeUI/Equipment/equipment_reactor_select2");
Texture reactorMaxOn = TextureRegistry.registerSprite("equipment_reactor_off", "upgradeUI/Equipment/equipment_reactor_off");
Texture reactorMaxSelect = TextureRegistry.registerSprite("equipment_reactor_off", "upgradeUI/Equipment/equipment_reactor_off");
reactor = new ReactorButton(this, ship.getSystem("reactor"), 645, 195, reactorOn, reactorSelect, reactorMaxOn, reactorMaxSelect);
reactor.setHoverImage(reactorSelect);
reactor.setDownImage(reactorSelect);
this.addButton(reactor);
int i = 0;
systems = new ArrayList<Button>();
String[] systemNames = {"shields", "engines", "medbay", "oxygen", "weapons"};
for(String systemName : systemNames)
{
if(ship.getSystem(systemName) != null)
{
SystemButton button = new SystemButton(this, ship.getSystem(systemName), 379 + i*66, 370, systemOn, systemSelect, systemMaxOn, systemMaxSelect);
systems.add(button);
this.addButton(button);
i++;
}
}
i = 0;
subsystems = new ArrayList<Button>();
String[] subsystemNames = {"pilot", "sensors", "doors", "battery"};
for(String systemName : subsystemNames)
{
if(ship.getSystem(systemName) != null)
{
SystemButton button = new SystemButton(this, ship.getSystem(systemName), 356 + i*66, 192, subsystemOn, subsystemSelect, subsystemMaxOn, subsystemMaxSelect);
subsystems.add(button);
this.addButton(button);
i++;
}
}
acceptBase = TextureRegistry.registerSprite("acceptButtonBase", "upgradeUI/buttons_accept_base");
undoBase = TextureRegistry.registerSprite("undoButtonBase", "upgradeUI/buttons_undo_base");
Texture acceptUp = TextureRegistry.registerSprite("acceptButton", "upgradeUI/buttons_accept_on");
Texture acceptHover = TextureRegistry.registerSprite("acceptButtonHover", "upgradeUI/buttons_accept_select2");
accept = new AcceptButton(this, 753, 117, acceptUp);
accept.setHoverImage(acceptHover);
accept.setDownImage(acceptHover);
this.addButton(accept);
Texture undoUp = TextureRegistry.registerSprite("undoButton", "upgradeUI/buttons_undo_on");
Texture undoOff = TextureRegistry.registerSprite("undoButtonOff", "upgradeUI/buttons_undo_off");
Texture undoHover = TextureRegistry.registerSprite("undoButtonHover", "upgradeUI/buttons_undo_select2");
undo = new UndoButton(this, 350, 117, undoUp);
undo.setHoverImage(undoHover);
undo.setDownImage(undoHover);
undo.setDisabledImage(undoOff);
this.addButton(undo);
FTLView.instance().RENDER_BUS.register(this);
}
public int getAvaliableScrap()
{
return scrap;
}
public void render(SpriteBatch batch)
{
batch.draw(background, 340, 164);
crewButton.render(batch);
equipmentButton.render(batch);
//Fonts.numFont.draw(batch, ship.getName(), 500, 550);
int shipNameWidth = (int) Fonts.ccNew64.getBounds(ship.getName()).width;
Fonts.ccNew64.draw(batch, ship.getName(), 642 - shipNameWidth/2, 579);
for(int i = systems.size(); i < 8; i++)
{
batch.draw(systemNone, 379 + i*66, 370);
}
for(Button button : systems)
{
button.render(batch);
}
for(Button button : subsystems)
{
button.render(batch);
}
for(int i = subsystems.size(); i < 4; i++)
{
batch.draw(subsystemNone, 356 + i*66, 192);
}
batch.draw(undoBase, 350, 117);
undo.render(batch);
batch.draw(acceptBase, 753, 117);
accept.render(batch);
reactor.render(batch);
}
/*
public boolean click(int screenX, int screenY, int button)
{
if(accept.click(screenX, screenY, button))
return true;
if(undo.click(screenX, screenY, button))
return true;
if(crewButton.click(screenX, screenY, button))
return true;
for(Button systemButton : systems)
{
if(systemButton.click(screenX, screenY, button))
return true;
}
for(Button subsystemButton : subsystems)
{
if(subsystemButton.click(screenX, screenY, button))
return true;
}
if(reactor.click(screenX, screenY, button))
return true;
return false;
}
*/
public void undo()
{
for(Button button : systems)
{
((SystemButton)button).cancel();
}
for(Button button : subsystems)
{
((SystemButton)button).cancel();
}
reactor.cancel();
}
public void close()
{
FTLView.instance().RENDER_BUS.unregister(this);
}
@Subscribe
public void renderScrap(RenderScrap event)
{
int shipScrap = event.scrap;
for(Button button : systems)
{
shipScrap -= ((SystemButton)button).cost();
}
for(Button button : subsystems)
{
shipScrap -= ((SystemButton)button).cost();
}
shipScrap -= ((ReactorButton) reactor).cost();
if(shipScrap == event.scrap)
undo.setDisabled(true);
else
{
undo.setDisabled(false);
}
event.scrap = shipScrap;
scrap = shipScrap;
}
public void accept()
{
int shipScrap = 0;
for(Button button : systems)
{
((SystemButton)button).apply();
shipScrap += ((SystemButton)button).cost();
}
for(Button button : subsystems)
{
((SystemButton)button).apply();
shipScrap += ((SystemButton)button).cost();
}
((ReactorButton) reactor).apply();
shipScrap += ((ReactorButton) reactor).cost();
Resource.getResource("scrap").addResource(ship, -shipScrap);
}
}