using SHADE; using SHADE_Scripting.Audio; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Xml.Linq; public class Breakable : Script { public float threshHold = 1.0f; public bool ignoreRaccoon = false; private RigidBody rb; private Transform trans; public bool isBreak { get; set; } private List itemPieces = new List(); protected override void awake() { rb = GetComponent(); if (!rb) Debug.LogError("RIGIDBODY EMPTY"); trans = GetComponent(); if(!trans) Debug.LogError("TRANSFORM EMPTY"); foreach (GameObject pieces in GameObject) { itemPieces.Add(pieces); pieces.SetActive(false); } isBreak = false; AudioHandler.audioClipHandlers["SFXBreak"] = Audio.CreateAudioClip("event:/Props/impact_break"); } protected override void update() { if (isBreak) Break(); } protected override void onCollisionEnter(CollisionInfo info) { if (ignoreRaccoon && info.GameObject.GetScript()) return; if (rb.LinearVelocity.GetSqrMagnitude() > threshHold && !info.GameObject.GetScript()) { isBreak = true; if (GameObject.GetScript()) { GameManager.Instance.totalItemCount -= 1; GameManager.Instance.itemShatter = true; } } } protected override void onTriggerEnter(CollisionInfo info) { } private void Break() { foreach (GameObject item in itemPieces) { item.SetActive(true); item.GetComponent().GlobalPosition = trans.LocalPosition + item.GetComponent().LocalPosition; if (item.GetScript()) GameManager.Instance.totalItemCount += 1; GameObject gO = item; gO.Parent = GameObject.Null; } GameManager.Instance.itemShatter = false; isBreak = false; AudioHandler.audioClipHandlers["SFXBreak"].Play(); GameObject.SetActive(false); } }