/*
* Copyright 2014 The Skfiy Open Association.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.skfiy.typhon.domain.item;
import java.util.ArrayList;
import java.util.List;
import org.skfiy.typhon.dobj.HeroItemDobj;
import org.skfiy.typhon.domain.Changeable;
import org.skfiy.typhon.domain.IHeroEntity;
import org.skfiy.typhon.script.Script;
import org.skfiy.typhon.util.DomainUtils;
import org.skfiy.util.Assert;
import com.alibaba.fastjson.annotation.JSONType;
import org.skfiy.typhon.domain.item.IFightItem.Shot;
/**
* ladder
*
* @author Kevin Zou <kevinz@skfiy.org>
*/
@JSONType(ignores = {"area", "race", "gender", "shots",
"tong", "wu", "zhi",
"atk", "def", "hp",
"maxFury", "critRate", "decritRate", "critMagn",
"parryRate", "deparryRate", "parryValue",
"askill", "pskill", "shots1", "shots2", "shots3", "shots4", "shots5",
"shots6", "shots7", "shots8", "shots9", "shots10"
})
public class HeroItem extends AbstractItem<HeroItemDobj> implements IHeroEntity, Changeable,
Cloneable {
// private static final JSONArray POWER_GUESS_CONFIG;
//
// static {
// String data = ComponentUtils.readDataFile("power_guess.json");
// POWER_GUESS_CONFIG = JSON.parseArray(data);
// }
private int level = 1;
private int ladder = 1;
private int exp;
private List<Rabbet> rabbets;
private int extraTong;
private int extraWu;
private int extraZhi;
private int extraAtk;
private int extraDef;
private int extraMatk;
private int extraMdef;
private int extraHp;
private int extraParryRate;
private int extraParryValue;
private int extraCritRate;
private int extraDecritRate;
private int extraDeparryRate;
private int extraCritMagn;
private int powerGuess;
// 专属武器/基础/洗练
private Rabbet weaponsRabbets;
private int buildLevel;
private int strengLevel;
// 专属武器强化
private Rabbet weaponsStreng;
// 专属武器的打造
private Rabbet weaponsBuild;
// 专属武器附魔
private Rabbet weaponsEnchant;
public HeroItem() {
}
@Override
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
DomainUtils.firePropertyChange(this, "level", this.level);
}
@Override
public int getLadder() {
return ladder;
}
public void setLadder(int ladder) {
this.ladder = ladder;
DomainUtils.firePropertyChange(this, "ladder", this.ladder);
}
@Override
public int getExp() {
return exp;
}
public void setExp(int exp) {
if (this.exp != exp) {
this.exp = exp;
DomainUtils.firePropertyChange(this, "exp", this.exp);
}
}
@Override
public List<Rabbet> getRabbets() {
return rabbets;
}
public void setRabbets(List<Rabbet> rabbets) {
if (this.rabbets == null) {
this.rabbets = new ArrayList<>(6);
}
this.rabbets.addAll(rabbets);
for (int i = 0; i < this.rabbets.size(); i++) {
Rabbet rabbet = this.rabbets.get(i);
rabbet.set(this, "rabbets", i);
}
DomainUtils.firePropertyChange(this, "rabbets", this.rabbets);
}
public void clearRabbets() {
this.rabbets.clear();
DomainUtils.firePropertyChange(this, "rabbets", this.rabbets);
}
/**
*
* @param rabbet
*/
public void addRabbet(Rabbet rabbet) {
Assert.notNull(rabbet);
if (rabbets == null) {
rabbets = new ArrayList<>(6);
}
rabbets.add(rabbet);
rabbet.set(this, "rabbets", rabbets.size() - 1);
DomainUtils.fireIndexPropertyAdd(this, "rabbets", rabbet);
}
public void setRabbet(Rabbet rabbet) {
for (Rabbet b : rabbets) {
if (b.getPoint() == rabbet.getPoint()) {
rabbets.remove(b);
rabbets.add(rabbet);
break;
}
}
DomainUtils.firePropertyChange(this, "rabbets", this.rabbets);
}
/**
*
* @param point
* @return
*/
public Rabbet findRabbet(int point) {
if (rabbets == null) {
return null;
}
for (Rabbet r : rabbets) {
if (r.getPoint() == point) {
return r;
}
}
return null;
}
@Override
public int getExtraTong() {
return extraTong;
}
public void setExtraTong(int extraTong) {
this.extraTong = extraTong;
DomainUtils.firePropertyChange(this, "extraTong", this.extraTong);
}
@Override
public int getExtraWu() {
return extraWu;
}
public void setExtraWu(int extraWu) {
this.extraWu = extraWu;
DomainUtils.firePropertyChange(this, "extraWu", this.extraWu);
}
@Override
public int getExtraZhi() {
return extraZhi;
}
public void setExtraZhi(int extraZhi) {
this.extraZhi = extraZhi;
DomainUtils.firePropertyChange(this, "extraZhi", this.extraZhi);
}
@Override
public int getExtraAtk() {
return extraAtk;
}
public void setExtraAtk(int extraAtk) {
this.extraAtk = extraAtk;
DomainUtils.firePropertyChange(this, "extraAtk", this.extraAtk);
}
@Override
public int getExtraDef() {
return extraDef;
}
public void setExtraDef(int extraDef) {
this.extraDef = extraDef;
DomainUtils.firePropertyChange(this, "extraDef", this.extraDef);
}
@Override
public int getExtraMatk() {
return extraMatk;
}
public void setExtraMatk(int extraMatk) {
this.extraMatk = extraMatk;
DomainUtils.firePropertyChange(this, "extraMatk", this.extraMatk);
}
@Override
public int getExtraMdef() {
return extraMdef;
}
public void setExtraMdef(int extraMdef) {
this.extraMdef = extraMdef;
DomainUtils.firePropertyChange(this, "extraMdef", this.extraMdef);
}
@Override
public int getExtraHp() {
return extraHp;
}
public void setExtraHp(int extraHp) {
this.extraHp = extraHp;
DomainUtils.firePropertyChange(this, "extraHp", this.extraHp);
}
@Override
public int getExtraParryRate() {
return extraParryRate;
}
public void setExtraParryRate(int extraParryRate) {
this.extraParryRate = extraParryRate;
DomainUtils.firePropertyChange(this, "extraParryRate", this.extraParryRate);
}
@Override
public int getExtraParryValue() {
return extraParryValue;
}
public void setExtraParryValue(int extraParryValue) {
this.extraParryValue = extraParryValue;
DomainUtils.firePropertyChange(this, "extraParryValue", this.extraParryValue);
}
@Override
public int getExtraCritRate() {
return extraCritRate;
}
public void setExtraCritRate(int extraCritRate) {
this.extraCritRate = extraCritRate;
DomainUtils.firePropertyChange(this, "extraCritRate", this.extraCritRate);
}
@Override
public int getExtraDecritRate() {
return extraDecritRate;
}
public void setExtraDecritRate(int extraDecritRate) {
this.extraDecritRate = extraDecritRate;
DomainUtils.firePropertyChange(this, "extraDecritRate", this.extraDecritRate);
}
@Override
public int getExtraDeparryRate() {
return extraDeparryRate;
}
public void setExtraDeparryRate(int extraDeparryRate) {
this.extraDeparryRate = extraDeparryRate;
DomainUtils.firePropertyChange(this, "extraDeparryRate", this.extraDeparryRate);
}
@Override
public int getExtraCritMagn() {
return extraCritMagn;
}
public void setExtraCritMagn(int extraCritMagn) {
this.extraCritMagn = extraCritMagn;
DomainUtils.firePropertyChange(this, "extraCritMagn", this.extraCritMagn);
}
@Override
public int getPowerGuess() {
return powerGuess;
}
public void setPowerGuess(int powerGuess) {
this.powerGuess = powerGuess;
DomainUtils.firePropertyChange(this, "powerGuess", this.powerGuess);
}
public Area getArea() {
return getItemDobj().getArea();
}
@Override
public Race getRace() {
return getItemDobj().getRace();
}
public Gender getGender() {
return getItemDobj().getGender();
}
public Shot[] getShots() {
switch (getWallColor().ordinal()) {
case 0:
return getItemDobj().getShots1();
case 1:
return getItemDobj().getShots2();
case 2:
return getItemDobj().getShots3();
case 3:
return getItemDobj().getShots4();
default:
return getItemDobj().getShots5();
}
}
public Script getAskill() {
return getItemDobj().getAskill();
}
public Script getPskill() {
return getItemDobj().getPskill();
}
/**
* 专属武器
*/
@Override
public Rabbet getWeaponsRabbets() {
return weaponsRabbets;
}
public void setWeaponsRabbets(Rabbet weaponsRabbets) {
this.weaponsRabbets = weaponsRabbets;
if (weaponsRabbets != null) {
this.weaponsRabbets.set(this, "weaponsRabbets");
DomainUtils.firePropertyChange(this, "weaponsRabbets", this.weaponsRabbets);
}
}
public int getBuildLevel() {
return buildLevel;
}
public void setBuildLevel(int buildLevel) {
this.buildLevel = buildLevel;
DomainUtils.firePropertyChange(this, "buildLevel", this.buildLevel);
}
public int getStrengLevel() {
return strengLevel;
}
public void setStrengLevel(int strengLevel) {
this.strengLevel = strengLevel;
DomainUtils.firePropertyChange(this, "strengLevel", this.strengLevel);
}
@Override
public Rabbet getWeaponsBuild() {
return weaponsBuild;
}
public void setWeaponsBuild(Rabbet weaponsBuild) {
this.weaponsBuild = weaponsBuild;
if (weaponsBuild != null) {
this.weaponsBuild.set(this, "weaponsBuild");
DomainUtils.firePropertyChange(this, "weaponsBuild", this.weaponsBuild);
}
}
@Override
public Rabbet getWeaponsEnchant() {
return weaponsEnchant;
}
public void setWeaponsEnchant(Rabbet weaponsEnchant) {
this.weaponsEnchant = weaponsEnchant;
if (weaponsEnchant != null) {
this.weaponsEnchant.set(this, "weaponsEnchant");
DomainUtils.firePropertyChange(this, "weaponsEnchant", this.weaponsEnchant);
}
}
@Override
public Rabbet getWeaponsStreng() {
return weaponsStreng;
}
public void setWeaponsStreng(Rabbet weaponsStreng) {
this.weaponsStreng = weaponsStreng;
if (weaponsStreng != null) {
this.weaponsStreng.set(this, "weaponsStreng");
DomainUtils.firePropertyChange(this, "weaponsStreng", this.weaponsStreng);
}
}
/**
*
* @return
*/
public WallColor getWallColor() {
if (ladder < 2) {
return WallColor.Gray;
} else if (ladder < 4) {
return WallColor.Green;
} else if (ladder < 7) {
return WallColor.Blue;
} else if (ladder < 11) {
return WallColor.Red;
}
return WallColor.Purple;
}
}