Esempio n. 1
0
    void OnGrabTry(BaseEventParameters baseParams)
    {
        if (IsDead())
        {
            return;
        }

        GrabTryEventParameters grabTryParams   = (GrabTryEventParameters)baseParams;
        PlayerBaseAttackLogic  grabAttackLogic = grabTryParams.m_AttackLogic;

        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grab try");

        if (CanBlockGrabAttack(grabAttackLogic))
        {
            // Here, both players are currently playing grab attack
            // But one is the attacker, and the second the defender
            // Only the defender can trigger GrabBlocked event and start a block animation
            // If the player who's trying to grab is the first one to have triggered the grab attack, he's the attacker, so we can block it
            if (IsGrabAttacker(grabAttackLogic))
            {
                ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grab blocked");

                Utils.GetEnemyEventManager(gameObject).TriggerEvent(EPlayerEvent.GrabBlocked, new GrabBlockedEventParameters(grabAttackLogic));
                m_StunInfoSC.StartStun(grabAttackLogic, EAttackResult.Blocked);
                PlayBlockAnimation(grabAttackLogic);
            }
        }
        else if (!m_StunInfoSC.IsHitStunned() && !m_StunInfoSC.IsBlockStunned() && !m_MovementComponent.IsJumping()) // A grab can't touch if player is stunned or is jumping
        {
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grab touched");

            Utils.GetEnemyEventManager(gameObject).TriggerEvent(EPlayerEvent.GrabTouched, new GrabTouchedEventParameters(grabAttackLogic));
        }
    }
Esempio n. 2
0
    void OnEndOfGrab(BaseEventParameters baseParams)
    {
        ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "End of grab phase");

        if (m_GrabPhase == EGrabPhase.Startup)
        {
            ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "Grab touched enemy : " + m_GrabTouchedEnemy + ", Last grab touched frame count : " + m_LastGrabTouchedFrameCount);

            if (!m_GrabTouchedEnemy || (Time.frameCount - m_LastGrabTouchedFrameCount) > K_MAX_LAST_FRAME_TO_GRAB)
            {
                ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "On grab missed");

                m_GrabPhase = EGrabPhase.Missed;
                m_Animator.Play(K_GRAB_MISS_ANIM, 0, 0);
            }
            else
            {
                ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "On grab enemy");

                m_GrabPhase = EGrabPhase.Grabbed;

                Utils.IgnorePushBoxLayerCollision();
                OnSyncGrabPosition();

                //Launch grabbed event
                Utils.GetEnemyEventManager(m_Owner).TriggerEvent(EPlayerEvent.Grabbed, new GrabbedEventParameters(this));
            }
        }
    }
Esempio n. 3
0
 void OnRoundOver(RoundSubGameManager.ELastRoundWinner lastRoundWinner)
 {
     ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "On Round Over");
     SetMovementBlocked(true, EBlockedReason.TimeOver);
     m_Animator.SetBool("IsCrouching", false);
     RoundSubGameManager.OnRoundOver -= OnRoundOver;
 }
Esempio n. 4
0
    public void TriggerBackgroundEffect(BackgroundEffectAnimEventConfig backgroundEffectConfig)
    {
        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Animation, "Trigger background effect");

        m_UIBackground.enabled = true;
        m_UIBackground.color   = backgroundEffectConfig.m_BackgroundColor;

        if (backgroundEffectConfig.m_UseMask)
        {
            m_UIBackgroundMask.enabled            = true;
            m_UIBackgroundMask.sprite             = backgroundEffectConfig.m_Mask;
            m_UIBackgroundMask.transform.position = m_FXHook.position;

            if (backgroundEffectConfig.m_MaskDetail != null)
            {
                m_UIBackgroundMaskDetail.enabled            = true;
                m_UIBackgroundMaskDetail.sprite             = backgroundEffectConfig.m_MaskDetail;
                m_UIBackgroundMaskDetail.color              = backgroundEffectConfig.m_MaskedBackgroundColor;
                m_UIBackgroundMaskDetail.transform.position = m_UIBackgroundMask.transform.position;
            }
            else
            {
                m_UIMaskedBackground.enabled = true;
                m_UIMaskedBackground.color   = backgroundEffectConfig.m_MaskedBackgroundColor;
            }
        }
    }
