/// <summary> /// Adds the type of the lights by. /// </summary> /// <param name="tLight">T light.</param> /// <param name="lightType">Light type.</param> /// <param name="amount">Amount.</param> void AddLightsByType(TSTrafficLight tLight, TSTrafficLight.LightType lightType, int amount) { TSTrafficLight.TSLight clone = null; for (int i = 0; i < tLight.lights.Count; i++) { if (tLight.lights[i].lightType == lightType) { clone = tLight.lights[i]; } } for (int i = 0; i < amount; i++) { AddeNewLight(ref tLight); tLight.lights[tLight.lights.Count - 1].lightType = lightType; if (clone != null) { tLight.lights[tLight.lights.Count - 1].enableDisableRenderer = clone.enableDisableRenderer; tLight.lights[tLight.lights.Count - 1].lightGameObject = clone.lightGameObject; tLight.lights[tLight.lights.Count - 1].lightMeshRenderer = clone.lightMeshRenderer; tLight.lights[tLight.lights.Count - 1].lightTexture = clone.lightTexture; tLight.lights[tLight.lights.Count - 1].shaderTexturePropertyName = clone.shaderTexturePropertyName; } } }
/// <summary> /// Checks the and create missing lights. /// </summary> /// <param name="tLight">T light.</param> /// <param name="inBetween">If set to <c>true</c> in between.</param> void CheckAndCreateMissingLights(TSTrafficLight tLight, bool inBetween) { int numberOfRedLights = 0; if (inBetween) { numberOfRedLights = 2; } else { numberOfRedLights = 1; } //Red lights int actualNumberOfLights = NumberOfLightsByType(tLight, TSTrafficLight.LightType.Red); if (actualNumberOfLights != numberOfRedLights) { if (actualNumberOfLights > numberOfRedLights) { RemoveLightsByType(tLight, TSTrafficLight.LightType.Red, actualNumberOfLights - numberOfRedLights); } else if (actualNumberOfLights < numberOfRedLights) { AddLightsByType(tLight, TSTrafficLight.LightType.Red, numberOfRedLights - actualNumberOfLights); } } //Other Lights CheckOtherTypesOfLights(ref tLight); }
/// <summary> /// Checks the other types of lights. /// </summary> /// <param name="tLight">T light.</param> void CheckOtherTypesOfLights(ref TSTrafficLight tLight) { TSTrafficLight.LightType lightType = TSTrafficLight.LightType.Green; for (int i = 0; i < 2; i++) { switch (i) { case 1: lightType = TSTrafficLight.LightType.Yellow; break; } int actualNumberOfLights = NumberOfLightsByType(tLight, lightType); if (manager.greenLightTime != 0 && actualNumberOfLights != 1) { if (actualNumberOfLights > 1) { RemoveLightsByType(tLight, lightType, actualNumberOfLights - 1); } else if (actualNumberOfLights < 1) { AddLightsByType(tLight, lightType, 1); } } } }
/// <summary> /// Assigns the middle light times. /// </summary> /// <param name="tLight">T light.</param> /// <param name="totalLights">Total lights.</param> /// <param name="currentLight">Current light.</param> void AssignMiddleLightTimes(TSTrafficLight tLight, int totalLights, int currentLight) { bool arranged = false; int t = 0; while (!arranged) { for (int i = 0; i < tLight.lights.Count; i++) { switch (t) { //red light case 0: if (tLight.lights[i].lightType == TSTrafficLight.LightType.Red) { tLight.lights[i].lightTime = (manager.greenLightTime + manager.yellowLightTime) * (currentLight); Move <TSTrafficLight.TSLight>(tLight.lights, i, 0); t = 1; } break; //green light case 1: if (tLight.lights[i].lightType == TSTrafficLight.LightType.Green) { tLight.lights[i].lightTime = manager.greenLightTime; Move <TSTrafficLight.TSLight>(tLight.lights, i, 1); t = 2; } break; //yellow light case 2: if (tLight.lights[i].lightType == TSTrafficLight.LightType.Yellow) { tLight.lights[i].lightTime = manager.yellowLightTime; Move <TSTrafficLight.TSLight>(tLight.lights, i, 2); t = 3; } break; //red light case 3: if (tLight.lights[i].lightType == TSTrafficLight.LightType.Red) { tLight.lights[i].lightTime = (manager.greenLightTime + manager.yellowLightTime) * (totalLights - 1 - currentLight); Move <TSTrafficLight.TSLight>(tLight.lights, i, 3); t = 4; } break; } } if (t == 4) { arranged = true; } } }
public void OnEnable() { defaultColor = GUI.color; tLight = (TSTrafficLight)target; if (tLight.manager == null) { tLight.manager = GameObject.FindObjectOfType(typeof(TSMainManager)) as TSMainManager; } }
/// <summary> /// Numbers the type of the of lights by. /// </summary> /// <returns>The of lights by type.</returns> int NumberOfLightsByType(TSTrafficLight tLight, TSTrafficLight.LightType lightType) { int result = 0; foreach (TSTrafficLight.TSLight light in tLight.lights) { if (light.lightType == lightType) { result++; } } return(result); }
/// <summary> /// Checks the and create missing lights. /// </summary> /// <param name="tLight">T light.</param> /// <param name="inBetween">If set to <c>true</c> in between.</param> void AssignLightsTimes(TSTrafficLight tLight, bool first, bool inBetween, int totalLights, int currentLight) { if (first) { AssignFirstLightTimes(tLight, totalLights); } else if (inBetween) { AssignMiddleLightTimes(tLight, totalLights, currentLight); } else if (!first) { AssignLastLightTimes(tLight, totalLights); } }
/// <summary> /// Removes the type of the lights by. /// </summary> /// <param name="tLight">T light.</param> /// <param name="lightType">Light type.</param> /// <param name="amount">Amount.</param> void RemoveLightsByType(TSTrafficLight tLight, TSTrafficLight.LightType lightType, int amount) { int result = 0; TSTrafficLight.TSLight light = null; for (int i = 0; i < tLight.lights.Count; i++) { light = tLight.lights[i]; if (result == amount) { break; } if (light.lightType == lightType) { tLight.lights.Remove(light); } result++; } }
void LightsOptions(TSTrafficLight tLight, int ii) { GUILayout.BeginHorizontal(EditorStyles.textField); GUILayout.BeginHorizontal(GUILayout.Width(250)); GUILayout.Space(5); GUILayout.BeginVertical(GUILayout.Width(100)); if (!hideDetails) { if (GUILayout.Button("Add new light")) { AddeNewLight(ref tLight); } GUILayout.Space(70); } GUILayout.Label("Traffic Light: " + tLight.name, GUILayout.Width(75 + tLight.name.Length * 6)); GUILayout.BeginHorizontal(); if (totalTime != null) { GUILayout.Label("Total time: " + totalTime[ii].ToString()); } else { UpdateLightsTimes(); } if (GUILayout.Button("Add Light")) { AddeNewLight(ref tLight); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.Space(5); for (int i = 0; i < tLight.lights.Count; i++) { if ((Application.isPlaying && tLight.lightToPlay == i) || (Application.isEditor && !Application.isPlaying)) { int index = tLight.lightToPlay; if (Application.isEditor && !Application.isPlaying) { index = i; } switch (tLight.lights[index].lightType) { case TSTrafficLight.LightType.Yellow: GUI.color = Color.yellow; break; case TSTrafficLight.LightType.Red: GUI.color = Color.red; break; case TSTrafficLight.LightType.Green: GUI.color = Color.green; break; } } else { GUI.color = defaultColor; } GUILayout.BeginVertical(EditorStyles.textField, GUILayout.Width(60)); GUI.color = defaultColor; GUILayout.BeginVertical(GUILayout.Width(30)); GUILayout.BeginHorizontal(); if (GUILayout.Button("<", EditorStyles.miniButton, GUILayout.Width(20)) && i != 0) { Move <TSTrafficLight.TSLight>(tLight.lights, i, i - 1); } if (GUILayout.Button(">", EditorStyles.miniButton, GUILayout.Width(20))) { Move <TSTrafficLight.TSLight>(tLight.lights, i, i + 1); } if (GUILayout.Button("L")) { tLight.lights[i].lightType++; if (tLight.lights[i].lightType > TSTrafficLight.LightType.NoLights) { tLight.lights[i].lightType = (TSTrafficLight.LightType) 0; } } GUILayout.EndHorizontal(); if (hideDetails) { GUILayout.BeginHorizontal(); GUILayout.Label("T", GUILayout.Width(10)); tLight.lights[i].lightTime = EditorGUILayout.FloatField(tLight.lights[i].lightTime, GUILayout.Width(35)); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); if (!hideDetails) { GUILayout.Label("Light " + tLight.lights[i].lightType + " " + i); if (GUILayout.Button("Delete", EditorStyles.miniButton, GUILayout.Width(80))) { tLight.lights.Remove(tLight.lights[i]); break; } GUILayout.BeginHorizontal(); GUILayout.Label("Light Type: "); tLight.lights[i].lightType = (TSTrafficLight.LightType)EditorGUILayout.EnumPopup(tLight.lights[i].lightType, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Mesh Renderer"); tLight.lights[i].lightMeshRenderer = (MeshRenderer)EditorGUILayout.ObjectField(tLight.lights[i].lightMeshRenderer, typeof(MeshRenderer), true, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Enable / Disable Renderer?"); tLight.lights[i].enableDisableRenderer = EditorGUILayout.Toggle(tLight.lights[i].enableDisableRenderer, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Optional GameObject"); tLight.lights[i].lightGameObject = (GameObject)EditorGUILayout.ObjectField(tLight.lights[i].lightGameObject, typeof(GameObject), true); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Texture"); tLight.lights[i].lightTexture = (Texture2D)EditorGUILayout.ObjectField(tLight.lights[i].lightTexture, typeof(Texture2D), false, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Shader Texture name"); tLight.lights[i].shaderTexturePropertyName = EditorGUILayout.TextField(tLight.lights[i].shaderTexturePropertyName, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Time"); tLight.lights[i].lightTime = EditorGUILayout.FloatField(tLight.lights[i].lightTime, GUILayout.Width(100)); GUILayout.EndHorizontal(); } GUILayout.Space(5); GUILayout.EndVertical(); GUILayout.Space(5); } GUILayout.EndHorizontal(); }
void AddeNewLight(ref TSTrafficLight tLight) { tLight.lights.Add(new TSTrafficLight.TSLight()); tLight.lights[tLight.lights.Count - 1].lightTime = 15; tLight.lights[tLight.lights.Count - 1].shaderTexturePropertyName = "_MainTex"; }