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; }