Esempio n. 5
0
    private void OnDamageTaken(PlayerBaseAttackLogic attackLogic, uint damage, EAttackResult attackResult, EHitNotificationType hitNotificationType)
    {
        Profiler.BeginSample("PlayerHealthComponent.OnDamageTaken");

#if DEBUG_DISPLAY || UNITY_EDITOR
        KakutoDebug.Log("Player : " + gameObject.name + " HP : " + m_HP + " damage taken : " + damage + " attack " + attackResult.ToString());
#endif
        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On damage taken : " + damage + ", current HP : " + m_HP);

        DamageTakenEventParameters damageTakenInfo = new DamageTakenEventParameters(gameObject, attackLogic, attackResult, m_StunInfoSC.IsHitStunned(), damage, (float)m_HP / (float)m_HealthConfig.m_MaxHP, hitNotificationType);
        Utils.GetPlayerEventManager(gameObject).TriggerEvent(EPlayerEvent.DamageTaken, damageTakenInfo);

        if (!IsDead() && attackLogic.CanPlayDamageTakenAnim())
        {
            PlayDamageTakenAnim(attackLogic, attackResult);
        }

        TriggerEffects(attackLogic, damage, attackResult, hitNotificationType);

        if (damage > 0 && m_InfoComponent.GetPlayerSettings().m_DisplayDamageTaken)
        {
            DisplayDamageTakenUI(damage);
        }

        if (IsDead())
        {
            OnDeath(attackLogic);
        }
        Profiler.EndSample();
    }
Esempio n. 6
0
 private void OnStunBegin(BaseEventParameters baseParams)
 {
     if (m_CurrentRefillHPCoroutine != null)
     {
         ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "Cancel Refill HP");
         StopCoroutine(m_CurrentRefillHPCoroutine);
     }
 }
Esempio n. 7
0
    IEnumerator RefillHPAfter(float _timeToWait)
    {
        yield return(new WaitForSeconds(_timeToWait));

        m_HP = m_HealthConfig.m_MaxHP;

        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On Refill HP");
        Utils.GetPlayerEventManager(gameObject).TriggerEvent(EPlayerEvent.OnRefillHP, new RefillHPEventParameters());
    }
Esempio n. 8
0
    protected override void OnShutdown()
    {
        base.OnShutdown();
        ShutdownSubManagers();
        DeleteSubManagers();

        SceneManager.sceneUnloaded -= OnSceneUnloaded;
        ChronicleManager.OnShutdown();
    }
Esempio n. 9
0
    public void RestoreBackground()
    {
        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Animation, "Restore background");

        m_UIBackground.enabled           = false;
        m_UIMaskedBackground.enabled     = false;
        m_UIBackgroundMask.enabled       = false;
        m_UIBackgroundMaskDetail.enabled = false;
    }
Esempio n. 10
0
 void UnblockMovement(BaseEventParameters baseParams)
 {
     if (m_IsMovementBlocked == false)
     {
         KakutoDebug.LogError("Movement was not blocked");
         return;
     }
     ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "Unblock movement requested by : " + ((UnblockMovementEventParameters)baseParams).m_CurrentAttack);
     SetMovementBlocked(false, EBlockedReason.RequestByAttack);
 }
Esempio n. 11
0
 void BlockMovement(BaseEventParameters baseParams)
 {
     if (m_IsMovementBlocked)
     {
         KakutoDebug.LogError("Movement was already blocked");
         return;
     }
     ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "Block movement requested by : " + ((BlockMovementEventParameters)baseParams).m_CurrentAttack);
     SetMovementBlocked(true, EBlockedReason.PlayAttack);
 }
Esempio n. 12
0
    private void OnStunEnd(BaseEventParameters baseParams)
    {
        PlayerSettings settings = m_InfoComponent.GetPlayerSettings();

        if (settings.m_RefillHPAfterStun)
        {
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "Start Refill HP after: " + settings.m_RefillHPDelay + "s");
            m_CurrentRefillHPCoroutine = RefillHPAfter(settings.m_RefillHPDelay);
            StartCoroutine(m_CurrentRefillHPCoroutine);
        }
    }
