/// <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;
            }
        }
    }
예제 #5
0
 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";
 }