Пример #1
0
        /// <summary>
        /// Creates FSM ready to begin editing. Or recreates it when ESC is pressed
        /// and the tool is canceled.
        /// </summary>
        /// <returns>The new FSM in the initial state.</returns>
        private Util.GenericFsm <State, Trigger> InitFiniteStateMachine()
        {
            var fsm = new Util.GenericFsm <State, Trigger>(State.Select);

            // From Select mode, user can either click a segment, or Esc/rightclick to quit
            fsm.Configure(State.Select)
            .OnEntry(this.OnEnterSelectState)
            .OnLeave(this.OnLeaveSelectState)
            .TransitionOnEvent(Trigger.SegmentClick, State.EditLaneArrows)
            .TransitionOnEvent(Trigger.RightMouseClick, State.ToolDisabled)
            .TransitionOnEvent(Trigger.EscapeKey, State.ToolDisabled);

            fsm.Configure(State.EditLaneArrows)
            .OnEntry(this.OnEnterEditorState)
            .OnLeave(this.OnLeaveEditorState)
            .TransitionOnEvent(Trigger.SegmentClick, State.EditLaneArrows)
            .TransitionOnEvent(Trigger.RightMouseClick, State.Select);
            // This transition is ignored because Esc disables the tool
            //   .TransitionOnEvent(Trigger.EscapeKey, State.Select);

            fsm.Configure(State.ToolDisabled)
            .OnEntry(
                () => {
                // We are done here, leave the tool.
                // This will result in this.DeactivateTool being called.
                // MainTool.SetToolMode(ToolMode.None);
                ModUI.Instance.MainMenu.ClickToolButton(ToolMode.LaneArrows);
            });

            return(fsm);
        }
Пример #2
0
 /// <summary>Cleans up when tool is deactivated or user switched to another tool.</summary>
 public override void DeactivateTool()
 {
     Log._Debug("LaneArrow: Deactivated tool");
     DestroyToolWindow();
     SelectedNodeId    = 0;
     SelectedSegmentId = 0;
     fsm_ = null;
 }
Пример #3
0
 public LaneArrowTool(TrafficManagerTool mainTool)
     : base(mainTool)
 {
     fsm_ = new Util.GenericFsm <State, Trigger>(State.Select);
 }
Пример #4
0
 /// <summary>Resets tool into its initial state for new use.</summary>
 public override void ActivateTool()
 {
     Log._Debug("LaneArrow: Activated tool");
     fsm_ = InitFiniteStateMachine();
     this.OnEnterSelectState(); // FSM does not call enter on initial state
 }