package com.galvarez.ttw.screens;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.artemis.Entity;
import com.artemis.World;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.galvarez.ttw.ThingsThatWereGame;
import com.galvarez.ttw.model.ArmiesSystem;
import com.galvarez.ttw.model.components.Army;
import com.galvarez.ttw.model.components.ArmyCommand;
import com.galvarez.ttw.rendering.components.Description;
import com.galvarez.ttw.rendering.components.Name;
import com.galvarez.ttw.rendering.ui.FramedMenu;
/**
* This screen appears when user selects the armies menu. It lists the existing
* player armies and permits to create new ones.
*
* @author Guillaume Alvarez
*/
public final class ArmiesMenuScreen extends AbstractPausedScreen<AbstractScreen> {
@SuppressWarnings("unused")
private static final Logger log = LoggerFactory.getLogger(ArmiesMenuScreen.class);
private final FramedMenu topMenu;
private final FramedMenu listMenu;
private final FramedMenu armyMenu;
private final Entity player;
private final ArmiesSystem system;
public ArmiesMenuScreen(ThingsThatWereGame game, World world, SpriteBatch batch, AbstractScreen gameScreen,
Entity player, ArmiesSystem system) {
super(game, world, batch, gameScreen);
this.player = player;
this.system = system;
topMenu = new FramedMenu(skin, 800, 600);
listMenu = new FramedMenu(skin, 800, 600);
armyMenu = new FramedMenu(skin, 800, 600);
}
@Override
protected void initMenu() {
createTopMenu();
createListMenu();
createArmyMenu(null);
}
private void createTopMenu() {
topMenu.clear();
topMenu.addButton("Resume game", this::resumeGame);
topMenu.addToStage(stage, 30, stage.getHeight() - 30, false);
}
private void createListMenu() {
listMenu.clear();
List<Entity> armies = system.getArmies(player);
if (armies.isEmpty())
listMenu.addLabel("- No active army -");
else {
listMenu.addLabel("- " + armies.size() + " active arm" + (armies.size() > 1 ? "ies" : "y") + " -");
for (Entity e : armies) {
Army army = e.getComponent(Army.class);
listMenu.addButton(e.getComponent(Name.class).name + " - power=" + army.currentPower + "/" + army.maxPower,
() -> createArmyMenu(e));
}
}
ArmyCommand command = player.getComponent(ArmyCommand.class);
int availablePower = command.militaryPower - command.usedPower;
if (availablePower > 0)
listMenu.addButton("Create new army with " + availablePower + " power (of " + command.militaryPower
+ ", will be removed from source)", () -> {
Entity newArmy = system.createNewArmy(player, availablePower);
if (newArmy != null) {
createListMenu();
createArmyMenu(newArmy);
}
});
else
listMenu.addLabel("- Cannot create a new army: no available military power. -");
listMenu.addToStage(stage, 30, topMenu.getY() - 30, false);
}
private void createArmyMenu(Entity selected) {
armyMenu.clear();
if (selected == null) {
armyMenu.addLabel("- No selected army -");
} else {
armyMenu.addLabel("- Selected '" + selected.getComponent(Description.class) + "' -");
Army army = selected.getComponent(Army.class);
armyMenu.addLabel(" Power = " + army.currentPower + "/" + army.maxPower);
}
armyMenu.addToStage(stage, 30, listMenu.getY() - 30, false);
}
}