Exemple #1
0
        public override void Init()
        {
            base.Init();

            if (em.statusManager.mode == Mode.Rage)
            {
                duration    = DURATION_RAGE;
                dmgStart    = DMG_START_RAGE;
                dmgDuration = DMG_DURATION_RAGE;
                em.anim.Play("Charge1Rage", -1, 0);
            }
            else
            {
                duration    = DURATION;
                dmgStart    = DMG_START;
                dmgDuration = DMG_DURATION;
                em.anim.Play("Charge1", -1, 0);
            }

            actGOs    = new GameObject[1];
            actGOs[0] = km.charge1actGO;
            parts     = new Part[1];
            parts[0]  = new Part(State.Before, dmgStart, dmgDuration, 0);

            acts = new AbilityColliderTrigger[actGOs.Length];
            for (int i = 0; i < actGOs.Length; i++)
            {
                acts[i] = actGOs[i].GetComponent <AbilityColliderTrigger>();
            }

            range = Mathf.Min(Mathf.Max(Vector3.Distance(em.transform.position, targetPosition), CHARGE_MIN_RANGE), CHARGE_MAX_RANGE);
        }
        void PushAway(PlayerStatusManager psm, AbilityColliderTrigger abilityColliderTrigger, Collider col)
        {
            // Push the player away
            Vector3        actPos = abilityColliderTrigger.transform.position;
            SphereCollider sc     = abilityColliderTrigger.GetComponent <SphereCollider>();

            Vector3 position      = col.transform.position;
            Vector3 finalPosition = position + (position - actPos).normalized * (sc.radius - (position - actPos).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 #3
0
 public override void OnColliderEnter(AbilityColliderTrigger act, Collider col)
 {
     if ((col.tag == "Enemy") && col.GetComponent <DamageTaker>() != null && !encounteredCols.ContainsKey(col))
     {
         encounteredCols.Add(col, playerMotor.transform.position + Vector3.up);
     }
 }
Exemple #4
0
 public override void OnColliderEnter(AbilityColliderTrigger act, Collider col)
 {
     if ((col.tag == "Enemy") && col.GetComponent <DamageTaker>() != null && !encounteredCols.Contains(col))
     {
         encounteredCols.Add(col);
         float distance = (col.ClosestPoint(playerMotor.transform.position) - playerMotor.transform.position).magnitude;
         newCols.Add(col, distance);
     }
 }
Exemple #5
0
        private void CreateTrigger()
        {
            trigger = GameObject.Instantiate(lightMotor.ab2TriggerPrefab, playerMotor.characterContainer);
            trigger.transform.localPosition = new Vector3(0f, .1f, 0f);
            trigger.transform.localRotation = Quaternion.identity;
            AbilityColliderTrigger act = trigger.GetComponent <AbilityColliderTrigger>();

            act.SetAbility(this);
        }
Exemple #6
0
        private void ApplyExplosionDamage(AbilityColliderTrigger abilityColliderTrigger, Collider col)
        {
            PlayerStatusManager psm = col.GetComponent <PlayerStatusManager>();
            Damage dmg = new Damage(EXPLOSION_DAMAGE, DamageType.AreaOfEffect, DamageElement.Energy,
                                    abilityColliderTrigger.transform.position);

            if (psm.IsAffectedBy(dmg, em, em.transform.position))
            {
                psm.TakeDamage(dmg, em, em.transform.position);
                missed = false;
            }
        }
Exemple #7
0
        public override void OnColliderEnter(AbilityColliderTrigger abilityColliderTrigger, Collider col)
        {
            if (col.tag == "Player" && !cols.ContainsKey(col))
            {
                cols.Add(col, Time.time);

                if (abilityColliderTrigger == actGOs[0].GetComponent <AbilityColliderTrigger>())
                {
                    ApplyDamage(col);
                }
            }
        }
Exemple #8
0
 public void OnColliderEnter(AbilityColliderTrigger abilityColliderTrigger, Collider col)
 {
     if (col.tag == "Player")
     {
         PlayerStatusManager psm = col.GetComponent <PlayerStatusManager>();
         Damage dmg = new Damage(10f, DamageType.AreaOfEffect, DamageElement.Energy, abilityColliderTrigger.transform.position);
         if (psm.IsAffectedBy(dmg, em))
         {
             psm.TakeDamage(dmg, em);
         }
     }
 }
        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);
                }
            }
        }
