using System; using System.Collections; using System.Collections.Generic; using DarkTonic.MasterAudio; using UnityEngine; // Token: 0x02000033 RID: 51 public class Gore : MonoBehaviour { // Token: 0x060007CF RID: 1999 RVA: 0x000AD748 File Offset: 0x000AB948 private void Start() { if (!this.skipRenderers) { this.meshRenderers = base.gameObject.GetComponentsInChildren(true); foreach (MeshRenderer meshRenderer in this.meshRenderers) { this.mat = meshRenderer.sharedMaterials; foreach (Material material in this.mat) { if (material.shader != Links.x.characterGame && !material.shader.name.Contains("Single") && !Links.x.rallyStage.playing) { material.shader = Links.x.characterGame; } } } this.skinnedMeshRenderers = base.gameObject.GetComponentsInChildren(true); foreach (SkinnedMeshRenderer skinnedMeshRenderer in this.skinnedMeshRenderers) { this.mat = skinnedMeshRenderer.sharedMaterials; foreach (Material material2 in this.mat) { if (material2.shader != Links.x.characterGame && !material2.shader.name.Contains("Single") && !Links.x.rallyStage.playing) { material2.shader = Links.x.characterGame; } } } if (!this.addedListens) { Collider[] componentsInChildren = base.gameObject.GetComponentsInChildren(true); for (int i = 0; i < componentsInChildren.Length; i++) { componentsInChildren[i].gameObject.AddComponent().gore = this; } this.addedListens = true; } if (!Links.x.rallyStage.playing) { this.skipRenderers = true; } } if (this.breakOnStart) { if (this.rigidbodies.Length == 0) { this.Setup(); } else { this.DoReset(); } this.Break(base.gameObject.transform.position); if (this.returnAfterTimer) { base.StartCoroutine(this.Wait()); } } } // Token: 0x060007D0 RID: 2000 RVA: 0x000AD964 File Offset: 0x000ABB64 public void SetKinematic() { for (int i = 0; i < this.rigidbodies.Length; i++) { this.rigidbodies[i].isKinematic = true; } this.setKinematic = true; } // Token: 0x060007D1 RID: 2001 RVA: 0x000AD99C File Offset: 0x000ABB9C public void Setup() { this.setKinematic = false; this.rigidbodies = base.gameObject.GetComponentsInChildren(true); for (int i = 0; i < this.rigidbodies.Length; i++) { this.positions.Add(this.rigidbodies[i].gameObject.transform.localPosition); this.rotations.Add(this.rigidbodies[i].gameObject.transform.localRotation); } } // Token: 0x060007D2 RID: 2002 RVA: 0x000ADA1C File Offset: 0x000ABC1C public void DoReset() { this.setKinematic = false; for (int i = 0; i < this.rigidbodies.Length; i++) { this.rigidbodies[i].isKinematic = true; this.rigidbodies[i].gameObject.transform.localPosition = this.positions[i]; this.rigidbodies[i].gameObject.transform.localRotation = this.rotations[i]; } } // Token: 0x060007D3 RID: 2003 RVA: 0x000ADA98 File Offset: 0x000ABC98 public void Break(Vector3 position) { if (this.rigidbodies.Length == 0) { this.Setup(); } base.gameObject.transform.position = position; base.gameObject.SetActive(true); this.DoReset(); for (int i = 0; i < this.rigidbodies.Length; i++) { this.rigidbodies[i].gameObject.SetActive(true); this.rigidbodies[i].isKinematic = false; this.rigidbodies[i].gameObject.layer = 20; Vector3 vector = position; vector.y += this.up; Vector3 vector2 = position; vector2.x += Random.Range(-3f, 3f); vector2.z += Random.Range(-3f, 3f); Quaternion quaternion = Quaternion.LookRotation(vector - vector2); this.rigidbodies[i].AddForce(quaternion * Vector3.forward * this.force * 0.08f, ForceMode.Force); } if (this.playSound) { MasterAudio.PlaySound3DAtVector3AndForget("Interactives", base.gameObject.transform.position, 1f, new float?(1f), 0f, "Chest Break", null); } } // Token: 0x060007D4 RID: 2004 RVA: 0x000ADBEF File Offset: 0x000ABDEF private IEnumerator Wait() { float startSeconds = Links.x.gameplay.seconds; yield return new WaitForSeconds(1f); while (Links.x.gameplay.seconds < startSeconds + (float)this.timeToHoldFor) { for (int i = 0; i < this.rigidbodies.Length; i++) { if (this.rigidbodies[i].gameObject.activeSelf && this.rigidbodies[i].linearVelocity.sqrMagnitude < 0.2f) { this.rigidbodies[i].gameObject.SetActive(false); } } yield return null; } Links.x.cellar.ReturnPooledGameObject(this.cellarID, base.gameObject); base.gameObject.SetActive(false); yield break; } // Token: 0x04000C25 RID: 3109 public List positions = new List(); // Token: 0x04000C26 RID: 3110 public List rotations = new List(); // Token: 0x04000C27 RID: 3111 public Rigidbody[] rigidbodies = new Rigidbody[0]; // Token: 0x04000C28 RID: 3112 private MeshRenderer[] meshRenderers; // Token: 0x04000C29 RID: 3113 private SkinnedMeshRenderer[] skinnedMeshRenderers; // Token: 0x04000C2A RID: 3114 public bool breakOnStart; // Token: 0x04000C2B RID: 3115 private Material[] mat; // Token: 0x04000C2C RID: 3116 private Vector3 originalScale = new Vector3(1f, 1f, 1f); // Token: 0x04000C2D RID: 3117 public bool skipRenderers; // Token: 0x04000C2E RID: 3118 public int cellarID; // Token: 0x04000C2F RID: 3119 public bool returnAfterTimer; // Token: 0x04000C30 RID: 3120 public int timeToHoldFor; // Token: 0x04000C31 RID: 3121 public float force = 4000f; // Token: 0x04000C32 RID: 3122 public float up = 2f; // Token: 0x04000C33 RID: 3123 public bool playSound = true; // Token: 0x04000C34 RID: 3124 public bool addBoneListeners; // Token: 0x04000C35 RID: 3125 public Character character; // Token: 0x04000C36 RID: 3126 private bool addedListens; // Token: 0x04000C37 RID: 3127 public float startTime; // Token: 0x04000C38 RID: 3128 public bool damageEveryone; // Token: 0x04000C39 RID: 3129 public bool damageOthers = true; // Token: 0x04000C3A RID: 3130 public bool damageNone; // Token: 0x04000C3B RID: 3131 public bool setKinematic; }