/// <summary> /// Sets the ItemAction's properties based on the item it has. /// <para>The default behavior is to check the item's properties and set its MoveInfo, DamageInfo, and HealingInfo accordingly.</para> /// </summary> protected virtual void SetActionProperties() { Name = ItemUsed.Name; //NOTE: Refactor and make cleaner in some way IHPHealingItem hpHealing = ItemUsed as IHPHealingItem; IFPHealingItem fpHealing = ItemUsed as IFPHealingItem; IDamagingItem damageItem = ItemUsed as IDamagingItem; IStatusHealingItem statusHealing = ItemUsed as IStatusHealingItem; IStatusInflictingItem statusInflicting = ItemUsed as IStatusInflictingItem; IDamageEffectItem damageEffectItem = ItemUsed as IDamageEffectItem; EntityTypes[] otherEntityTypes = ItemUsed.OtherEntTypes; //Check if we should replace all instances of Enemy EntityTypes with opposing ones if (ItemUsed.GetOpposingIfEnemy == true && otherEntityTypes != null && otherEntityTypes.Length > 0) { //Create a new array so we don't modify the item's information otherEntityTypes = new EntityTypes[ItemUsed.OtherEntTypes.Length]; for (int i = 0; i < ItemUsed.OtherEntTypes.Length; i++) { EntityTypes entitytype = ItemUsed.OtherEntTypes[i]; //If we found Enemy, change it if (entitytype == EntityTypes.Enemy) { entitytype = User.GetOpposingEntityType(); } //Set the value otherEntityTypes[i] = entitytype; } } MoveInfo = new MoveActionData(ItemUsed.Icon, ItemUsed.Description, MoveResourceTypes.FP, 0, CostDisplayTypes.Hidden, ItemUsed.MoveAffectionType, ItemUsed.SelectionType, false, ItemUsed.HeightsAffected, otherEntityTypes); //Set the damage data if (damageItem != null || statusInflicting != null) { int damage = damageItem != null ? damageItem.Damage : 0; Elements element = damageItem != null ? damageItem.Element : Elements.Normal; StatusChanceHolder[] statuses = statusInflicting != null ? statusInflicting.StatusesInflicted : null; DamageEffects damageEffects = damageEffectItem != null ? damageEffectItem.InducedDamageEffects : DamageEffects.None; DamageInfo = new DamageData(damage, element, true, ContactTypes.None, ContactProperties.Ranged, statuses, damageEffects); } //Set the healing data if (hpHealing != null || fpHealing != null || statusHealing != null) { int hpHealed = hpHealing != null ? hpHealing.HPRestored : 0; int fpHealed = fpHealing != null ? fpHealing.FPRestored : 0; StatusTypes[] statusesHealed = statusHealing != null ? statusHealing.StatusesHealed : null; HealingInfo = new HealingData(hpHealed, fpHealed, statusesHealed); } }
public SweetTreatAction(BattleEntity user) : base(user) { Name = "Sweet Treat"; MoveInfo = new MoveActionData(new CroppedTexture2D(AssetManager.Instance.LoadRawTexture2D($"{ContentGlobals.BattleGFX}.png"), new Rectangle(26, 989, 40, 31)), "", MoveResourceTypes.SSSP, 100, CostDisplayTypes.Shown, MoveAffectionTypes.Self | MoveAffectionTypes.Ally, Enumerations.EntitySelectionType.All, false, null); HealingInfo = new HealingData(0, 0, GetStatusesCured()); SetMoveSequence(new SweetTreatSequence(this)); actionCommand = new SweetTreatCommand(MoveSequence, User.BManager.battleUIManager); }
/// <summary> /// Sets the ItemAction's properties based on the item it has. /// </summary> protected void SetActionProperties() { Name = ItemUsed.Name; //NOTE: Refactor and make cleaner in some way IHPHealingItem hpHealing = ItemUsed as IHPHealingItem; IFPHealingItem fpHealing = ItemUsed as IFPHealingItem; IDamagingItem damageItem = ItemUsed as IDamagingItem; IStatusHealingItem statusHealing = ItemUsed as IStatusHealingItem; IStatusInflictingItem statusInflicting = ItemUsed as IStatusInflictingItem; IDamageEffectItem damageEffectItem = ItemUsed as IDamageEffectItem; MoveAffectionTypes moveAffectionType = ItemUsed.EntityType == User.EntityType ? MoveAffectionTypes.Ally : MoveAffectionTypes.Enemy; if (ItemUsed.TargetsSelf == true) { moveAffectionType = MoveAffectionTypes.Self; } MoveInfo = new MoveActionData(null, ItemUsed.Description, MoveResourceTypes.FP, 0, CostDisplayTypes.Hidden, moveAffectionType, ItemUsed.SelectionType, false, ItemUsed.HeightsAffected); //Set the damage data if (damageItem != null || statusInflicting != null) { int damage = damageItem != null ? damageItem.Damage : 0; Elements element = damageItem != null ? damageItem.Element : Elements.Normal; StatusChanceHolder[] statuses = statusInflicting != null ? statusInflicting.StatusesInflicted : null; DamageEffects damageEffects = damageEffectItem != null ? damageEffectItem.InducedDamageEffects : DamageEffects.None; DamageInfo = new DamageData(damage, element, true, ContactTypes.None, statuses, damageEffects); } //Set the healing data if (hpHealing != null || fpHealing != null || statusHealing != null) { int hpHealed = hpHealing != null ? hpHealing.HPRestored : 0; int fpHealed = fpHealing != null ? fpHealing.FPRestored : 0; StatusTypes[] statusesHealed = statusHealing != null ? statusHealing.StatusesHealed : null; HealingInfo = new HealingData(hpHealed, fpHealed, statusesHealed); } }
/// <summary> /// Heals a set of BattleEntities with this MoveAction. /// <para>Healing moves cannot miss.</para> /// </summary> /// <param name="healingData">The HealingData containing HP, FP, and more.</param> /// <param name="entities">The BattleEntities to heal.</param> public void PerformHeal(HealingData healingData, BattleEntity[] entities) { for (int i = 0; i < entities.Length; i++) { BattleEntity entityHealed = entities[i]; //Heal HP and FP entityHealed.HealHP(healingData.HPHealed); entityHealed.HealFP(healingData.FPHealed); //Heal Status Effects StatusTypes[] statusesHealed = healingData.StatusEffectsHealed; if (statusesHealed != null) { for (int j = 0; j < statusesHealed.Length; j++) { StatusTypes statusHealed = statusesHealed[j]; entityHealed.EntityProperties.RemoveStatus(statusHealed, true); } } } }
public MoveAction(BattleEntity user, string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingInfo) : this(user, name, moveProperties, moveSequence, actionCommand) { HealingInfo = HealingInfo; }
public MoveAction(string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingInfo) : this(name, moveProperties, moveSequence, actionCommand) { HealingInfo = HealingInfo; }
public MoveAction(string name, MoveActionData moveProperties, Sequence moveSequence, HealingData healingInfo) : this(name, moveProperties, moveSequence) { HealingInfo = healingInfo; }
public SpecialMoveAction(string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingData) : base(name, moveProperties, moveSequence, actionCommand, healingData) { }
/// <summary> /// Convenience function for healing with only one entity. /// </summary> /// <param name="healingData">The HealingData containing HP, FP, and more.</param> /// <param name="entity">The BattleEntity to heal.</param> public void PerformHeal(HealingData healingData, BattleEntity entity) { PerformHeal(healingData, new BattleEntity[] { entity }); }
public SpecialMoveAction(string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingData, StarPowerTypes spType, float spCost) : base(name, moveProperties, moveSequence, actionCommand, healingData) { SPType = spType; SPCost = spCost; }
public SpecialMoveAction(BattleEntity user, string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingData) : base(user, name, moveProperties, moveSequence, actionCommand, healingData) { }