コード例 #1
0
        public void AddStatusGivenEffect()
        {
            var statEff = StatusEffectFactory.CreateStatusEffect(debugStatEffData);

            statEff.Init(gameObject, gameObject, elementOfStatEff, debugStatEffData);

            var entryExists = debugPrevAddedStatusEffects.Contains(statEff);

            if (entryExists && (statEff.StackType == StatusEffectStackType.FullStack ||
                                statEff.StackType == StatusEffectStackType.DurationRefreshAndFullStack))
            {
                debugPrevAddedStatusEffects.Add(statEff);
            }
            else if (!entryExists)
            {
                debugPrevAddedStatusEffects.Add(statEff);
            }
            // Should also be removed from here once it gets removed by the timer

            var res = AddStatusEffect(debugStatEffData, statEff, debugStatEffData.Duration, out var buff);

            Debug.Log(res);
        }
コード例 #2
0
        // Runs to check for special interactions, if there are none proceed to add effects normally
        private StatusEffectAddResult CheckInteractions(StatusEffectData data,
                                                        out StatusEffectInteraction buffInteraction)
        {
            buffInteraction = null;

            if (data.Interactions.Count <= 0)
            {
                return(StatusEffectAddResult.Failed);
            }

            foreach (var interaction in data.Interactions)
            {
                if (!currentStatusEffects.ContainsKey(interaction.Target))
                {
                    continue;
                }

                switch (interaction.InteractionType)
                {
                case InteractionType.RemoveAndCombine:
                {
                    Debug.Log("Combining, interaction:" + interaction.Name + ", Base: " + data.Name
                              + " Target: " + interaction.Target.Name + " Result: " + interaction.Result);

                    // remove target, don't add this, add result
                    RemoveAllOfType(interaction.Target);
                    AddStatusEffect(interaction.Result,
                                    StatusEffectFactory.CreateStatusEffect(interaction.Result)
                                    , interaction.Result.Duration, out var buff);

                    return(StatusEffectAddResult.Finished);
                }

                case InteractionType.ModifySpellDamage:
                {
                    // remove target, don't add this, get StatusEffectAddResult.SpellBuff returned
                    // somehow

                    Debug.Log("Buffing spell, interaction:" + interaction.Name + " , Base: " + data.Name
                              + " , Target: " + interaction.Target.Name
                              + " , Effectiveness: " + interaction.Effectiveness);

                    RemoveAllOfType(interaction.Target);
                    buffInteraction = interaction;

                    return(StatusEffectAddResult.SpellBuff);
                }

                case InteractionType.RemoveBoth:
                {
                    // remove target, don't add this

                    Debug.Log("Removing both, interaction:" + interaction.Name + " , Base: " + data.Name
                              + " , Target: " + interaction.Target.Name + " , Result: " + interaction.Result);

                    RemoveAllOfType(interaction.Target);

                    return(StatusEffectAddResult.Finished);
                }
                }
            }

            return(StatusEffectAddResult.Failed);
        }