/* * UFO Saved Game Editor * Copyright (C) 2010 Christopher Davoren * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.rubikscomplex.ufosge.gui.table; import javax.swing.table.AbstractTableModel; import net.rubikscomplex.ufosge.data.SavedGame; import net.rubikscomplex.ufosge.data.Soldier; /** * * @author Chris Davoren */ public class SoldierStatisticsTableModel extends AbstractTableModel { public static final int COLUMN_NAME = 0; public static final int COLUMN_BASE_VALUE = 1; public static final int COLUMN_IMP_VALUE = 2; public static final int ROW_TIME_UNITS = 0; public static final int ROW_HEALTH = 1; public static final int ROW_ENERGY = 2; public static final int ROW_REACTIONS = 3; public static final int ROW_STRENGTH = 4; public static final int ROW_FIRING_ACCRUACY = 5; public static final int ROW_THROWING_ACCURACY = 6; public static final int ROW_MELEE_ACCURACY = 7; public static final int ROW_BRAVERY = 8; public static final int NUM_COLUMNS = 3; public static final int NUM_ROWS = 9; protected SavedGame game; protected Soldier soldier; protected Short[][] valuesCache; public SoldierStatisticsTableModel(SavedGame game, Soldier soldier) { super(); this.game = game; this.soldier = soldier; valuesCache = new Short[NUM_ROWS][NUM_COLUMNS - 1]; updateCache(); } public int getColumnCount() { return NUM_COLUMNS; } public int getRowCount() { return NUM_ROWS; } @Override public boolean isCellEditable(int row, int column) { return column == COLUMN_BASE_VALUE || column == COLUMN_IMP_VALUE; } @Override public String getColumnName(int column) { switch (column) { case COLUMN_NAME: return "Attribtute"; case COLUMN_BASE_VALUE: return "Base Value"; case COLUMN_IMP_VALUE: return "Improvement"; default: return "Unknown"; } } public Object getValueAt(int row, int column) { if (column == 0) { switch(row) { case 0: return "Time Units"; case 1: return "Health"; case 2: return "Energy"; case 3: return "Reactions"; case 4: return "Strength"; case 5: return "Firing Accuracy"; case 6: return "Throwing Accuracy"; case 7: return "Melee Accuracy"; case 8: return "Bravery"; default: return "Unknown"; } } return valuesCache[row][column - 1]; } public void updateCache() { valuesCache[ROW_TIME_UNITS][COLUMN_BASE_VALUE - 1] = soldier.timeUnits; valuesCache[ROW_HEALTH][COLUMN_BASE_VALUE - 1] = soldier.health; valuesCache[ROW_ENERGY][COLUMN_BASE_VALUE - 1] = soldier.energy; valuesCache[ROW_REACTIONS][COLUMN_BASE_VALUE - 1] = soldier.reactions; valuesCache[ROW_STRENGTH][COLUMN_BASE_VALUE - 1] = soldier.strength; valuesCache[ROW_FIRING_ACCRUACY][COLUMN_BASE_VALUE - 1] = soldier.firingAccuracy; valuesCache[ROW_THROWING_ACCURACY][COLUMN_BASE_VALUE - 1] = soldier.throwingAccuracy; valuesCache[ROW_MELEE_ACCURACY][COLUMN_BASE_VALUE - 1] = soldier.meleeAccuracy; valuesCache[ROW_BRAVERY][COLUMN_BASE_VALUE - 1] = soldier.bravery; valuesCache[ROW_TIME_UNITS][COLUMN_IMP_VALUE - 1] = soldier.timeUnitsImp; valuesCache[ROW_HEALTH][COLUMN_IMP_VALUE - 1] = soldier.healthImp; valuesCache[ROW_ENERGY][COLUMN_IMP_VALUE - 1] = soldier.energyImp; valuesCache[ROW_REACTIONS][COLUMN_IMP_VALUE - 1] = soldier.reactionsImp; valuesCache[ROW_STRENGTH][COLUMN_IMP_VALUE - 1] = soldier.strengthImp; valuesCache[ROW_FIRING_ACCRUACY][COLUMN_IMP_VALUE - 1] = soldier.firingAccuracyImp; valuesCache[ROW_THROWING_ACCURACY][COLUMN_IMP_VALUE - 1] = soldier.throwingAccuracyImp; valuesCache[ROW_MELEE_ACCURACY][COLUMN_IMP_VALUE - 1] = soldier.meleeAccuracyImp; valuesCache[ROW_BRAVERY][COLUMN_IMP_VALUE - 1] = soldier.braveryImp; } public void update() { soldier.timeUnits = valuesCache[ROW_TIME_UNITS][COLUMN_BASE_VALUE - 1]; soldier.health = valuesCache[ROW_HEALTH][COLUMN_BASE_VALUE - 1]; soldier.energy = valuesCache[ROW_ENERGY][COLUMN_BASE_VALUE - 1]; soldier.reactions = valuesCache[ROW_REACTIONS][COLUMN_BASE_VALUE - 1]; soldier.strength = valuesCache[ROW_STRENGTH][COLUMN_BASE_VALUE - 1]; soldier.firingAccuracy = valuesCache[ROW_FIRING_ACCRUACY][COLUMN_BASE_VALUE - 1]; soldier.throwingAccuracy = valuesCache[ROW_THROWING_ACCURACY][COLUMN_BASE_VALUE - 1]; soldier.meleeAccuracy = valuesCache[ROW_MELEE_ACCURACY][COLUMN_BASE_VALUE - 1]; soldier.bravery = valuesCache[ROW_BRAVERY][COLUMN_BASE_VALUE - 1]; soldier.timeUnitsImp = valuesCache[ROW_TIME_UNITS][COLUMN_IMP_VALUE - 1]; soldier.healthImp = valuesCache[ROW_HEALTH][COLUMN_IMP_VALUE - 1]; soldier.energyImp = valuesCache[ROW_ENERGY][COLUMN_IMP_VALUE - 1]; soldier.reactionsImp = valuesCache[ROW_REACTIONS][COLUMN_IMP_VALUE - 1]; soldier.strengthImp = valuesCache[ROW_STRENGTH][COLUMN_IMP_VALUE - 1]; soldier.firingAccuracyImp = valuesCache[ROW_FIRING_ACCRUACY][COLUMN_IMP_VALUE - 1]; soldier.throwingAccuracyImp = valuesCache[ROW_THROWING_ACCURACY][COLUMN_IMP_VALUE - 1]; soldier.meleeAccuracyImp = valuesCache[ROW_MELEE_ACCURACY][COLUMN_IMP_VALUE - 1]; soldier.braveryImp = valuesCache[ROW_BRAVERY][COLUMN_IMP_VALUE - 1]; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // System.out.println("Updating value..."); if (columnIndex != COLUMN_BASE_VALUE && columnIndex != COLUMN_IMP_VALUE) { return; } short value; try { value = Short.parseShort(aValue.toString()); if (value > 255) { return; } } catch(NumberFormatException e) { return; } valuesCache[rowIndex][columnIndex - 1] = value; } }