Пример #1
0
        /// <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);
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
                    }
                }
            }
        }
Пример #5
0
 public MoveAction(BattleEntity user, string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingInfo)
     : this(user, name, moveProperties, moveSequence, actionCommand)
 {
     HealingInfo = HealingInfo;
 }
Пример #6
0
 public MoveAction(string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingInfo) : this(name, moveProperties, moveSequence, actionCommand)
 {
     HealingInfo = HealingInfo;
 }
Пример #7
0
 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)
 {
 }
Пример #9
0
 /// <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;
 }
Пример #11
0
 public SpecialMoveAction(BattleEntity user, string name, MoveActionData moveProperties, Sequence moveSequence, ActionCommand actionCommand, HealingData healingData)
     : base(user, name, moveProperties, moveSequence, actionCommand, healingData)
 {
 }