/*
* Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, version 2.0. If a copy of the MPL was not distributed with
* this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This Source Code Form is "Incompatible With Secondary Licenses", as
* defined by the Mozilla Public License, version 2.0.
*/
package com.trollworks.gcs.weapon;
import com.trollworks.gcs.advantage.Advantage;
import com.trollworks.gcs.equipment.Equipment;
import com.trollworks.gcs.skill.Skill;
import com.trollworks.gcs.spell.Spell;
import com.trollworks.gcs.widgets.outline.ListRow;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.ui.widget.EditorField;
import com.trollworks.toolkit.utility.Localization;
import java.awt.Container;
import java.util.List;
/** An editor for ranged weapon statistics. */
public class RangedWeaponEditor extends WeaponEditor {
@Localize("Ranged Weapon")
@Localize(locale = "de", value = "Fernkampfwaffe")
@Localize(locale = "ru", value = "Дистанционное оружие")
@Localize(locale = "es", value = "Arma de ataque a distancia")
private static String RANGED_WEAPON;
@Localize("Accuracy")
@Localize(locale = "de", value = "Genauigkeit")
@Localize(locale = "ru", value = "Точность")
@Localize(locale = "es", value = "Precisión")
private static String ACCURACY;
@Localize("Range")
@Localize(locale = "de", value = "Reichweite")
@Localize(locale = "ru", value = "Дальность")
@Localize(locale = "es", value = "Alcance")
private static String RANGE;
@Localize("Rate of Fire")
@Localize(locale = "de", value = "Schussrate")
@Localize(locale = "ru", value = "Скорострельность")
@Localize(locale = "es", value = "Cadencia de disparo")
private static String RATE_OF_FIRE;
@Localize("Shots")
@Localize(locale = "de", value = "Schüsse")
@Localize(locale = "ru", value = "Боезапас")
@Localize(locale = "es", value = "Disparos")
private static String SHOTS;
@Localize("Bulk")
@Localize(locale = "de", value = "Handlichkeit")
@Localize(locale = "ru", value = "Размер")
@Localize(locale = "es", value = "Tamaño")
private static String BULK;
@Localize("Recoil")
@Localize(locale = "de", value = "Rückstoß")
@Localize(locale = "ru", value = "Отдача")
@Localize(locale = "es", value = "Retroceso")
private static String RECOIL;
static {
Localization.initialize();
}
private EditorField mAccuracy;
private EditorField mRange;
private EditorField mRateOfFire;
private EditorField mShots;
private EditorField mBulk;
private EditorField mRecoil;
/**
* Creates a new ranged weapon editor for the specified row.
*
* @param row The row to edit ranged weapon statistics for.
* @return The editor, or <code>null</code> if the row is not appropriate.
*/
static public RangedWeaponEditor createEditor(ListRow row) {
if (row instanceof Equipment) {
return new RangedWeaponEditor(row, ((Equipment) row).getWeapons());
} else if (row instanceof Advantage) {
return new RangedWeaponEditor(row, ((Advantage) row).getWeapons());
} else if (row instanceof Spell) {
return new RangedWeaponEditor(row, ((Spell) row).getWeapons());
} else if (row instanceof Skill) {
return new RangedWeaponEditor(row, ((Skill) row).getWeapons());
}
return null;
}
/**
* Creates a new {@link RangedWeaponStats} editor.
*
* @param owner The owning row.
* @param weapons The weapons to modify.
*/
public RangedWeaponEditor(ListRow owner, List<WeaponStats> weapons) {
super(owner, weapons, RangedWeaponStats.class);
}
@Override
protected void createFields(Container parent) {
mAccuracy = createTextField(parent, ACCURACY, EMPTY);
mRange = createTextField(parent, RANGE, EMPTY);
mRateOfFire = createTextField(parent, RATE_OF_FIRE, EMPTY);
mShots = createTextField(parent, SHOTS, EMPTY);
mRecoil = createTextField(parent, RECOIL, EMPTY);
mBulk = createTextField(parent, BULK, EMPTY);
}
@Override
protected void updateFromField(Object source) {
if (mAccuracy == source) {
changeAccuracy();
} else if (mRange == source) {
changeRange();
} else if (mRateOfFire == source) {
changeRateOfFire();
} else if (mShots == source) {
changeShots();
} else if (mBulk == source) {
changeBulk();
} else if (mRecoil == source) {
changeRecoil();
}
}
private void changeAccuracy() {
((RangedWeaponStats) getWeapon()).setAccuracy((String) mAccuracy.getValue());
adjustOutlineToContent();
}
private void changeRange() {
((RangedWeaponStats) getWeapon()).setRange((String) mRange.getValue());
adjustOutlineToContent();
}
private void changeRateOfFire() {
((RangedWeaponStats) getWeapon()).setRateOfFire((String) mRateOfFire.getValue());
adjustOutlineToContent();
}
private void changeShots() {
((RangedWeaponStats) getWeapon()).setShots((String) mShots.getValue());
adjustOutlineToContent();
}
private void changeBulk() {
((RangedWeaponStats) getWeapon()).setBulk((String) mBulk.getValue());
adjustOutlineToContent();
}
private void changeRecoil() {
((RangedWeaponStats) getWeapon()).setRecoil((String) mRecoil.getValue());
adjustOutlineToContent();
}
@Override
protected WeaponStats createWeaponStats() {
return new RangedWeaponStats(getOwner());
}
@Override
protected void updateFields() {
RangedWeaponStats weapon = (RangedWeaponStats) getWeapon();
mAccuracy.setValue(weapon.getAccuracy());
mRange.setValue(weapon.getRange());
mRateOfFire.setValue(weapon.getRateOfFire());
mShots.setValue(weapon.getShots());
mBulk.setValue(weapon.getBulk());
mRecoil.setValue(weapon.getRecoil());
super.updateFields();
}
@Override
protected void enableFields(boolean enabled) {
mAccuracy.setEnabled(enabled);
mRange.setEnabled(enabled);
mRateOfFire.setEnabled(enabled);
mShots.setEnabled(enabled);
mBulk.setEnabled(enabled);
mRecoil.setEnabled(enabled);
super.enableFields(enabled);
}
@Override
protected void blankFields() {
mAccuracy.setValue(EMPTY);
mRange.setValue(EMPTY);
mRateOfFire.setValue(EMPTY);
mShots.setValue(EMPTY);
mBulk.setValue(EMPTY);
mRecoil.setValue(EMPTY);
super.blankFields();
}
@Override
public String toString() {
return RANGED_WEAPON;
}
}