/*
* 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;
}
}