package vooga.rts.gamedesign.upgrades; import vooga.rts.game.RTSGame; import vooga.rts.gamedesign.sprite.gamesprites.Projectile; import vooga.rts.gamedesign.sprite.gamesprites.interactive.InteractiveEntity; import vooga.rts.gamedesign.strategy.attackstrategy.CanAttack; import vooga.rts.gamedesign.weapon.Weapon; import vooga.rts.util.ReflectionHelper; /** * This class represents the type of upgrade taken place on Attack Strategy. In * the case of Attack Strategy the only upgrade will be from Cannot Attack to * Can Attack. * * @author Wenshun Liu * */ public class AttackUpgradeNode extends UpgradeNode { public AttackUpgradeNode (UpgradeTree upgradeTree, String upgradeType, int upgradeValue, int costedResourceAmount) { super(upgradeTree, upgradeType, upgradeValue, costedResourceAmount); } /** * Applies the upgrade to an InteractiveEntity using reflection helper, * which locates the property to be upgraded and applies the upgrade. */ @Override public void upgrade (InteractiveEntity requester) { ReflectionHelper.setValue("myAttackStrategy", requester, new CanAttack(requester.getWorldLocation(), requester.getPlayerID())); Weapon w = RTSGame.getFactory().getWeapon(getUpgradeValue()); if (w == null) { w = new Weapon(new Projectile(Projectile.DEFAULT_PIC, requester.getWorldLocation(), Projectile.DEFAULT_DIMENSION, requester.getPlayerID(), Projectile.DEFAULT_DAMAGE, Projectile.DEFAULT_HEALTH,800),Weapon.DEFAULT_RANGE, requester.getWorldLocation(), Weapon.DEFAULT_COOLDOWN_TIME); } else { w = w.copy(); } requester.addWeapon(w); } }