using System; using System.Collections.Generic; using Routes; using TrafficSimulation; using UniRx.Triggers; using UnityEditor; using UnityEngine; [CustomEditor(typeof(IntersectionPreset))] public class IntersectionPresetEditor : Editor { private bool setPosition; private IntersectionPreset preset; private void OnEnable() { this.preset = (IntersectionPreset) target; } public override void OnInspectorGUI() { EditorGUILayout.LabelField("Traffic System"); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("trafficSystem")); EditorGUILayout.PropertyField(serializedObject.FindProperty("intersection")); EditorGUILayout.Space(); EditorGUILayout.LabelField("Car Items"); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("cars")); EditorGUILayout.PropertyField(serializedObject.FindProperty("carSpawner")); EditorGUILayout.PropertyField(serializedObject.FindProperty("carPool")); EditorGUILayout.Space(); EditorGUILayout.LabelField("Trigger"); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("triggerIn")); EditorGUILayout.PropertyField(serializedObject.FindProperty("triggerOut")); EditorGUILayout.Space(); EditorGUILayout.LabelField("Experiment Data"); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("number")); EditorGUILayout.PropertyField(serializedObject.FindProperty("condition")); EditorGUILayout.Space(); EditorGUILayout.LabelField("Position Trigger"); EditorGUILayout.Space(); if (GUILayout.Button("Reset Position", GUILayout.Width(128))) { ResetPosition(); } if (GUILayout.Button("Position Spawns", GUILayout.Width(128))) { PositionSpawns(); } if (GUILayout.Button("Trigger IN Right", GUILayout.Width(128))) { SetTrigger("in","r"); } if (GUILayout.Button("Trigger IN Down", GUILayout.Width(128))) { SetTrigger("in","d"); } if (GUILayout.Button("Trigger IN Top", GUILayout.Width(128))) { SetTrigger("in","t"); } if (GUILayout.Button("Trigger IN Left", GUILayout.Width(128))) { SetTrigger("in","l"); } if (GUILayout.Button("Trigger OUT Right", GUILayout.Width(128))) { SetTrigger("out","r"); } if (GUILayout.Button("Trigger OUT Down", GUILayout.Width(128))) { SetTrigger("out","d"); } if (GUILayout.Button("Trigger OUT Top", GUILayout.Width(128))) { SetTrigger("out","t"); } if (GUILayout.Button("Trigger OUT Left", GUILayout.Width(128))) { SetTrigger("out","l"); } } private void PositionSpawns() { SpawnWatcher[] spawns = this.preset.GetComponentsInChildren(); if (spawns.Length == 4) { //right spawns[0].gameObject.transform.localPosition = new Vector3(2.5f, spawns[0].gameObject.transform.localPosition.y, -50.0f); spawns[0].gameObject.transform.eulerAngles = new Vector3(0, 0); //left spawns[1].gameObject.transform.localPosition = new Vector3(-1.5f, spawns[1].gameObject.transform.localPosition.y, 50.0f); spawns[1].gameObject.transform.eulerAngles = new Vector3(0, 180); //top spawns[2].gameObject.transform.localPosition = new Vector3(50f, spawns[2].gameObject.transform.localPosition.y, 3.5f); spawns[2].gameObject.transform.eulerAngles = new Vector3(0, -90); //down spawns[3].gameObject.transform.localPosition = new Vector3(-50f, spawns[3].gameObject.transform.localPosition.y, -1.5f); spawns[3].gameObject.transform.eulerAngles = new Vector3(0, 90); } } private void ResetPosition() { Vector3 intersectionPosition = this.preset.intersection.transform.position; this.preset.transform.position = intersectionPosition; Transform[] childTransforms = this.preset.GetComponentsInChildren(); foreach (Transform child in childTransforms) { Debug.Log("Child found"); if (child.gameObject == this.preset.gameObject) { continue; } child.localPosition = new Vector3(child.localPosition.x,0.5f,child.localPosition.z); } this.preset.GetComponentInChildren().transform.position = intersectionPosition; } private void SetTrigger(String trigger, String direction) { PresetTrigger[] triggers = this.preset.GetComponentsInChildren(); Transform triggerTransform = null; if (trigger == "out") { //REQUIRES that the out trigger is the second element! not clean i know triggerTransform = triggers[1].gameObject.transform; }else if (trigger == "in") { triggerTransform = triggers[0].gameObject.transform; } if (triggerTransform == null) { Debug.Log("No trigger set. cant edit position"); return; } Debug.Log("change Gameobject:" + triggerTransform.gameObject.name); switch (direction) { case "l": triggerTransform.localPosition = new Vector3(-100.0f, triggerTransform.localPosition.y, 7.4f); triggerTransform.eulerAngles = new Vector3(0, 0); break; case "r": triggerTransform.localPosition = new Vector3(100.0f, triggerTransform.localPosition.y, 7.4f); triggerTransform.eulerAngles = new Vector3(0, 0); break; case "d": triggerTransform.localPosition = new Vector3(7.4f, triggerTransform.localPosition.y, -100.0f); triggerTransform.eulerAngles = new Vector3(0, 90); break; case "t": triggerTransform.localPosition = new Vector3(7.4f, triggerTransform.localPosition.y, 100.0f); triggerTransform.eulerAngles = new Vector3(0, 90); break; } } }