Exemple #10
0
        protected override void RunCollisionPart(int part)
        {
            if (part == 0)
            {
                // move Ray container
                float angle = CONE_STARTING + CONE_ANGLE * (Time.time - parts[0].startTime - startTime) / parts[0].duration;

                // compute length
                float      length = MAX_DISTANCE;
                RaycastHit hit;
                LayerMask  mask = LayerMask.GetMask("Environment");

                // If environment contact, shorter ray and explosion
                if (Physics.Raycast(groundRenderer.transform.position + km.attack1Container.transform.forward * DIST_FROM_CENTER_COLLIDER,
                                    Quaternion.Euler(0, angle, 0) * km.transform.forward, out hit, MAX_DISTANCE, mask))
                {
                    // ray length (collider)
                    length = hit.distance;
                }

                km.attack1actContainer.transform.localScale = new Vector3(1, 1, length);
                km.attack1RayRenderer.SetLength(length - 1);

                // Ground angle
                burningGround.SetAngle(angle);

                // Next sector
                if (angle > nextAngle)
                {
                    nextAngle = angle + ANGLE_SPACING - SAFETY_OVERLAP;

                    // Ground renderer
                    burningGround.addAngle3d(angle, length + DIST_FROM_CENTER_COLLIDER);

                    // new ground collider trigger for this sector
                    GameObject groundActGO = GameObject.Instantiate(groundActPrefab, groundRenderer.transform.position,
                                                                    em.transform.rotation * Quaternion.AngleAxis(angle, Vector3.up), null);
                    groundActGO.transform.localScale = new Vector3(length + DIST_FROM_CENTER_COLLIDER, 1, length + DIST_FROM_CENTER_COLLIDER);
                    GameObject.Destroy(groundActGO, GROUND_DURATION - (Time.time - startTime - DMG_START));

                    // Ability coolider trigger
                    AbilityColliderTrigger groundAct = groundActGO.GetComponent <AbilityColliderTrigger>();
                    groundAct.SetAbility(this, "ground");
                }
            }

            base.RunCollisionPart(part);
        }
        public override void Init()
        {
            base.Init();

            em.anim.Play("StartRage", -1, 0);

            em.SetOverrideAgent(true);

            actGOs    = new GameObject[1];
            actGOs[0] = km.StartRageActGO;
            parts     = new Part[1];
            parts[0]  = new Part(State.Before, SHIELD_ON_GROUND, PUSH_AWAY_DURATION, -1);

            acts    = new AbilityColliderTrigger[1];
            acts[0] = actGOs[0].GetComponent <AbilityColliderTrigger>();
        }
        public override void OnColliderEnter(AbilityColliderTrigger abilityColliderTrigger, Collider col)
        {
            if (col.tag == "Player" && !playerCols.Contains(col))
            {
                playerCols.Add(col);

                if (abilityColliderTrigger == acts[0].GetComponent <AbilityColliderTrigger>())
                {
                    DamagePart0(col);
                }

                if (abilityColliderTrigger == acts[1].GetComponent <AbilityColliderTrigger>())
                {
                    DamagePart1(col);
                }
            }
        }
Exemple #13
0
        private void SpawnLight()
        {
            Vector3 pos = new Vector3(lightMotor.sword.transform.position.x, .2f, lightMotor.sword.transform.position.z);

            GameObject lightZone = GameObject.Instantiate(lightMotor.lightZonePrefab, null);

            lightZone.transform.position = pos;

            // Particle effect
            lightMotor.LightSpawnPE(pos);

            // Damage zone (trigger)
            trigger = GameObject.Instantiate(lightMotor.lightSpawnTriggerPrefab, null);
            trigger.transform.position = pos;
            AbilityColliderTrigger act = trigger.GetComponent <AbilityColliderTrigger>();

            act.SetAbility(this);
        }
