private bool SimpleManualSegmentLightMode(int segmentId, Vector3 screenPos, float lightWidth, float pedestrianWidth,
                                                  float zoom, float lightHeight, CustomSegmentLight segmentDict, bool hoveredSegment)
        {
            SetAlpha(segmentId, 3);

            var myRect4 =
                new Rect(screenPos.x - lightWidth / 2 - lightWidth - pedestrianWidth + 5f * zoom,
                         screenPos.y - lightHeight / 2, lightWidth, lightHeight);

            switch (segmentDict.LightMain)
            {
            case RoadBaseAI.TrafficLightState.Green:
                GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.GreenLightTexture2D);
                break;

            case RoadBaseAI.TrafficLightState.Red:
                GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.RedLightTexture2D);
                break;
            }

            if (!myRect4.Contains(Event.current.mousePosition))
            {
                return(hoveredSegment);
            }
            _hoveredButton[0] = segmentId;
            _hoveredButton[1] = 3;

            if (!MainTool.CheckClicked())
            {
                return(true);
            }
            segmentDict.ChangeLightMain();
            return(true);
        }
        private bool ForwardArrowLightMode(int segmentId, float lightWidth, bool hasRightSegment,
                                           Vector3 screenPos, float pedestrianWidth, float zoom, float lightHeight, CustomSegmentLight segmentDict,
                                           bool hoveredSegment)
        {
            SetAlpha(segmentId, 4);

            var offsetLight = lightWidth;

            if (hasRightSegment)
            {
                offsetLight += lightWidth;
            }

            var myRect6 =
                new Rect(screenPos.x - lightWidth / 2 - offsetLight - pedestrianWidth + 5f * zoom,
                         screenPos.y - lightHeight / 2, lightWidth, lightHeight);

            switch (segmentDict.LightMain)
            {
            case RoadBaseAI.TrafficLightState.Green:
                GUI.DrawTexture(myRect6, TrafficLightToolTextureResources.GreenLightStraightTexture2D);
                break;

            case RoadBaseAI.TrafficLightState.Red:
                GUI.DrawTexture(myRect6, TrafficLightToolTextureResources.RedLightStraightTexture2D);
                break;
            }

            if (!myRect6.Contains(Event.current.mousePosition))
            {
                return(hoveredSegment);
            }

            _hoveredButton[0] = segmentId;
            _hoveredButton[1] = 4;

            if (!MainTool.CheckClicked())
            {
                return(true);
            }
            segmentDict.ChangeLightMain();
            return(true);
        }
        public object SetNodeState(int nodeIndex, int segIndex, RoadBaseAI.TrafficLightState vehicleState, RoadBaseAI.TrafficLightState pedestrianState)
        {
            ushort nodeId = SelectNodeId(nodeIndex);
            ushort segId  = NetManager.instance.m_nodes.m_buffer[nodeId].GetSegment(segIndex);

            CustomSegmentLights csls = CustomTrafficLights.GetSegmentLights(nodeId, segId);

            if (csls != null)
            {
                foreach (ExtVehicleType evt in csls.VehicleTypes)
                {
                    CustomSegmentLight csl = csls.GetCustomLight(evt);
                    if (csl != null)
                    {
                        RoadBaseAI.TrafficLightState currentState = csl.GetVisualLightState();
                        if (currentState != vehicleState)
                        {
                            if (vehicleState != csl.GetLightMain())
                            {
                                csl.ChangeLightMain();
                            }
                            if (vehicleState != csl.GetLightLeft())
                            {
                                csl.ChangeLightLeft();
                            }
                            if (vehicleState != csl.GetLightRight())
                            {
                                csl.ChangeLightRight();
                            }
                        }
                    }
                }
            }
            else
            {
                return(false);
            }

            return(true);
        }
        private bool RightForwardLSegmentLightMode(int segmentId, Vector3 screenPos, float lightWidth, float pedestrianWidth,
                                                   float zoom, float lightHeight, bool hasForwardSegment, bool hasLeftSegment, CustomSegmentLight segmentDict,
                                                   bool hasRightSegment, bool hoveredSegment)
        {
            SetAlpha(segmentId, 3);

            var myRect4 = new Rect(screenPos.x - lightWidth / 2 - lightWidth * 2 - pedestrianWidth + 5f * zoom,
                                   screenPos.y - lightHeight / 2, lightWidth, lightHeight);

            if (hasForwardSegment && hasLeftSegment)
            {
                switch (segmentDict.LightLeft)
                {
                case RoadBaseAI.TrafficLightState.Green:
                    GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.GreenLightForwardLeftTexture2D);
                    break;

                case RoadBaseAI.TrafficLightState.Red:
                    GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.RedLightForwardLeftTexture2D);
                    break;
                }
            }
            else if (!hasLeftSegment)
            {
                if (!hasRightSegment)
                {
                    myRect4 = new Rect(screenPos.x - lightWidth / 2 - lightWidth - pedestrianWidth + 5f * zoom,
                                       screenPos.y - lightHeight / 2, lightWidth, lightHeight);
                }

                switch (segmentDict.LightMain)
                {
                case RoadBaseAI.TrafficLightState.Green:
                    GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.GreenLightStraightTexture2D);
                    break;

                case RoadBaseAI.TrafficLightState.Red:
                    GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.RedLightStraightTexture2D);
                    break;
                }
            }
            else
            {
                if (!hasRightSegment)
                {
                    myRect4 = new Rect(screenPos.x - lightWidth / 2 - lightWidth - pedestrianWidth + 5f * zoom,
                                       screenPos.y - lightHeight / 2, lightWidth, lightHeight);
                }

                switch (segmentDict.LightMain)
                {
                case RoadBaseAI.TrafficLightState.Green:
                    GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.GreenLightLeftTexture2D);
                    break;

                case RoadBaseAI.TrafficLightState.Red:
                    GUI.DrawTexture(myRect4, TrafficLightToolTextureResources.RedLightLeftTexture2D);
                    break;
                }
            }


            if (myRect4.Contains(Event.current.mousePosition))
            {
                _hoveredButton[0] = segmentId;
                _hoveredButton[1] = 3;
                hoveredSegment    = true;

                if (MainTool.CheckClicked())
                {
                    segmentDict.ChangeLightMain();
                }
            }

            var guiColor = GUI.color;

            // right arrow light
            if (hasRightSegment)
            {
                guiColor.a = _hoveredButton[0] == segmentId && _hoveredButton[1] == 4 ? 0.92f : 0.6f;
            }

            GUI.color = guiColor;

            var myRect5 =
                new Rect(screenPos.x - lightWidth / 2 - lightWidth - pedestrianWidth + 5f * zoom,
                         screenPos.y - lightHeight / 2, lightWidth, lightHeight);

            switch (segmentDict.LightRight)
            {
            case RoadBaseAI.TrafficLightState.Green:
                GUI.DrawTexture(myRect5, TrafficLightToolTextureResources.GreenLightRightTexture2D);
                break;

            case RoadBaseAI.TrafficLightState.Red:
                GUI.DrawTexture(myRect5, TrafficLightToolTextureResources.RedLightRightTexture2D);
                break;
            }


            if (!myRect5.Contains(Event.current.mousePosition))
            {
                return(hoveredSegment);
            }

            _hoveredButton[0] = segmentId;
            _hoveredButton[1] = 4;

            if (!MainTool.CheckClicked())
            {
                return(true);
            }
            segmentDict.ChangeLightRight();
            return(true);
        }