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); }
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); } }
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); } }
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); }
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; } }
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); } } }
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); } } }
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); } } }
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); }
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); }
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; }
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); }
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>(); }
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); } } } }
public virtual void OnColliderStay(AbilityColliderTrigger abilityColliderTrigger, Collider col) { }
public abstract void OnColliderEnter(AbilityColliderTrigger abilityColliderTrigger, Collider col);
public override void OnColliderStay(AbilityColliderTrigger abilityColliderTrigger, Collider col) { OnCollision(abilityColliderTrigger, col); }