Beispiel #1
0
    private void AttemptApplyEffect(Unit target, UnitEffect effect)
    {
        //Make copy
        UnitEffect copy = MakeCopy(effect, target);

        MDebug.Log("^effectsAttempt Apply \n" + copy.ToString() + "  by " + copy.Instigator);

        if (CanApplyEffect(target, copy) && target.GetComponent <Unit_EffectManager>().ApplyEffect(copy))
        {
            TurnSystem.Instance.OnGlobalTurn += copy.OnGlobalTurn;

            if (VFX_Applied != null)
            {
                VFX_Applied.Init(target.currentTile.gameObject);
            }


            if (TickOnApply)
            {
                copy.EffectTick();
            }
        }
        else
        {
            Destroy(copy.gameObject);
        }
    }
Beispiel #2
0
    public bool AddEffect(UnitEffect new_effect)
    {
        if (ActiveEffects == null)
        {
            ActiveEffects = new List <UnitEffect>();
        }


        if (!ActiveEffects.Contains(new_effect))
        {
            if (new_effect.ReplaceEffect)
            {
                UnitEffect duplicate_on_unit = GetEffect(new_effect.Unique_ID);
                if (duplicate_on_unit != null)
                {
                    int duplicate_duration = duplicate_on_unit.GetTicksAlive();
                    new_effect.SetDurationAlive(duplicate_duration);
                    new_effect.MaxDuration = duplicate_duration + new_effect.GetMaxDuration();

                    ;                    MDebug.Log("^effects Removing Duplicate " + duplicate_on_unit.ToString());
                    ActiveEffects.Remove(duplicate_on_unit);
                    Destroy(duplicate_on_unit);
                }
            }

            ActiveEffects.Add(new_effect);
            MDebug.Log("^effects Added Effect to " + m_Unit.GetID() + " \n" + new_effect.ToString());
            new_effect.OnEffectTick += OnEffectTick;

            //MDebug.Log(" EFFECT_ADDED " + new_effect.GetShortHandle());
            new_effect.OnEffectExpired += OnEffectExpired;

            if (OnEffectAdded != null)
            {
                OnEffectAdded(new_effect);
            }
            return(true);
        }
        else
        {
            MDebug.Log("^effects Already has this effect");
        }

        MDebug.Log("^effects COULD NOT ADD EFFECT " + new_effect.ToString());
        return(false);
    }
Beispiel #3
0
    void OnEffectExpired(UnitEffect effect)
    {
        if (OnEffectRemoved != null)
        {
            OnEffectRemoved(effect);
        }

        effect.OnEffectExpired -= OnEffectRemoved;
        effect.OnEffectTick    -= OnEffectTick;
        effect.OnEffectExpired -= OnEffectExpired;
        MDebug.Log("^effects EFFECT EXPIRED " + effect.ToString());
        ActiveEffects.Remove(effect);
    }