/**
*
*/
package logbook.dto;
import java.util.List;
import javax.json.JsonObject;
import com.dyuproject.protostuff.Tag;
/**
* 艦や装備のパラメータ
* @author Nekopanda
*/
public class ShipParameters {
/** HP */
@Tag(1)
private int taik;
/** 火力 */
@Tag(2)
private int houg;
/** 命中 (現状アイテムのみ) */
@Tag(3)
private int houm;
/** 雷装 */
@Tag(4)
private int raig;
/** 爆装 (現状アイテムのみ) */
@Tag(5)
private int baku;
/** 対空 */
@Tag(6)
private int tyku;
/** 装甲 or 雷撃命中 */
@Tag(7)
private int souk;
/** 回避 */
@Tag(8)
private int kaih;
/** 対潜 */
@Tag(9)
private int tais;
/** 索敵 */
@Tag(10)
private int saku;
/** 運 */
@Tag(11)
private int luck;
/** 速力 */
@Tag(12)
private int soku;
/** 射程 */
@Tag(13)
private int leng;
public static String sokuToString(int soku) {
switch (soku) {
case 0:
return "陸上";
case 5:
return "低速";
case 10:
return "高速";
}
return "不明(" + soku + ")";
}
public static String lengToString(int leng) {
switch (leng) {
case 1:
return "短";
case 2:
return "中";
case 3:
return "長";
case 4:
return "超長";
}
return "不明(" + leng + ")";
}
public ShipParameters() {
}
public ShipParameters(int taik, int houg, int houm, int raig, int baku, int tyku, int souk,
int kaih, int tais, int saku, int luck, int soku, int leng) {
this.taik = taik;
this.houg = houg;
this.houm = houm;
this.leng = leng;
this.luck = luck;
this.raig = raig;
this.baku = baku;
this.saku = saku;
this.soku = soku;
this.souk = souk;
this.taik = taik;
this.tais = tais;
this.tyku = tyku;
this.kaih = kaih;
}
/** マスターデータ用 */
public static ShipParameters fromMasterItem(JsonObject object) {
ShipParameters param = new ShipParameters();
param.houg = object.getInt("api_houg");
param.kaih = object.getInt("api_houk");
param.houm = object.getInt("api_houm");
param.leng = object.getInt("api_leng");
param.luck = object.getInt("api_luck");
param.raig = object.getInt("api_raig");
param.baku = object.getInt("api_baku");
param.saku = object.getInt("api_saku");
param.soku = object.getInt("api_soku");
param.souk = object.getInt("api_souk");
param.taik = object.getInt("api_taik");
param.tais = object.getInt("api_tais");
param.tyku = object.getInt("api_tyku");
return param;
}
/** マスターデータ用 (現在値?, MAX?) */
public static ShipParameters[] fromMasterShip(JsonObject object) {
ShipParameters[] ret = new ShipParameters[2];
for (int i = 0; i < 2; ++i) {
ShipParameters param = new ShipParameters();
param.taik = object.getJsonArray("api_taik").getInt(i);
param.houg = object.getJsonArray("api_houg").getInt(i);
param.leng = object.getInt("api_leng");
param.raig = object.getJsonArray("api_raig").getInt(i);
param.tyku = object.getJsonArray("api_tyku").getInt(i);
param.soku = object.getInt("api_soku");
param.souk = object.getJsonArray("api_souk").getInt(i);
//param.kaih = object.getJsonArray("api_kaih").getInt(i);
//param.tais = object.getJsonArray("api_tais").getInt(i);
//param.saku = object.getJsonArray("api_saku").getInt(i);
param.luck = object.getJsonArray("api_luck").getInt(i);
ret[i] = param;
}
return ret;
}
public static ShipParameters[] fromMasterEnemyShip(JsonObject object) {
ShipParameters[] ret = new ShipParameters[2];
for (int i = 0; i < 2; ++i) {
ShipParameters param = new ShipParameters();
param.soku = object.getJsonNumber("api_soku").intValue();
ret[i] = param;
}
return ret;
}
/** 艦娘用 (現在値, MAX, 装備による上昇分) */
public static ShipParameters[] fromShip(JsonObject object, List<ItemInfoDto> slotitem, ShipInfoDto masterShip) {
ShipParameters[] ret = new ShipParameters[3];
for (int i = 0; i < 2; ++i) {
ShipParameters param = new ShipParameters();
if (i == 0) {
param.taik = object.getInt("api_nowhp");
}
else {
param.taik = object.getInt("api_maxhp");
}
param.houg = object.getJsonArray("api_karyoku").getInt(i);
param.leng = object.getInt("api_leng");
param.raig = object.getJsonArray("api_raisou").getInt(i);
param.tyku = object.getJsonArray("api_taiku").getInt(i);
param.soku = masterShip.getParam().getSoku();
param.souk = object.getJsonArray("api_soukou").getInt(i);
param.kaih = object.getJsonArray("api_kaihi").getInt(i);
param.tais = object.getJsonArray("api_taisen").getInt(i);
param.saku = object.getJsonArray("api_sakuteki").getInt(i);
param.luck = object.getJsonArray("api_lucky").getInt(i);
ret[i] = param;
}
// 装備の上昇分を計算
ShipParameters slotParam = new ShipParameters();
for (ItemInfoDto item : slotitem) {
if (item != null) {
slotParam.add(item.getParam());
}
}
ret[2] = slotParam;
return ret;
}
/** 敵艦用 (装備込, 装備による上昇分) */
public static ShipParameters[] fromBaseAndSlotItem(ShipParameters base, int[] param, List<ItemInfoDto> slotitem) {
ShipParameters slotParam = new ShipParameters();
ShipParameters total = new ShipParameters();
// 装備の上昇分を計算
for (ItemInfoDto item : slotitem) {
if (item != null) {
slotParam.add(item.getParam());
}
}
// 合計を計算
if (param != null) {
total.add(base, param);
}
else {
total.add(base);
}
total.add(slotParam);
return new ShipParameters[] { total, slotParam };
}
/**
* パラメータoを自分に足す
* @param o 足すパラメータ
*/
public void add(ShipParameters o) {
this.taik += o.taik;
this.houg += o.houg;
this.houm += o.houm;
this.raig += o.raig;
this.baku += o.baku;
this.tyku += o.tyku;
this.souk += o.souk;
this.kaih += o.kaih;
this.tais += o.tais;
this.saku += o.saku;
this.luck += o.luck;
this.leng = Math.max(this.leng, o.leng);
this.soku = Math.max(this.soku, o.soku);
}
/**
* パラメータoを自分に足す
* @param o 足すパラメータ
*/
public void add(ShipParameters o, int[] param) {
this.taik += o.taik;
this.houg += param[0];
this.houm += o.houm;
this.raig += param[1];
this.baku += o.baku;
this.tyku += param[2];
this.souk += param[3];
this.kaih += o.kaih;
this.tais += o.tais;
this.saku += o.saku;
this.luck += o.luck;
this.leng = Math.max(this.leng, o.leng);
this.soku = Math.max(this.soku, o.soku);
}
/**
* パラメータoを自分から引く
* @param o 引くパラメータ
*/
public void subtract(ShipParameters o) {
this.taik -= o.taik;
this.houg -= o.houg;
this.houm -= o.houm;
this.raig -= o.raig;
this.tyku -= o.tyku;
this.souk -= o.souk;
this.kaih -= o.kaih;
this.tais -= o.tais;
this.saku -= o.saku;
this.luck -= o.luck;
this.leng = Math.max(this.leng, o.leng);
this.soku = Math.max(this.soku, o.soku);
}
@Override
public int hashCode() {
return this.taik + this.houg + this.houm + this.leng + this.raig + this.baku +
this.tyku + this.soku + this.souk + this.kaih + this.tais + this.saku + this.luck;
}
@Override
public boolean equals(Object obj) {
if ((obj != null) && (obj instanceof ShipParameters)) {
ShipParameters o = (ShipParameters) obj;
if ((this.taik == o.taik) &&
(this.houg == o.houg) &&
(this.houm == o.houm) &&
(this.leng == o.leng) &&
(this.raig == o.raig) &&
(this.baku == o.baku) &&
(this.tyku == o.tyku) &&
(this.soku == o.soku) &&
(this.souk == o.souk) &&
(this.kaih == o.kaih) &&
(this.tais == o.tais) &&
(this.saku == o.saku) &&
(this.luck == o.luck)) {
return true;
}
}
return false;
}
///////////////////////
/**
* HP
* @return HP
*/
public int getHP() {
return this.taik;
}
/**
* 火力
* @return 火力
*/
public int getKaryoku() {
return this.houg;
}
/**
* 雷装
* @return 雷装
*/
public int getRaisou() {
return this.raig;
}
/**
* 対空
* @return 対空
*/
public int getTaiku() {
return this.tyku;
}
/**
* 装甲
* @return 装甲
*/
public int getSoukou() {
return this.souk;
}
/**
* 回避
* @return 回避
*/
public int getKaihi() {
return this.kaih;
}
/**
* 対潜
* @return 対潜
*/
public int getTaisen() {
return this.tais;
}
/**
* 索敵
* @return 索敵
*/
public int getSakuteki() {
return this.saku;
}
/**
* 運
* @return 運
*/
public int getLucky() {
return this.luck;
}
/**
* kaih (= houk)
* @return kaih (= houk)
*/
public int getHouk() {
return this.kaih;
}
///////////////////////
/**
* @return taik
*/
public int getTaik() {
return this.taik;
}
/**
* @param taik セットする taik
*/
public void setTaik(int taik) {
this.taik = taik;
}
/**
* @return houg
*/
public int getHoug() {
return this.houg;
}
/**
* @param houg セットする houg
*/
public void setHoug(int houg) {
this.houg = houg;
}
/**
* @return raig
*/
public int getRaig() {
return this.raig;
}
/**
* @param raig セットする raig
*/
public void setRaig(int raig) {
this.raig = raig;
}
/**
* @return tyku
*/
public int getTyku() {
return this.tyku;
}
/**
* @param tyku セットする tyku
*/
public void setTyku(int tyku) {
this.tyku = tyku;
}
/**
* @return souk
*/
public int getSouk() {
return this.souk;
}
/**
* @param souk セットする souk
*/
public void setSouk(int souk) {
this.souk = souk;
}
/**
* @return kaih
*/
public int getKaih() {
return this.kaih;
}
/**
* @param kaih セットする kaih
*/
public void setKaih(int kaih) {
this.kaih = kaih;
}
/**
* @return tais
*/
public int getTais() {
return this.tais;
}
/**
* @param tais セットする tais
*/
public void setTais(int tais) {
this.tais = tais;
}
/**
* @return saku
*/
public int getSaku() {
return this.saku;
}
/**
* @param saku セットする saku
*/
public void setSaku(int saku) {
this.saku = saku;
}
/**
* @return luck
*/
public int getLuck() {
return this.luck;
}
/**
* @param luck セットする luck
*/
public void setLuck(int luck) {
this.luck = luck;
}
/**
* @return soku
*/
public int getSoku() {
return this.soku;
}
/**
* @param soku セットする soku
*/
public void setSoku(int soku) {
this.soku = soku;
}
public String getSokuString() {
return sokuToString(this.soku);
}
/**
* @return leng
*/
public int getLeng() {
return this.leng;
}
/**
* @param leng セットする leng
*/
public void setLeng(int leng) {
this.leng = leng;
}
public String getLengString() {
return lengToString(this.leng);
}
/**
* @return houm
*/
public int getHoum() {
return this.houm;
}
/**
* @param houm セットする houm
*/
public void setHoum(int houm) {
this.houm = houm;
}
/**
* @return baku
*/
public int getBaku() {
return this.baku;
}
/**
* @param baku セットする baku
*/
public void setBaku(int baku) {
this.baku = baku;
}
}