package com.oddlabs.tt.delegate; import java.util.ResourceBundle; import org.lwjgl.input.Keyboard; import com.oddlabs.tt.animation.TimerAnimation; import com.oddlabs.tt.animation.Updatable; import com.oddlabs.tt.camera.Camera; import com.oddlabs.tt.camera.StaticCamera; import com.oddlabs.tt.form.TerrainMenu; import com.oddlabs.tt.guievent.MouseClickListener; import com.oddlabs.tt.net.PeerHub; import com.oddlabs.tt.landscape.World; import com.oddlabs.tt.player.Player; import com.oddlabs.tt.util.Utils; import com.oddlabs.tt.viewer.WorldViewer; import com.oddlabs.tt.gui.*; public final strictfp class GameStatsDelegate extends CameraDelegate implements Updatable { private final static int PLAYER_COLUMN_WIDTH = 100; private final static int TEXT_OFFSET = -4; public final static ResourceBundle bundle = ResourceBundle.getBundle(GameStatsDelegate.class.getName()); private final TimerAnimation delay_timer = new TimerAnimation(this, .6f); private final Group group_buttons; private final WorldViewer viewer; public GameStatsDelegate(WorldViewer viewer, Camera old_camera, String label_str) { super(viewer.getGUIRoot(), new StaticCamera(old_camera.getState())); this.viewer = viewer; setDim(LocalInput.getViewWidth(), LocalInput.getViewHeight()); Label label = new Label(label_str, Skin.getSkin().getHeadlineFont()); addChild(label); label.setPos((getWidth() - label.getWidth())/2, (getHeight() - label.getHeight())*4/5); Player[] players = viewer.getWorld().getPlayers(); ColumnInfo[] score_infos = new ColumnInfo[players.length + 1]; score_infos[0] = new ColumnInfo(Utils.getBundleString(bundle, "type"), 160); for (int i = 0; i < players.length; i++) score_infos[i + 1] = new ColumnInfo(players[i].getPlayerInfo().getName(), PLAYER_COLUMN_WIDTH); MultiColumnComboBox score_box = new MultiColumnComboBox(viewer.getGUIRoot(), score_infos, 200); addChild(score_box); score_box.setPos((getWidth() - score_box.getWidth())/2, (getHeight() - score_box.getHeight())/2); GUIObject[] units_lost_labels = new GUIObject[players.length + 1]; units_lost_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "units_lost"), 0, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) units_lost_labels[i + 1] = new IntegerLabel(players[i].getUnitsLost(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(units_lost_labels, null)); GUIObject[] units_killed_labels = new GUIObject[players.length + 1]; units_killed_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "units_killed"), 1, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) units_killed_labels[i + 1] = new IntegerLabel(players[i].getUnitsKilled(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(units_killed_labels, null)); GUIObject[] buildings_lost_labels = new GUIObject[players.length + 1]; buildings_lost_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "buildings_lost"), 2, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) buildings_lost_labels[i + 1] = new IntegerLabel(players[i].getBuildingsLost(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(buildings_lost_labels, null)); GUIObject[] buildings_destroyed_labels = new GUIObject[players.length + 1]; buildings_destroyed_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "buildings_wrecked"), 3, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) buildings_destroyed_labels[i + 1] = new IntegerLabel(players[i].getBuildingsDestroyed(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(buildings_destroyed_labels, null)); GUIObject[] tree_harvested_labels = new GUIObject[players.length + 1]; tree_harvested_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "tree_resources"), 3, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) tree_harvested_labels[i + 1] = new IntegerLabel(players[i].getTreeHarvested(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(tree_harvested_labels, null)); GUIObject[] rock_harvested_labels = new GUIObject[players.length + 1]; rock_harvested_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "rock_resources"), 4, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) rock_harvested_labels[i + 1] = new IntegerLabel(players[i].getRockHarvested(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(rock_harvested_labels, null)); GUIObject[] iron_harvested_labels = new GUIObject[players.length + 1]; iron_harvested_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "iron_resources"), 5, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) iron_harvested_labels[i + 1] = new IntegerLabel(players[i].getIronHarvested(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(iron_harvested_labels, null)); GUIObject[] rubber_harvested_labels = new GUIObject[players.length + 1]; rubber_harvested_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "chicken_resources"), 6, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) rubber_harvested_labels[i + 1] = new IntegerLabel(players[i].getRubberHarvested(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(rubber_harvested_labels, null)); GUIObject[] walked_labels = new GUIObject[players.length + 1]; walked_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "meters_walked"), 7, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) walked_labels[i + 1] = new IntegerLabel(players[i].getUnitsMoved()*2, Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(walked_labels, null)); GUIObject[] weapons_labels = new GUIObject[players.length + 1]; weapons_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "weapons_thrown"), 8, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) weapons_labels[i + 1] = new IntegerLabel(players[i].getWeaponsThrown(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(weapons_labels, null)); GUIObject[] magics_labels = new GUIObject[players.length + 1]; magics_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "magics_used"), 9, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) magics_labels[i + 1] = new IntegerLabel(players[i].getMagics(), Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); score_box.addRow(new Row(magics_labels, null)); GUIObject[] total_labels = new GUIObject[players.length + 1]; total_labels[0] = new SortedLabel(Utils.getBundleString(bundle, "total"), 10, Skin.getSkin().getMultiColumnComboBoxData().getFont()); for (int i = 0; i < players.length; i++) { int unit_killed = players[i].getUnitsKilled(); int buildings_wrecked = players[i].getBuildingsDestroyed(); int tree = players[i].getTreeHarvested(); int rock = players[i].getRockHarvested(); int iron = players[i].getIronHarvested(); int chicken = players[i].getRubberHarvested(); int total_score = unit_killed*10 + buildings_wrecked*100 + tree + rock + iron*2 + chicken*4; total_labels[i + 1] = new IntegerLabel(total_score, Skin.getSkin().getMultiColumnComboBoxData().getFont(), PLAYER_COLUMN_WIDTH + TEXT_OFFSET); } score_box.addRow(new Row(total_labels, null)); group_buttons = new Group(); viewer.addGameOverGUI(this, score_box.getY(), group_buttons); group_buttons.compileCanvas(); addChild(group_buttons); group_buttons.setPos((getWidth() - group_buttons.getWidth())/2, (getHeight() - group_buttons.getHeight())*1/5); setFocusCycle(true); delay_timer.start(); } public final void update(Object anim) { addChild(group_buttons); delay_timer.stop(); } protected final void renderGeometry() { renderBackgroundAlpha(); } protected void keyRepeat(KeyboardEvent event) { switch (event.getKeyCode()) { case Keyboard.KEY_TAB: switchFocus(event.isShiftDown() ? -1 : 1); break; default: super.keyRepeat(event); break; } } public final void startMenu() { viewer.close(); setDisabled(true); } public final WorldViewer getViewer() { return viewer; } }