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))); }
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(); } }
public virtual string ChangeState(Controller.States state) { return(state.ToString()); // return our state as a string }