Esempio n. 13
0
    void OnGrabTouched(BaseEventParameters baseParams)
    {
        GrabTouchedEventParameters grabTouchedParams = (GrabTouchedEventParameters)baseParams;

        if (this == grabTouchedParams.m_AttackLogic && m_GrabPhase == EGrabPhase.Startup)
        {
            ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "On grab touched");

            m_GrabTouchedEnemy          = true;
            m_LastGrabTouchedFrameCount = Time.frameCount;
        }
    }
Esempio n. 14
0
    void OnSyncGrabbedPosition(BaseEventParameters baseParams)
    {
        if (IsDead())
        {
            return;
        }

        SyncGrabbedPositionEventParameters syncGrabbedParams = (SyncGrabbedPositionEventParameters)baseParams;

        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On sync grab position");
        transform.position = syncGrabbedParams.m_GrabHook.position;
    }
Esempio n. 15
0
    void OnGrabBlocked(BaseEventParameters baseParams)
    {
        GrabBlockedEventParameters grabBlockedParams = (GrabBlockedEventParameters)baseParams;

        if (this == grabBlockedParams.m_AttackLogic && m_GrabPhase == EGrabPhase.Startup)
        {
            ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "On grab blocked");

            m_GrabPhase = EGrabPhase.Blocked;
            IncreaseSuperGauge(m_Config.m_SuperGaugeBlockBonus);
            m_Animator.Play(K_GRAB_CANCEL_ANIM, 0, 0);
        }
    }
Esempio n. 16
0
 public void UnblockMovement()
 {
     if (m_CurrentAttack)
     {
         ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Animation, "Unblock movement");
         Utils.GetPlayerEventManager(gameObject).TriggerEvent(EPlayerEvent.UnblockMovement, new UnblockMovementEventParameters(m_CurrentAttack.GetAnimationAttackName()));
     }
     else
     {
         ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Animation, "Unblock movement: Unable to find BaseAttackStateMachineBehaviour from current animation state info.");
         KakutoDebug.LogError("Unblock movement: Unable to find BaseAttackStateMachineBehaviour from current animation state info.");
     }
 }
Esempio n. 17
0
    public override void OnAttackStopped()
    {
        base.OnAttackStopped();

        if (m_ParryState == EParryState.Counter)
        {
            ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "ParrySuccess: Unreeze time");
            m_TimeScaleManager.UnfreezeTime(m_Animator);
        }
        m_ParryState = EParryState.None;

        Utils.GetPlayerEventManager(m_Owner).StopListening(EPlayerEvent.ParrySuccess, OnParrySuccess);
        Utils.GetPlayerEventManager(m_Owner).StopListening(EPlayerEvent.EndOfParry, OnEndOfParry);
    }
Esempio n. 18
0
    void OnTriggerJumpImpulse(BaseEventParameters baseParams)
    {
        if (!m_IsMovementBlocked || m_MovementBlockedReason == EBlockedReason.TimeOver)
        {
            m_JumpTakeOffRequested = false;
            m_TriggerJumpImpulse   = true;
            m_Animator.ResetTrigger(K_ANIM_TAKE_OFF_TRIGGER);

            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "Jump impulse requested after take off");
        }
        else
        {
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "Jump impulse can't be requested because movement has been blocked, reason : " + m_MovementBlockedReason);
        }
    }
Esempio n. 19
0
    void OnParrySuccess(BaseEventParameters baseParams)
    {
        IncreaseSuperGauge(m_Config.m_SuperGaugeParrySuccessBonus);
        m_ParryState = EParryState.Counter;
        m_HasTouched = true; // Set it to true in order to allow unblock attack and cancelling this one by another one if needed (parry success is considered as a regular attack hit)
        if (PlayerGuardCrushTriggerAttackLogic.GetTriggerPointStatus(GetPlayerIndex()) == PlayerGuardCrushTriggerAttackLogic.ETriggerPointStatus.Inactive)
        {
            PlayerGuardCrushTriggerAttackLogic.SetTriggerPointStatus(m_InfoComponent, PlayerGuardCrushTriggerAttackLogic.ETriggerPointStatus.Active); // Successfully parrying a hit activate the trigger
        }

        m_Animator.Play(K_PARRY_COUNTER_ANIM, 0, 0);

        ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "ParrySuccess: Freeze time");
        m_TimeScaleManager.FreezeTime(m_Animator);
    }
