public virtual void DoMeleeEffects(Vector3 fromPos, Vector3 pos, Quaternion rot, GameObject hitObj) { if (!hitObj.CompareTag("Tree Collider")) { SurfaceInfo.DoImpact(hitObj, SurfaceInfoObject.ImpactType.Melee, pos, rot); return; } GameObject gameObject = UnityEngine.Object.Instantiate(this.impactEffectWood, pos, rot) as GameObject; UnityEngine.Object.Destroy(gameObject, 1.5f); this.impactSoundWood.Play(pos, 1f, 2f, 10f); }
public virtual void DoMeleeEffects(Vector3 fromPos, Vector3 pos, Quaternion rot, GameObject hitObj) { if (hitObj.CompareTag("Tree Collider")) { GameObject obj2 = Object.Instantiate(this.impactEffectWood, pos, rot) as GameObject; Object.Destroy(obj2, 1.5f); this.impactSoundWood.Play(pos, (float)1f, (float)2f, (float)10f); } else { SurfaceInfo.DoImpact(hitObj, SurfaceInfoObject.ImpactType.Melee, pos, rot); } }
private void Update() { float num = Time.time - this.lastUpdateTime; this.lastUpdateTime = Time.time; if (this.distance > this.fadeDistStart) { base.transform.localScale = Vector3.Lerp(base.transform.localScale, this.startScale, Mathf.Clamp((float)((this.distance - this.fadeDistStart) / this.fadeDistLength), (float)0f, (float)1f)); } RaycastHit hitInfo = new RaycastHit(); RaycastHit2 invalid = RaycastHit2.invalid; Ray ray = new Ray(base.transform.position, base.transform.forward); float distance = this.speedPerSec * num; bool flag = !((this.thereIsACollider && (this.colliderToHit != null)) && this.colliderToHit.enabled); if (!flag ? this.colliderToHit.Raycast(ray, out hitInfo, distance) : Physics2.Raycast2(ray, out invalid, this.speedPerSec * num, this.layerMask)) { Vector3 point; Vector3 normal; GameObject gameObject; Rigidbody rigidbody; if (Vector3.Distance(Camera.main.transform.position, base.transform.position) > 75f) { Object.Destroy(base.gameObject); return; } if (flag) { normal = invalid.normal; point = invalid.point; gameObject = invalid.gameObject; rigidbody = invalid.rigidbody; } else { normal = hitInfo.normal; point = hitInfo.point; gameObject = hitInfo.collider.gameObject; rigidbody = hitInfo.rigidbody; } Quaternion rotation = Quaternion.LookRotation(normal); int layer = gameObject.layer; GameObject impactPrefab = this.impactPrefab; bool flag2 = true; if (((rigidbody != null) && !rigidbody.isKinematic) && !rigidbody.CompareTag("Door")) { rigidbody.AddForceAtPosition((Vector3)(Vector3.up * 200f), point); rigidbody.AddForceAtPosition((Vector3)(ray.direction * 1000f), point); } SurfaceInfo.DoImpact(gameObject, SurfaceInfoObject.ImpactType.Bullet, point + ((Vector3)(normal * 0.01f)), rotation); switch (layer) { case 0x11: case 0x12: case 0x1b: case 0x15: flag2 = false; break; } Object.Destroy(base.gameObject); if (flag2) { this.impactSounds[Random.Range(0, this.impactSounds.Length)].Play(point, 1f, 2f, 15f, 180); GameObject obj4 = Object.Instantiate(this.decalPrefab, point + ((Vector3)(normal * Random.Range((float)0.01f, (float)0.03f))), rotation * Quaternion.Euler(0f, 0f, (float)Random.Range(-30, 30))) as GameObject; if (gameObject != null) { obj4.transform.parent = gameObject.transform; } Object.Destroy(obj4, 15f); } } else { Transform transform = base.transform; transform.position += (Vector3)((base.transform.forward * this.speedPerSec) * num); this.distance += this.speedPerSec * num; } if (this.distance > this.maxRange) { Object.Destroy(base.gameObject); } }
private void Update() { Vector3 vector3; Vector3 vector31; GameObject gameObject; Rigidbody rigidbody; float single = Time.time - this.lastUpdateTime; this.lastUpdateTime = Time.time; if (this.distance > this.fadeDistStart) { base.transform.localScale = Vector3.Lerp(base.transform.localScale, this.startScale, Mathf.Clamp((this.distance - this.fadeDistStart) / this.fadeDistLength, 0f, 1f)); } RaycastHit raycastHit = new RaycastHit(); RaycastHit2 raycastHit2 = RaycastHit2.invalid; Ray ray = new Ray(base.transform.position, base.transform.forward); float single1 = this.speedPerSec * single; bool flag = (!this.thereIsACollider || !this.colliderToHit ? 0 : (int)this.colliderToHit.enabled) == 0; if ((!flag ? !this.colliderToHit.Raycast(ray, out raycastHit, single1) : !Physics2.Raycast2(ray, out raycastHit2, this.speedPerSec * single, this.layerMask))) { Transform transforms = base.transform; transforms.position = transforms.position + ((base.transform.forward * this.speedPerSec) * single); Tracer tracer = this; tracer.distance = tracer.distance + this.speedPerSec * single; } else { if (Vector3.Distance(Camera.main.transform.position, base.transform.position) > 75f) { UnityEngine.Object.Destroy(base.gameObject); return; } if (!flag) { vector31 = raycastHit.normal; vector3 = raycastHit.point; gameObject = raycastHit.collider.gameObject; rigidbody = raycastHit.rigidbody; } else { vector31 = raycastHit2.normal; vector3 = raycastHit2.point; gameObject = raycastHit2.gameObject; rigidbody = raycastHit2.rigidbody; } Quaternion quaternion = Quaternion.LookRotation(vector31); int num = gameObject.layer; GameObject gameObject1 = this.impactPrefab; bool flag1 = true; if (rigidbody && !rigidbody.isKinematic && !rigidbody.CompareTag("Door")) { rigidbody.AddForceAtPosition(Vector3.up * 200f, vector3); rigidbody.AddForceAtPosition(ray.direction * 1000f, vector3); } SurfaceInfo.DoImpact(gameObject, SurfaceInfoObject.ImpactType.Bullet, vector3 + (vector31 * 0.01f), quaternion); if (num == 17 || num == 18 || num == 27 || num == 21) { flag1 = false; } UnityEngine.Object.Destroy(base.gameObject); if (flag1) { this.impactSounds[UnityEngine.Random.Range(0, (int)this.impactSounds.Length)].Play(vector3, 1f, 2f, 15f, 180); GameObject gameObject2 = UnityEngine.Object.Instantiate(this.decalPrefab, vector3 + (vector31 * UnityEngine.Random.Range(0.01f, 0.03f)), quaternion * Quaternion.Euler(0f, 0f, (float)UnityEngine.Random.Range(-30, 30))) as GameObject; if (gameObject) { gameObject2.transform.parent = gameObject.transform; } UnityEngine.Object.Destroy(gameObject2, 15f); } } if (this.distance > this.maxRange) { UnityEngine.Object.Destroy(base.gameObject); } }