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); }
// 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); }