123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- 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<SpawnWatcher>();
- 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<Transform>();
- 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<CarSituationSpawner>().transform.position = intersectionPosition;
-
- }
- private void SetTrigger(String trigger, String direction)
- {
- PresetTrigger[] triggers = this.preset.GetComponentsInChildren<PresetTrigger>();
- 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;
- }
- }
- }
|