示例#1
0
        public Result <Controller> Control(Node node)
        {
            if (TryGet(node, out var controller))
            {
                return(controller);
            }

            var count   = 0;
            var nodes   = new Dictionary <Node, IRunner>();
            var runners = new Dictionary <IRunner, int>();
            var states  = Array.Empty <Controller.States>();
            var root    = node
                          .Descend(child =>
            {
                if (child.Value is IWrapper)
                {
                    return(child);
                }
                var index = count++;
                return(child
                       .Wrap(new Map(runner => { runners[runner] = index; return runner; }))
                       .Wrap(new State(() => states[index]))
                       .Wrap(new Map(runner => { runners[runner] = index; return runner; })));
            })
                          .Resolve()
                          .Wrap(new Root())
                          .Descend(child => child.Wrap(new Map(runner => nodes[child] = runner)));

            states = new Controller.States[count];

            // TODO: put analysis back in when it works properly
            // if (_world.Analyze(root, root).TryFailure(out var failure)) return failure;
            return(_world.Build(root, root)
                   .Map(runner => _controllers[node] = new Controller((root, runner), _world, nodes, runners, states)));
        }
示例#2
0
 void StateChanged(Controller.States state)
 {
     if (state == Controller.States.Running)
     {
         currentAverage          = 0;
         lastTime                = DateTime.Now;
         NextPerSecondLabel.Text = "n/a";
         lastChangedCount        = 0;
         firstTick               = true;
         timer.Start();
     }
     else
     {
         timer.Stop();
     }
 }
示例#3
0
 public virtual string ChangeState(Controller.States state)
 {
     return(state.ToString());    // return our state as a string
 }