private void PushAway(Collider col)
        {
            // Stun the player
            PlayerStatusManager psm = col.GetComponent <PlayerStatusManager>();

            psm.ApplyCrowdControl(new CrowdControl(CrowdControlType.Stun, DamageType.Melee, DamageElement.Physical), STUN_DURATION);

            // Push the player away
            Vector3 knightCenter = km.transform.position;

            Vector3 position      = col.transform.position;
            Vector3 finalPosition = position + (position - knightCenter).normalized * (PUSH_AWAY_RANGE - (position - knightCenter).magnitude);

            // x and z
            AnimationCurve xCurve = new AnimationCurve();

            xCurve.AddKey(new Keyframe(0, position.x));
            xCurve.AddKey(new Keyframe(PUSH_AWAY_DURATION, finalPosition.x));

            AnimationCurve zCurve = new AnimationCurve();

            zCurve.AddKey(new Keyframe(0, position.z));
            zCurve.AddKey(new Keyframe(PUSH_AWAY_DURATION, finalPosition.z));

            // y
            AnimationCurve yCurve = new AnimationCurve();

            yCurve.AddKey(new Keyframe(0, position.y));
            yCurve.AddKey(new Keyframe(PUSH_AWAY_DURATION, position.y));

            // Add curve to player movement
            psm.playerMotor.MoveByCurve(PUSH_AWAY_DURATION, xCurve, yCurve, zCurve);
        }
Exemple #2
0
        private void ApplyDamage(Collider col)
        {
            PlayerStatusManager psm = col.GetComponent <PlayerStatusManager>();
            Damage dmg = new Damage(25f, DamageType.Melee, DamageElement.Physical, em.transform.position);

            if (psm.IsAffectedBy(dmg, em, em.transform.position))
            {
                psm.TakeDamage(dmg, em);
                psm.ApplyCrowdControl(new CrowdControl(CrowdControlType.Stun, DamageType.Melee, DamageElement.Physical), STUN_DURATION);
            }
        }
        public override void OnColliderEnter(AbilityColliderTrigger abilityColliderTrigger, Collider col)
        {
            if (col.tag == "Player" && !cols.ContainsKey(col))
            {
                cols.Add(col, Time.time);

                // Stun the player and push away
                PlayerStatusManager psm = col.GetComponent <PlayerStatusManager>();
                if (psm.IsAffectedByCC(new CrowdControl(CrowdControlType.ForcedMove, DamageType.AreaOfEffect, DamageElement.Physical)))
                {
                    psm.ApplyCrowdControl(new CrowdControl(CrowdControlType.Stun, DamageType.AreaOfEffect, DamageElement.Physical), STUN_DURATION);
                    PushAway(psm, abilityColliderTrigger, col);
                }
            }
        }
        private void DamagePart1(Collider col)
        {
            PlayerStatusManager psm = col.GetComponent <PlayerStatusManager>();
            Damage dmg = new Damage(SHIELD_DMG, DamageType.AreaOfEffect, DamageElement.Physical, em.transform.position);

            if (psm.IsAffectedBy(dmg, em))
            {
                if (psm.IsAffectedByCC(new CrowdControl(CrowdControlType.ForcedMove, DamageType.AreaOfEffect, DamageElement.Physical)))
                {
                    psm.ApplyCrowdControl(new CrowdControl(CrowdControlType.Stun, DamageType.AreaOfEffect, DamageElement.Physical), STUN_DURATION);
                    PushAway(col);
                }
                psm.TakeDamage(dmg, em);
                missed = false;
            }
        }