Exemple #1
0
        public override IEnumerator Behavior()
        {
            Collider[] cols = Physics.OverlapSphere(transform.position, radious);
            foreach (Collider col in cols)
            {
                FracturedChunk chunk = col.GetComponent <FracturedChunk>();
                if (chunk == null)
                {
                    continue;
                }
                chunk.Impact(transform.position, force, radious, true);
                chunk.FracturedObjectSource.SetSingleMeshVisibility(false);
            }

            yield break;
        }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            ShootMode = ShootMode == Mode.ExplodeRaycast ? Mode.ShootObjects : Mode.ExplodeRaycast;
        }

        if (ObjectToShoot != null && ShootMode == Mode.ShootObjects)
        {
            // Shoot objects

            if (Weapon)
            {
                Weapon.GetComponent <Renderer>().enabled = false;
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                GameObject newObject = GameObject.Instantiate(ObjectToShoot) as GameObject;
                newObject.transform.position                          = this.transform.position;
                newObject.transform.localScale                        = new Vector3(ObjectScale, ObjectScale, ObjectScale);
                newObject.GetComponent <Rigidbody>().mass             = ObjectMass;
                newObject.GetComponent <Rigidbody>().solverIterations = 255;
                newObject.GetComponent <Rigidbody>().AddForce(this.transform.forward * InitialObjectSpeed, ForceMode.VelocityChange);

                //DieTimer dieTimer = newObject.AddComponent<DieTimer>() as DieTimer;
                //dieTimer.SecondsToDie = ObjectLife;
            }
        }

        if (ShootMode == Mode.ExplodeRaycast)
        {
            // Raycast

            if (Weapon)
            {
                Weapon.GetComponent <Renderer>().enabled = true;
            }

            bool bShot = Input.GetKeyDown(KeyCode.Space);

            if (bShot)
            {
                m_fRecoilTimer = RecoilDuration;
                if (AudioWeaponShot)
                {
                    AudioSource.PlayClipAtPoint(AudioWeaponShot, transform.position, WeaponShotVolume);
                }
            }

            m_bRaycastFound = false;

            RaycastHit hitInfo;

            FracturedChunk chunkRaycast = FracturedChunk.ChunkRaycast(transform.position, transform.forward, out hitInfo);

            if (chunkRaycast)
            {
                m_bRaycastFound = true;

                if (bShot)
                {
                    // Hit it!
                    chunkRaycast.Impact(hitInfo.point, ExplosionForce, ExplosionRadius, true);
                }
            }
        }

        // Update recoil

        if (m_fRecoilTimer > 0.0f)
        {
            if (Weapon)
            {
                // Some rudimentary recoil animation here
                Weapon.transform.localPosition = m_v3InitialWeaponPos + new Vector3(0.0f, 0.0f, (-m_fRecoilTimer / RecoilDuration) * RecoilIntensity);
                Weapon.transform.localRotation = m_qInitialWeaponRot * Quaternion.Euler(new Vector3((m_fRecoilTimer / RecoilDuration) * 360.0f * RecoilIntensity * 0.1f, 0.0f, 0.0f));
            }

            m_fRecoilTimer -= Time.deltaTime;
        }
        else
        {
            if (Weapon)
            {
                Weapon.transform.localPosition = m_v3InitialWeaponPos;
                Weapon.transform.localRotation = m_qInitialWeaponRot;
            }
        }

        // Mouse-aim

        if (Input.GetMouseButton(0) && Input.GetMouseButtonDown(0) == false)
        {
            this.transform.Rotate(-(Input.mousePosition.y - m_v3MousePosition.y) * MouseSpeed, 0.0f, 0.0f);
            this.transform.RotateAround(this.transform.position, Vector3.up, (Input.mousePosition.x - m_v3MousePosition.x) * MouseSpeed);
        }

        m_v3MousePosition = Input.mousePosition;
    }