Esempio n. 20
0
    public void ChangePlayerStance(EPlayerStance newStance, EJumpPhase newJumpPhase)
    {
        if (m_PlayerStance != newStance)
        {
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "On player stance changed | " + string.Format("{0,-20} {1,-20}", ("Old stance : " + m_PlayerStance), "New stance : " + newStance));
            m_PlayerStance = newStance;
            m_Animator.ResetTrigger(K_ANIM_TURN_AROUND_TRIGGER);
        }

        if (m_JumpPhase != newJumpPhase)
        {
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "On player jump phase changed | " + string.Format("{0,-20} {1,-20}", ("Old phase : " + m_JumpPhase), "New phase : " + newJumpPhase));
            m_JumpPhase = newJumpPhase;
        }
    }
Esempio n. 21
0
    // Update is called once per frame
    void Update()
    {
        if (IsPlayerTimeFrozen())
        {
            return;
        }

        UpdatePlayerSide();

        int playerIndex = m_InfoComponent.GetPlayerIndex();

        m_HorizontalMoveInput = 0f;
        m_JumpInput           = false;
        m_CrouchInput         = false;

        bool          isStatic      = m_InfoComponent.GetPlayerSettings().m_IsStatic;
        EPlayerStance defaultStance = m_InfoComponent.GetPlayerSettings().m_DefaultStance;

        if (m_MovementBlockedReason != EBlockedReason.TimeOver)
        {
            m_CrouchInput = (isStatic) ? defaultStance == EPlayerStance.Crouch : InputManager.GetCrouchInput(playerIndex);
        }

        if (!m_IsMovementBlocked)
        {
            if (!isStatic)
            {
                m_HorizontalMoveInput = InputManager.GetHorizontalMovement(playerIndex);
            }
            m_JumpInput = (isStatic) ? defaultStance == EPlayerStance.Jump : InputManager.GetJumpInput(playerIndex);

            if (IsStanding())
            {
                if (m_JumpInput && !m_JumpTakeOffRequested && !m_TriggerJumpImpulse && m_Controller.CanJump())
                {
                    ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "Jump take off requested");

                    m_Animator.SetTrigger(K_ANIM_TAKE_OFF_TRIGGER);
                    m_AttackComponent.SetAttackBlockedByTakeOff(true);
                    m_JumpTakeOffRequested = true;
                    m_JumpTakeOffDirection = m_HorizontalMoveInput;
                }
            }
        }

        m_Animator.SetBool(K_ANIM_IS_CROUCHING_BOOL, m_CrouchInput);
        m_Animator.SetFloat(K_ANIM_SPEED_FLOAT, Mathf.Abs(m_HorizontalMoveInput));
    }
    private void OnProximityBoxEvent(BaseEventParameters baseEventParameters)
    {
        ProximityBoxParameters proximityBoxParameters = (ProximityBoxParameters)baseEventParameters;

        if (proximityBoxParameters.m_OnEnter)
        {
            m_ProximityBoxes.Add(proximityBoxParameters.m_Collider);
        }
        else
        {
            m_ProximityBoxes.Remove(proximityBoxParameters.m_Collider);
        }
        m_IsInsideProximityBox = proximityBoxParameters.m_OnEnter || m_ProximityBoxes.Count > 0;
        ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Proximity, "Is inside proximity box: " + m_IsInsideProximityBox);
        UpdateProximityGuard();
    }