Exemple #14
0
        protected override void StartCollisionPart(int part)
        {
            if (part == 0)
            {
                float length = MAX_DISTANCE;

                // Create ray
                RaycastHit hit;
                LayerMask  mask = LayerMask.GetMask("Environment");

                // If environment contact, shorter ray and explosion
                if (Physics.Raycast(km.attack4Container.transform.position + km.attack4Container.transform.forward * DIST_FROM_CENTER_COLLIDER,
                                    km.attack4Container.transform.forward, out hit, MAX_DISTANCE, mask))
                {
                    // ray length
                    length = hit.distance;

                    // Activate explosion collider trigger
                    explActGO = GameObject.Instantiate(km.attack4ExplColliderPrefab, hit.point,
                                                       Quaternion.LookRotation(hit.normal, Vector3.up), null);
                    explActGO.transform.localScale = Vector3.one * EXPLOSION_RADIUS;
                    GameObject.Destroy(explActGO, DMG_DURATION);

                    // Explosion zone collider
                    explCols = new Dictionary <Collider, float>();
                    explAct  = explActGO.GetComponent <AbilityColliderTrigger>();
                    explAct.SetAbility(this, "explosion");

                    // Activate explosion renderer
                    explRenderer = GameObject.Instantiate(km.attack4ExplRendererPrefab, hit.point,
                                                          Quaternion.LookRotation(hit.normal, Vector3.up), null);
                    explRenderer.transform.localScale = Vector3.one * EXPLOSION_RADIUS;
                    GameObject.Destroy(explRenderer, EXPLOSION_RENDER_DURATION);
                }

                // Ray collider length
                km.attack4actContainer.transform.localScale = new Vector3(1, 1, length);

                // Instanciate ray renderer
                km.attack4RayRenderer.SetupAndStart(DMG_DURATION, length - (DIST_FROM_CENTER_RENDERER - DIST_FROM_CENTER_COLLIDER));
            }

            base.StartCollisionPart(part);
        }
Exemple #15
0
        public override void Init()
        {
            base.Init();

            if (em.statusManager.mode == Mode.Rage)
            {
                duration = DURATION_RAGE;
                dmgStart = DMG_START_RAGE;
                channelingEffectStart = CHANNELING_EFFECT_START_RAGE;
                em.anim.Play("Attack4Rage", -1, 0);
                km.attack4ChannelingEffectRage.Play();
            }
            else
            {
                duration = DURATION;
                dmgStart = DMG_START;
                channelingEffectStart = CHANNELING_EFFECT_START;
                km.attack4ChannelingEffect.Play();

                if (em.statusManager.mode == Mode.Exhaustion)
                {
                    em.anim.Play("Attack4Exhaustion", -1, 0);
                }
                else
                {
                    em.anim.Play("Attack4", -1, 0);
                }
            }

            em.SetOverrideAgent(true);

            actGOs   = new GameObject[1];
            parts    = new Part[1];
            parts[0] = new Part(State.Before, dmgStart, DMG_DURATION, -1);

            acts      = new AbilityColliderTrigger[1];
            actGOs[0] = km.attack4actGO;
            acts[0]   = actGOs[0].GetComponent <AbilityColliderTrigger>();

            // Rotate to face player
            targetPosition = target.position;

            effectStarted = false;
        }
