Esempio n. 1
0
        void InitializeActor(Competitions competitions, string id, ActorFactory factory, Func <string, IActor, IController> controllerFactory)
        {
            Debugger.Log("Actor " + id + " initialization");
            Debugger.Log("Creating actor");
            //var factory = competitions.Logic.Actors[id];
            var e             = factory.CreateActor();
            var actorObjectId = IdGenerator.CreateNewId(e);

            Debugger.Log("Complete: actor. Creating manager");
            //var manager = competitions.Manager.CreateActorManagerFor(e);
            var rules        = factory.CreateRules();
            var preprocessor = factory.CreateCommandFilterSet();

            e.Initialize(/*manager, */ this, rules, preprocessor, actorObjectId, id);
            Debugger.Log("Comlete: manager creation. Initializing manager");
            Compatibility.Check <IActor>(this, e);
            Debugger.Log("Comlete: manager initialization. Creating actor body");

            Debugger.Log("Complete: body. Starting controller");

            var controller = controllerFactory(e.ControllerId, e);

            controller.Initialize(e);

            var controlTrigger = new ControlTrigger(controller, e, preprocessor);

            e.ControlTrigger = controlTrigger;

            Clocks.AddTrigger(controlTrigger);
            actors.Add(e);
            Debugger.Log("Actor " + id + " is initialized");
        }
Esempio n. 2
0
        public static ActorFactory FromRobot <TWorld, TSensorsData, TCommand, TRules>
            (Robot <TWorld, TSensorsData, TCommand, TRules> etalonRobot, IRules rules)
        //where TActorManager : IActorManager
            where TWorld : IWorld
            where TSensorsData : new()
            where TCommand : ICommand
            where TRules : IRules
        {
            var factory = new ActorFactory();

            factory.CreateNetworkController  = () => new NetworkController <TCommand>();
            factory.CreateKeyboardController = () => new KeyboardController <TCommand>();
            factory.CreateCommandFilterSet   = () => new CommandFilterSet();
            factory.CreateRules = () => rules;

            factory.CreateActor =
                Expression.Lambda <Func <IActor> >(
                    Expression.Convert(
                        Expression.New(etalonRobot.GetType()),
                        typeof(IActor))).Compile();

            return(factory);
        }