public override void OnEvent(FusRoDaFBEvent evnt) { //Switch mode ParticleSystem frdParticleSystem = Instantiate(this.fusRoDaFeedback, this.startPointFus.position, evnt.Rotation); ParticleSystem.ShapeModule shape = frdParticleSystem.shape; Destroy(frdParticleSystem.gameObject, 1.2f); ParticleSystem.MainModule main = frdParticleSystem.main; main.startColor = state.MyColor; main = frdParticleSystem.GetComponent <ParticleSystem>().main; main.startColor = state.MyColor; switch (mode) { case FusRoDaMode.Cone: shape.length = this.distanceCheck; shape.angle = this.angleMaxToCheckCone; break; case FusRoDaMode.Laser: shape.length = this.distanceCheck; shape.angle = 0f; shape.radius = this.fusDetectionRadius; main.startSize = this.fusDetectionRadius; break; } }
public void FusRoDa() { this.IsFusRoDah = true; state.FusRoDa = true; var evntAudio = AudioStartEvent.Create(entity); evntAudio.Position = transform.position; evntAudio.AudioID = 2; evntAudio.Send(); switch (mode) { case FusRoDaMode.Cone: Vector3 position = this.startPointFus.position + (this.cameraRef.forward * (this.distanceCheck / 2)); Vector3 direction = this.CameraRef.rotation * Vector3.forward; Collider[] guardianColliders = Physics.OverlapSphere(position, this.fusDetectionRadius, this.fusRoDahLayerMask); if (guardianColliders.Length > 0) { foreach (var guard in guardianColliders) { float distance = Vector3.Distance(this.transform.position, guard.transform.position); float angle = Vector3.Angle(this.transform.forward, guard.transform.position - this.transform.position); if (angle <= this.angleMaxToCheckCone && distance <= this.distanceCheck) { if (!Physics.Raycast(this.transform.position, guard.transform.position - this.transform.position, distance, ~this.fusIgnoreLayerMask)) { float force = this.forcePush; force = force * (1 - ((Vector3.Distance(this.transform.position, guard.transform.position)) / this.distanceCheck) / this.diviseurDistance); Guardian guardian = guard.GetComponent <Guardian>(); if (guardian != null && guardian != this) { guardian.SetStun(direction.normalized, force, entity); } } } } } StartCoroutine(CoolDownFus()); break; case FusRoDaMode.Laser: this.pointStartLaser.rotation = cameraRef.rotation; this.pointEndLaser.localPosition = new Vector3(this.pointEndLaser.localPosition.x, this.pointEndLaser.localPosition.y, this.distanceCheck); Collider[] laserCol = Physics.OverlapCapsule(this.pointStartLaser.position, this.pointEndLaser.position, this.fusDetectionRadius, this.fusRoDahLayerMask); Vector3 dir = this.cameraRef.rotation * Vector3.forward; if (laserCol.Length > 0) { foreach (var guard in laserCol) { float distance = Vector3.Distance(this.startPointFus.position, guard.transform.position); //float angle = Vector3.Angle(this.transform.forward, guard.transform.position - this.transform.position); if (distance <= this.distanceCheck) { if (!Physics.Raycast(this.startPointFus.position, guard.transform.position - this.transform.position, distance, ~this.fusIgnoreLayerMask)) { float force = this.forcePush; force = force * (1 - ((Vector3.Distance(this.startPointFus.position, guard.transform.position)) / this.distanceCheck) / this.diviseurDistance); Guardian guardian = guard.GetComponent <Guardian>(); if (guardian != null && guardian != this) { if (!guardian.IsDie && !guardian.IsStuned && !guardian.IsInvinsible) { guardian.SetStun(dir.normalized, force, entity); } } } } } } StartCoroutine(CoolDownFus()); break; } var evnt = FusRoDaFBEvent.Create(entity); evnt.Rotation = this.cameraRef.rotation; evnt.Send(); }