Exemple #16
0
        private void SpawnLight()
        {
            Vector3 pos = playerMotor.transform.position + playerMotor.characterContainer.forward;

            pos.y = .2f;

            GameObject lightZone = GameObject.Instantiate(lightMotor.lightZonePrefab, null);

            lightZone.transform.position = pos;

            // Particle effect
            lightMotor.LightSpawnPE(pos);

            // Damage zone (trigger)
            trigger = GameObject.Instantiate(lightMotor.lightSpawnTriggerPrefab, null);
            trigger.transform.position = pos;
            AbilityColliderTrigger act = trigger.GetComponent <AbilityColliderTrigger>();

            act.SetAbility(this);
        }
Exemple #17
0
 private void OnCollision(AbilityColliderTrigger abilityColliderTrigger, Collider col)
 {
     if (col.tag == "Player")
     {
         if (abilityColliderTrigger == acts[0] && !cols.ContainsKey(col))
         {
             cols.Add(col, Time.time);
             ApplyRayDamage(col);
         }
         if (abilityColliderTrigger == explAct && !explCols.ContainsKey(col))
         {
             // if not behind obstacle
             if (Vector3.Dot(explAct.transform.forward, col.transform.position - explAct.transform.position) >= 0f)
             {
                 explCols.Add(col, Time.time);
                 ApplyExplosionDamage(abilityColliderTrigger, col);
             }
         }
     }
 }
        public override void Init()
        {
            base.Init();

            if (em.statusManager.mode == Mode.Rage)
            {
                duration      = DURATION_RAGE;
                spearDmgStart = SPEAR_DMG_START_RAGE;
                em.anim.Play("Attack3Rage", -1, 0);
                km.attack3ChannelingEffectRage.Play();
            }
            else
            {
                duration      = DURATION;
                spearDmgStart = SPEAR_DMG_START;
                km.attack3ChannelingEffect.Play();

                if (em.statusManager.mode == Mode.Exhaustion)
                {
                    em.anim.Play("Attack3Exhaustion", -1, 0);
                }
                else
                {
                    em.anim.Play("Attack3", -1, 0);
                }
            }

            em.SetOverrideAgent(true);

            parts    = new Part[2];
            parts[0] = new Part(State.Before, spearDmgStart, SPEAR_DMG_DURATION, -1);
            parts[1] = new Part(State.Before, spearDmgStart + SHIELD_DMG_START_AFTER_SPEAR, SHIELD_DMG_DURATION, -1);

            acts    = new AbilityColliderTrigger[2];
            acts[0] = actGOs[0].GetComponent <AbilityColliderTrigger>();
            acts[1] = actGOs[1].GetComponent <AbilityColliderTrigger>();

            playerCols = new List <Collider>();
        }
Exemple #19
0
 private void OnCollision(AbilityColliderTrigger abilityColliderTrigger, Collider col)
 {
     if (col.tag == "Player")
     {
         if (abilityColliderTrigger == acts[0])
         {
             if (cols.ContainsKey(col))
             {
                 if (cols[col] + TIME_BETWEEN_RAY_TICKS < Time.time)
                 {
                     cols[col] = Time.time;
                     ApplyRayDamage(col);
                 }
             }
             else
             {
                 cols.Add(col, Time.time);
                 ApplyRayDamage(col);
             }
         }
         if (abilityColliderTrigger.abTag == "ground")
         {
             if (groundCols.ContainsKey(col))
             {
                 if (groundCols[col] + TIME_BETWEEN_GROUND_TICKS < Time.time)
                 {
                     groundCols[col] = Time.time;
                     ApplyGroundDamage(col);
                 }
             }
             else
             {
                 groundCols.Add(col, Time.time);
                 ApplyGroundDamage(col);
             }
         }
     }
 }
Exemple #20
0
 public virtual void OnColliderStay(AbilityColliderTrigger abilityColliderTrigger, Collider col)
 {
 }
Exemple #21
0
 public abstract void OnColliderEnter(AbilityColliderTrigger abilityColliderTrigger, Collider col);
Exemple #22
0
 public override void OnColliderStay(AbilityColliderTrigger abilityColliderTrigger, Collider col)
 {
     OnCollision(abilityColliderTrigger, col);
 }