Esempio n. 23
0
    void SetMovementBlocked(bool isMovementBlocked, EBlockedReason reason)
    {
        if (CanUpdateMovementBlockedStatus(isMovementBlocked, reason))
        {
            m_IsMovementBlocked     = isMovementBlocked;
            m_MovementBlockedReason = reason;

            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "Movement has been " + (isMovementBlocked ? "blocked" : "unblocked") + ", reason : " + reason);

            if (m_IsMovementBlocked)
            {
                m_Animator.ResetTrigger(K_ANIM_TAKE_OFF_TRIGGER);
                m_Animator.ResetTrigger(K_ANIM_TURN_AROUND_TRIGGER);
                m_JumpTakeOffRequested = false;

                // If movement is blocked by timeOver, let the jump be triggered before end of round anim
                // Otherwise, player will be blocked in takeOff animation for ever
                if (reason != EBlockedReason.TimeOver)
                {
                    m_JumpTakeOffDirection = 0f;
                    m_TriggerJumpImpulse   = false;
                    m_AttackComponent.SetAttackBlockedByTakeOff(false);
                }

                if (m_Controller.IsJumping() && reason == EBlockedReason.Stun)
                {
                    OnStopMovement();
                }

                if (m_NeedFlip)
                {
                    if (reason == EBlockedReason.Stun)
                    {
                        Flip();
                    }
                    else if ((reason == EBlockedReason.PlayAttack || reason == EBlockedReason.RequestByAttack) && !m_Controller.IsJumping())
                    {
                        Flip();
                    }
                }
            }
        }
        else
        {
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "/!\\ Movement has NOT been " + (isMovementBlocked ? "blocked" : "unblocked") + " by reason : " + reason);
        }
    }
Esempio n. 24
0
    void EndOfAttack(BaseEventParameters baseParams)
    {
        EndOfAttackEventParameters endOfAttackParams = (EndOfAttackEventParameters)baseParams;

        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "On end of attack : " + endOfAttackParams.m_Attack);
        if (m_IsMovementBlocked)
        {
            // We need to check m_AttackComponent.GetCurrentAttack().m_AnimationAttackName AND m_AttackComponent.GetCurrentAttackLogic().GetAnimationAttackName() because for ProjectileAttack,
            // it can happen that a different animation is triggered due to guard crush property, so the animation attack name is changed at runtime
            if (m_AttackComponent.GetCurrentAttack() == null ||
                m_AttackComponent.GetCurrentAttack().m_AnimationAttackName == endOfAttackParams.m_Attack ||
                m_AttackComponent.GetCurrentAttackLogic().GetAnimationAttackName() == endOfAttackParams.m_Attack.ToString())
            {
                SetMovementBlocked(false, EBlockedReason.EndAttack);
            }
        }
    }
    private void UpdateProximityGuard()
    {
        bool wasInProximityGuard = m_IsInProximityGuard;

        m_IsInProximityGuard = CheckProximityGuardConditions();

        if (wasInProximityGuard != m_IsInProximityGuard)
        {
            ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Proximity, (m_IsInProximityGuard) ? "Trigger" : "End" + " proximity guard");
            if (m_IsInProximityGuard)
            {
                TriggerProximityGuard();
            }
            else
            {
                EndProximityGuard();
            }
        }
    }
Esempio n. 26
0
    public override void OnHandlePushBoxCollision(Collision2D collision)
    {
        base.OnHandlePushBoxCollision(collision);

        if (m_AttackLaunched)
        {
            // If enemy is in a corner
            if (GameManager.Instance.GetSubManager <OutOfBoundsSubGameManager>(ESubManager.OutOfBounds).IsInACorner(collision.gameObject))
            {
                ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "HandlePushBoxCollision : Stop movement while dashing to avoid passing through opponent");
                // to avoid passing through, stop movement
                Utils.GetPlayerEventManager(m_Owner).TriggerEvent(EPlayerEvent.StopMovement);
            }
        }
        else
        {
            KakutoDebug.LogError("OnHandlePushBoxCollision has been triggered whereas the attack is not launched !");
        }
    }
