using UnityEngine; using System.Collections; using Newtonsoft.Json.Linq; using System.Collections.Generic; public class SimulationModel : MonoBehaviour, IClickable { public string modelName; public string modelType; public string modelID; public string nodeID; private bool isQuitting = false; void Awake() { FitCollider(); } private void OnEnable() { Debug.Log(this.name); DataManager.I.AddModel(this); StartCoroutine(RunSimulationCoroutine()); } private void OnDisable() { if (isQuitting) return; DataManager.I.RemoveModel(this); StopAllCoroutines(); } void OnApplicationQuit() { isQuitting = true; } public void OnClick() { Debug.Log("Clicked : " + gameObject.name); } void FitCollider() { var renderers = GetComponentsInChildren(); if (renderers.Length == 0) return; Bounds bounds = renderers[0].bounds; foreach (var r in renderers) bounds.Encapsulate(r.bounds); BoxCollider collider = GetComponent(); if (!collider) collider = gameObject.AddComponent(); collider.center = transform.InverseTransformPoint(bounds.center); collider.size = transform.InverseTransformVector(bounds.size); } protected virtual IEnumerator RunSimulationCoroutine() { yield return null; } public object GetJsonValue(JToken token, IEnumerable path) { foreach (var key in path) { if (token == null) return null; token = token[key]; } return token; } public JArray GetJsonArray(JToken token, IEnumerable path) { foreach (var key in path) { if (token == null) return null; token = token[key]; } return token as JArray; } public int GetJsonIntValue(JToken token, IEnumerable path) { int value = 0; foreach (var key in path) { if (token == null) return 0; token = token[key]; } if (token != null && int.TryParse(token.ToString(), out value)) { return value; } return 0; } public float GetJsonFloatValue(JToken token, IEnumerable path) { float value = 0; foreach (var key in path) { if (token == null) return 0; token = token[key]; } if (token != null && float.TryParse(token.ToString(), out value)) { return value; } return 0; } }