public void ApplyCharacterOverrides(CharacterOverrides characterOverrides, float duration = 0.0f, System.Action onFinishedCallback = null, System.Action onInterruptedCallback = null)
    {
        if (characterOverrides.Interrupt)
        {
            for (int i = 0; i < mOverridesStack.Count; ++i)
            {
                if (mOverridesStack[i].CoroutineRef != null)
                {
                    StopCoroutine(mOverridesStack[i].CoroutineRef);
                }
                if (mOverridesStack[i].OnInterruptedCallback != null)
                {
                    mOverridesStack[i].OnInterruptedCallback.Invoke();
                }
            }
            mOverridesStack.Clear();
        }

        if (duration == 0.0f)
        {
            ApplyCharacterOverrides_Internal(characterOverrides, null, onFinishedCallback, onInterruptedCallback);
        }
        else
        {
            Coroutine coroutine = StartCoroutine(Coroutine_ApplyCharacterOverrides(characterOverrides, duration));
            ApplyCharacterOverrides_Internal(characterOverrides, coroutine, onFinishedCallback, onInterruptedCallback);
        }
    }
Пример #2
0
 public CharacterOverridesInstance(CharacterOverrides overrideReference, Coroutine coroutineReference, System.Action onFinishedCallback, System.Action onInterruptedCallback)
 {
     OverrideRef           = overrideReference;
     CoroutineRef          = coroutineReference;
     OnFinishedCallback    = onFinishedCallback;
     OnInterruptedCallback = onInterruptedCallback;
 }
 public bool IsCharacterOverrideApplied(CharacterOverrides characterOverrides)
 {
     foreach (CharacterOverridesInstance overrides in mOverridesStack)
     {
         if (overrides.OverrideRef == characterOverrides)
         {
             return(true);
         }
     }
     return(false);
 }
Пример #4
0
    public static CharacterOverrides TransferOverrides(CharacterOverrides to, CharacterOverrides from)
    {
        CharacterOverrides result = new CharacterOverrides();

        result.CanRecieveInput = TransferState(to.CanRecieveInput, from.CanRecieveInput);
        result.ReceiveKnockbackFromExplosions = TransferState(to.ReceiveKnockbackFromExplosions, from.ReceiveKnockbackFromExplosions);
        result.ClampMaxSpeed     = TransferState(to.ClampMaxSpeed, from.ClampMaxSpeed);
        result.CanBeHurt         = TransferState(to.CanBeHurt, from.CanBeHurt);
        result.AffectedByGravity = TransferState(to.AffectedByGravity, from.AffectedByGravity);
        result.AirControl        = TransferValue(to.AirControl, from.AirControl);
        return(result);
    }
 private void ApplyCharacterOverrides_Internal(CharacterOverrides characterOverrides, Coroutine coroutine, System.Action onFinishedCallback = null, System.Action onInterruptedCallback = null)
 {
     foreach (CharacterOverridesInstance overrides in mOverridesStack)
     {
         if (overrides.OverrideRef == characterOverrides)
         {
             Debug.LogError("The same instance of character overrides cannot be applied twice.");
             return;
         }
     }
     mOverridesStack.Add(new CharacterOverridesInstance(characterOverrides, coroutine, onFinishedCallback, onInterruptedCallback));
     UpdateOverrides();
 }
 public void RemoveCharacterOverrides(CharacterOverrides characterOverrides)
 {
     for (int i = 0; i < mOverridesStack.Count; ++i)
     {
         if (mOverridesStack[i].OverrideRef == characterOverrides)
         {
             if (mOverridesStack[i].CoroutineRef != null)
             {
                 StopCoroutine(mOverridesStack[i].CoroutineRef);
             }
             if (mOverridesStack[i].OnFinishedCallback != null)
             {
                 mOverridesStack[i].OnFinishedCallback.Invoke();
             }
             mOverridesStack.RemoveAt(i);
             return;
         }
     }
 }
    private void UpdateOverrides()
    {
        mCurrentOverrides.Reset(ECharacterOverrideState.Enable);
        foreach (CharacterOverridesInstance overrides in mOverridesStack)
        {
            mCurrentOverrides = CharacterOverrides.TransferOverrides(mCurrentOverrides, overrides.OverrideRef);
        }

        Owner.Triggerable.HasPhysics          = IsOverrideEnabled(CurrentOverrides.ReceiveKnockbackFromExplosions);
        Owner.FakePhysics.IsAffectedByGravity = IsOverrideEnabled(CurrentOverrides.AffectedByGravity);
        if (IsOverrideEnabled(CurrentOverrides.AirControl))
        {
            Owner.FakePhysics.SetAirControl(CurrentOverrides.AirControl.Value);
        }
        else
        {
            Owner.FakePhysics.ResetAirControl();
        }
    }
    private IEnumerator Coroutine_ApplyCharacterOverrides(CharacterOverrides characterOverrides, float duration = 0.0f, System.Action onFinishedCallback = null, System.Action onInterruptedCallback = null)
    {
        yield return(new WaitForSeconds(duration));

        RemoveCharacterOverrides(characterOverrides);
    }