102 lines
2.6 KiB
C#
102 lines
2.6 KiB
C#
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<Renderer>();
|
|
if (renderers.Length == 0) return;
|
|
|
|
Bounds bounds = renderers[0].bounds;
|
|
foreach (var r in renderers)
|
|
bounds.Encapsulate(r.bounds);
|
|
|
|
BoxCollider collider = GetComponent<BoxCollider>();
|
|
if (!collider) collider = gameObject.AddComponent<BoxCollider>();
|
|
|
|
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<string> path)
|
|
{
|
|
foreach (var key in path)
|
|
{
|
|
if (token == null) return null;
|
|
token = token[key];
|
|
}
|
|
return token;
|
|
}
|
|
public JArray GetJsonArray(JToken token, IEnumerable<string> path)
|
|
{
|
|
foreach (var key in path)
|
|
{
|
|
if (token == null) return null;
|
|
token = token[key];
|
|
}
|
|
return token as JArray;
|
|
}
|
|
public int GetJsonIntValue(JToken token, IEnumerable<string> 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<string> 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;
|
|
}
|
|
}
|