kyle.game.besiege.panels.PanelUnit.java Source code

Java tutorial

Introduction

Here is the source code for kyle.game.besiege.panels.PanelUnit.java

Source

/*******************************************************************************
 * Besiege
 * by Kyle Dhillon
 * Source Code available under a read-only license. Do not copy, modify, or distribute.
 ******************************************************************************/
package kyle.game.besiege.panels;

import kyle.game.besiege.Assets;
import kyle.game.besiege.SidePanel;
import kyle.game.besiege.battle.Battle;
import kyle.game.besiege.battle.BattleStage;
import kyle.game.besiege.battle.Unit;
import kyle.game.besiege.battle.Unit.Stance;
import kyle.game.besiege.party.Party;
import kyle.game.besiege.party.Soldier;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.NinePatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable;

public class PanelUnit extends Panel {
    private final float PAD = 10;
    private final float MINI_PAD = 5;
    private final float NEG = -5;
    private final float DESC_HEIGHT = 530;
    private final int r = 3;
    private final String tablePatch = "grey-d9";
    private final String redPatch = "red9";
    private final String greenPatch = "green9";
    private BattleStage battleStage;
    private Battle battle;
    private SidePanel panel;
    private Unit unit;
    private Soldier soldier;
    private int max_hp;
    private Party party;

    private Table text;
    private Label title;
    private Label armyName;
    private Label partyName;
    private Label type;

    private Table health;
    private Table red;
    private Table green;

    //   private Table stats;
    //   private Label nameS;
    private Label levelS;
    private Label hpS;
    private Label expS;
    private Label atkS;
    private Label defS;
    private Label spdS;
    private Label weaponS;
    private Label equipmentS;
    private Label actionS;

    //   private Table soldierTable;
    //   private ScrollPane soldierPane;

    private LabelStyle ls;
    private LabelStyle lsMed;
    private LabelStyle lsG;