Esempio n. 27
0
    bool CanUpdateMovementBlockedStatus(bool isMovementBlocked, EBlockedReason reason)
    {
        //Block reasons :
        // PlayAttack, RequestByAttack, Stun, TimeOver

        //Unblock reasons :
        // EndAttack, RequestByAttack, StunEnd

        if (m_IsMovementBlocked)
        {
            if (m_MovementBlockedReason == EBlockedReason.TimeOver)
            {
                // We can't update the block status if the current block reason is TimeOver
                return(false);
            }

            // If we need to unblock movement
            if (!isMovementBlocked)
            {
                switch (m_MovementBlockedReason)
                {
                // If movement blocked reason is Play/RequestBy Attack, you can unblock the movement with EndAttack or RequestByAttack
                case EBlockedReason.PlayAttack:
                case EBlockedReason.RequestByAttack:
                    return(reason == EBlockedReason.EndAttack || reason == EBlockedReason.RequestByAttack);

                // If movement blocked reason is Stun, you can unblock the movement only with a StunEnd reason
                case EBlockedReason.Stun:
                    return(reason == EBlockedReason.StunEnd);

                default:
                    string errorMsg = "Movement has been blocked with an invalid reason : " + m_MovementBlockedReason + " and trying to unblock with reason : " + reason;
                    KakutoDebug.LogError(errorMsg);
                    ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Movement, "ERROR : " + errorMsg);
                    return(true);
                }
            }
        }

        return(true);
    }
Esempio n. 28
0
    void OnGrabbed(BaseEventParameters baseParams)
    {
        if (IsDead())
        {
            return;
        }

#if UNITY_EDITOR || DEBUG_DISPLAY
        if (m_DEBUG_BreakOnGrabbed)
        {
            Debug.Break();
        }
#endif
        GrabbedEventParameters grabbedParams   = (GrabbedEventParameters)baseParams;
        PlayerBaseAttackLogic  grabAttackLogic = grabbedParams.m_AttackLogic;

        ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "On grabbed by : " + grabAttackLogic.GetAttack().m_Name);
        m_StunInfoSC.StartStun(grabAttackLogic, EAttackResult.Hit);
        PlayHitAnimation(grabAttackLogic);
        m_AudioManager.PlayHitSFX(m_InfoComponent.GetPlayerIndex(), EAttackSFXType.Hit_Throw, false);
    }
Esempio n. 29
0
    private bool IsGrabAttacker(PlayerBaseAttackLogic grabLogic)
    {
        bool       isGrabAttacker             = false;
        GameObject grabInstigator             = grabLogic.GetOwner();
        Animator   grabInstigatorAnim         = grabLogic.GetAnimator();
        float      currentGrabInstigatorFrame = Utils.GetCurrentAnimFrame(grabInstigatorAnim);
        float      currentGrabOwnerFrame      = Utils.GetCurrentAnimFrame(m_Anim);

        // If grab instigator has been triggered at exact same frame than owner
        if (currentGrabInstigatorFrame == currentGrabOwnerFrame)
        {
            isGrabAttacker = grabInstigator.CompareTag(Player.Player1);
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "Is " + grabInstigator.tag + " GrabAttacker | Grab attack has been triggered at same frame on both players. Player1 defined as attacker by default");
        }
        else
        {
            isGrabAttacker = currentGrabInstigatorFrame > currentGrabOwnerFrame;
            ChronicleManager.AddChronicle(gameObject, EChronicleCategory.Health, "Is " + grabInstigator.tag + " GrabAttacker | " + ((isGrabAttacker) ? grabInstigator.tag : gameObject.tag) + " is grab attacker");
        }
        return(isGrabAttacker);
    }
Esempio n. 30
0
    public override void OnHandleCollision(bool triggerHitEvent, bool checkHitDelay, Collider2D hitCollider, Collider2D hurtCollider)
    {
        base.OnHandleCollision(triggerHitEvent, checkHitDelay, hitCollider, hurtCollider);
        if (!checkHitDelay || m_LastHitCountTimeStamp == 0f || Time.time > m_LastHitCountTimeStamp + GetDelayBetweenHits())
        {
            if (m_CurrentHitCount < GetMaxHitCount())
            {
                m_CurrentHitCount++;
                m_LastHitCountTimeStamp = Time.time;
                m_LastHitCollider       = hitCollider;
                m_LastHurtCollider      = hurtCollider;

                ChronicleManager.AddChronicle(m_Owner, EChronicleCategory.Attack, "On handle collision | Hit count : " + GetCurrentHitCount() + ", Max hit count : " + GetMaxHitCount());

                if (triggerHitEvent)
                {
                    Utils.GetEnemyEventManager(m_Owner).TriggerEvent(EPlayerEvent.Hit, new HitEventParameters(this));
                }
            }
        }
    }