package com.hearthsim.card.weapon; import com.hearthsim.card.Card; import com.hearthsim.card.ImplementedCardList; import com.hearthsim.card.minion.Minion; import com.hearthsim.event.effect.EffectCharacter; import com.hearthsim.event.effect.EffectHeroWeapon; import com.hearthsim.event.effect.EffectOnResolveTargetable; import com.hearthsim.event.filter.FilterCharacter; import com.hearthsim.event.filter.FilterCharacterSummon; import com.hearthsim.exception.HSException; import com.hearthsim.model.PlayerSide; import com.hearthsim.util.tree.HearthTreeNode; public abstract class WeaponCard extends Card implements EffectOnResolveTargetable { protected boolean isImmune() { return immune; } protected void setImmune(boolean immune) { this.immune = immune; } private boolean immune = false; // Does not take damage from attacking private byte weaponCharge; private byte weaponDamage; public WeaponCard() { super(); } @Override protected void initFromImplementedCard(ImplementedCardList.ImplementedCard implementedCard) { super.initFromImplementedCard(implementedCard); if (implementedCard != null) { this.weaponCharge = (byte) implementedCard.durability; this.weaponDamage = (byte) implementedCard.attack_; } } @Override public WeaponCard deepCopy() { WeaponCard weapon = (WeaponCard) super.deepCopy(); weapon.weaponCharge = weaponCharge; weapon.weaponDamage = weaponDamage; return weapon; } @Override public boolean equals(Object other) { if (!super.equals(other)) { return false; } if (this.getClass() != other.getClass()) { return false; } if (this.weaponDamage != ((WeaponCard) other).weaponDamage) { return false; } if (this.weaponCharge != ((WeaponCard) other).weaponCharge) { return false; } return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + weaponCharge; result = 31 * result + weaponDamage; return result; } @Override public EffectCharacter getTargetableEffect() { return new EffectHeroWeapon(this); } @Override public FilterCharacter getTargetableFilter() { return FilterCharacterSummon.SELF; } public byte getWeaponCharge() { return weaponCharge; } public void setWeaponCharge(byte weaponCharge) { this.weaponCharge = weaponCharge; } public void addWeaponCharge(byte weaponCharge) { this.weaponCharge += weaponCharge; } public void addWeaponDamage(byte weaponDamage) { this.weaponDamage += weaponDamage; } public byte getWeaponDamage() { return weaponDamage; } public void setWeaponDamage(byte weaponDamage) { this.weaponDamage = weaponDamage; } public void useWeaponCharge() { this.useWeaponCharge(1); } public void useWeaponCharge(int durabilityLoss) { if (!this.immune) { this.setWeaponCharge((byte) (this.getWeaponCharge() - durabilityLoss)); } } public void beforeAttack(PlayerSide targetMinionPlayerSide, Minion targetMinion, HearthTreeNode toRet) throws HSException { } public void afterAttack(PlayerSide targetMinionPlayerSide, Minion targetMinion, HearthTreeNode toRet) throws HSException { this.useWeaponCharge(); } public void minionSummonedEvent(PlayerSide thisMinionPlayerSide, PlayerSide summonedMinionPlayerSide, Minion summonedMinion, HearthTreeNode boardState) { } }