    public PanelUnit(SidePanel panel, Unit unit) {
        this.panel = panel;
        this.unit = unit;
        this.battleStage = unit.stage;
        this.battle = this.battleStage.battle;
        this.soldier = unit.soldier;
        this.party = unit.party;
        this.addParentPanel(panel);

        this.max_hp = unit.calcHP();

        LabelStyle lsBig = new LabelStyle();
        lsBig.font = Assets.pixel22;
        lsMed = new LabelStyle();
        lsMed.font = Assets.pixel18;
        ls = new LabelStyle();
        ls.font = Assets.pixel16;
        lsG = new LabelStyle();
        lsG.font = Assets.pixel16;
        lsG.fontColor = Color.GRAY;

        Label levelSC = new Label("Level:", ls);
        Label hpSC = new Label("HP:", ls);
        Label expSC = new Label("Height:", ls);
        Label atkSC = new Label("Atk:", ls);
        Label defSC = new Label("Def:", ls);
        Label spdSC = new Label("Spd:", ls);
        Label weaponSC = new Label("Weapon: ", ls);
        Label equipmentSC = new Label("Armor: ", ls);

        title = new Label(soldier.getName(), lsBig);
        title.setAlignment(0, 0);
        //      title.setWrap(true); // wrapping messes up click listeners... WTF?
        title.setWidth(SidePanel.WIDTH - PAD * 2 - MINI_PAD * 2);
        //      title.addListener(new InputListener() {
        //         public boolean touchDown(InputEvent event, float x,
        //               float y, int pointer, int button) {
        //            return true;
        //         }
        //         public void touchUp(InputEvent event, float x, float y,
        //               int pointer, int button) {
        //            centerCamera();
        //         }
        //      });

        armyName = new Label("", ls);
        if (party.army != null)
            armyName.setText(party.army.getName());
        armyName.setAlignment(0, 0);

        levelS = new Label("" + soldier.level, ls);
        hpS = new Label("" + unit.hp, ls);
        expS = new Label("" + soldier.next, ls);
        atkS = new Label("" + soldier.getAtk(), ls);
        defS = new Label("" + soldier.getDef(), ls);
        spdS = new Label("" + soldier.getSpd(), ls);
        weaponS = new Label("" + soldier.weapon.name, ls);
        if (unit.isRanged())
            weaponS.setText(soldier.rangedWeapon.name + "(" + unit.quiver + ")");
        weaponS.setAlignment(0, 0);

        equipmentS = new Label("", ls);
        actionS = new Label("" + unit.getStatus(), ls);
        actionS.setAlignment(0, 0);

        health = new Table();
        red = new Table();
        red.setBackground(new NinePatchDrawable(new NinePatch(Assets.atlas.findRegion(redPatch), r, r, r, r)));
        green = new Table();
        green.setBackground(new NinePatchDrawable(new NinePatch(Assets.atlas.findRegion(greenPatch), r, r, r, r)));

        // Create text
        text = new Table();
        //text.debug();
        text.defaults().padTop(NEG).left();

        //      title.addListener(new InputListener() {
        //         public boolean touchDown(InputEvent event, float x,
        //               float y, int pointer, int button) {
        //            return true;
        //         }
        //         public void touchUp(InputEvent event, float x, float y,
        //               int pointer, int button) {
        //            centerCamera();
        //         }
        //      });
        text.add(title).colspan(4).fillX().expandX().padBottom(0);
        text.row();
        text.add().colspan(2).width((SidePanel.WIDTH - PAD * 2) / 2);
        text.add().colspan(2).width((SidePanel.WIDTH - PAD * 2) / 2);
        text.row();
        text.add(armyName).colspan(4).fillX().expandX();
        text.row();
        text.add(health).colspan(4).padTop(MINI_PAD).padBottom(MINI_PAD);
        text.row();
        text.add(actionS).colspan(4).fillX().expandX();
        text.row();
        text.add(weaponS).colspan(4).fillX().expandX();
        text.row();
        text.add(atkSC).padLeft(MINI_PAD);
        text.add(atkS);
        text.add(levelSC).padLeft(PAD);
        text.add(levelS);
        text.row();
        text.add(defSC).padLeft(MINI_PAD);
        text.add(defS);
        text.add(hpSC).padLeft(PAD);
        text.add(hpS);
        text.row();
        text.add(spdSC).padLeft(MINI_PAD);
        text.add(spdS);
        text.add(expSC).padLeft(PAD);
        text.add(expS);

        text.row();

        text.padLeft(MINI_PAD);
        this.addTopTable(text);
    }

    @Override
    public void act(float delta) {
        levelS.setText("" + soldier.level);
        hpS.setText("" + unit.hp);
        //      expS.setText("" + soldier.exp);
        expS.setText("" + (int) (unit.getFloorHeight() * 10) / 10.0);
        atkS.setText("" + unit.atk);
        defS.setText("" + unit.def);
        spdS.setText("" + (int) unit.spd);
        if (unit.isRanged() && unit.attacking == null && unit.quiver > 0)
            weaponS.setText(soldier.rangedWeapon.name + " (" + unit.quiver + ")");
        else
            weaponS.setText(soldier.weapon.name);

        String mounted = "";
        if (unit.isMounted())
            mounted = " (Mounted)";
        actionS.setText(unit.getStatus() + mounted);

        health.clear();
        float totalWidth = SidePanel.WIDTH - PAD;

        health.add(green).width((float) (totalWidth * (unit.hp * 1.0 / max_hp)));
        if (totalWidth * (1 - (unit.hp * 1.0 / max_hp)) > 0)
            health.add(red).width((float) (totalWidth * (1 - (unit.hp * 1.0 / max_hp))));

        if (battleStage != null) {
            if (battle.playerInA || battle.playerInD) {
                if (!battleStage.placementPhase) {
                    if (battleStage.retreatTimerPlayer <= 0 && !battleStage.allies.retreating) {
                        this.setButton(1, "Retreat!");
                        this.getButton(1).setDisabled(false);
                    } else if (!(battleStage.retreatTimerPlayer <= 0)) {
                        this.setButton(1,
                                "Retreat (" + String.format("%.0f", battleStage.retreatTimerPlayer) + ")");
                        this.getButton(1).setDisabled(true);
                    } else if (battleStage.allies.retreating) {
                        this.setButton(1, "Retreat!");
                        this.getButton(1).setDisabled(true);
                        this.getButton(1).setVisible(true);
                        this.getButton(2).setDisabled(true);
                    }
                } else {
                    this.setButton(1, battleStage.currentFormation.name);
                    this.setButton(2, battleStage.getPlayerStanceString());
                }
            }
        }

        if (battleStage != null && !battleStage.placementPhase) {
            this.setButton(2, "Charge!");
            if (battleStage.allies.stance == Stance.AGGRESSIVE)
                this.getButton(2).setDisabled(true);
            //         else this.setButton(2, null);
        }

        super.act(delta);
    }

