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"); }
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); }