コード例 #1
0
ファイル: Guardian.cs プロジェクト: SofianeB98/Guardians
    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;
        }
    }
コード例 #2
0
ファイル: Guardian.cs プロジェクト: SofianeB98/Guardians
    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();
    }