    //   public void setStats(Soldier s) {
    //      stats.setVisible(true);
    //      nameS.setText(s.name + "");
    //      levelS.setText(s.level + "");
    //      expS.setText(s.exp + "");
    //      nextS.setText(s.next + "");
    //      if (s.bonusAtk >= 0)
    //         atkS.setText(s.getAtk() + " (" + s.baseAtk + "+" + s.bonusAtk + ")");
    //      else 
    //         atkS.setText(s.getAtk() + " (" + s.baseAtk + s.bonusAtk + ")");
    //      if (s.bonusDef >= 0)
    //         defS.setText(s.getDef() + " (" + s.baseDef + "+" + s.bonusDef + ")");
    //      else 
    //         defS.setText(s.getDef() + " (" + s.baseDef + s.bonusDef + ")");
    //      if (s.bonusSpd >= 0)
    //         spdS.setText(s.getSpd() + " (" + s.baseSpd + "+" + s.bonusSpd + ")");
    //      else 
    //         spdS.setText(s.getSpd() + " (" + s.baseSpd + s.bonusSpd + ")");
    //      weaponS.setText(s.weapon.name);
    //   }

    //   public void clearStats() {
    //      stats.setVisible(false);
    //   }
    //   
    //   public void setActiveFaction() {
    //      panel.setActiveFaction(location.getFaction());
    //   }
    //   public void centerCamera() {
    //      OrthographicCamera camera = panel.getKingdom().getMapScreen().getCamera();
    //      camera.translate(new Vector2(location.getCenterX()-camera.position.x, location.getCenterY()-camera.position.y));
    //   }

    @Override
    public void button1() {
        //retreat button
        if (getButton(1).isVisible()) {

            if (battleStage == null) {
                //            battle.retreat(sidePanel.getKingdom().getPlayer());
                return;
            } else {
                if (battleStage.placementPhase) {
                    this.battleStage.toNextFormation();
                } else {
                    battleStage.placementPhase = false;
                    battleStage.retreatAll(true);
                    getButton(1).setDisabled(true);
                }
            }

        }
    }

    @Override
    public void button2() {

        if (getButton(2).isVisible()) {

            if (battleStage == null)
                BottomPanel.log("no battle stage to retreat!!");
            else {
                // toggle stance
                if (battleStage.placementPhase) {
                    this.battleStage.togglePlayerStance();
                }
                // charge all (move "Begin!" to button 3)
                else {
                    battleStage.placementPhase = false;
                    battleStage.chargeAll(true);
                    //               getButton(2).setVisible(false);
                    getButton(2).setDisabled(true);
                }
            }
        }
        //      BottomPanel.log("b2");
    }

    @Override
    public void button3() {

    }

    @Override
    public void button4() {

    }

    @Override
    public TextureRegion getCrest() {
        if (party.army != null)
            return party.army.getFaction().crest;
        return null;
    }
}