/// <summary> /// Starts the engine by providing the model and all its view and controllers with each their own thread. /// All actions queued to the engine is executed before the threads are started. /// </summary> /// <param name="model">The model of the engine</param> /// <param name="views">The views of the engine</param> /// <param name="controllers">The controllers of the engine</param> public void StartEngine(XmasModel model,ICollection<XmasView> views, ICollection<XmasController> controllers) { if (modelThread != null) { throw new EngineAlreadyStartedException(); } XmasFactory fact = model.Factory; Thread modelt = fact.CreateThread(model.Start); model.Initialize(); int i = 1; foreach (var xmasView in views) { model.AddActor(xmasView); xmasView.Initialize(); Thread viewt = fact.CreateThread(xmasView.Start); viewt.Name = "View Thread "+i; i++; viewThreads.Add(viewt); } i = 1; foreach (var xmasController in controllers) { model.AddActor(xmasController); xmasController.Initialize(); Thread cont = fact.CreateThread(xmasController.Start); cont.Name = xmasController.ThreadName()+" "+ i; i++; controllerThreads.Add(cont); } modelt.Name = "Model Thread"; modelThread = modelt; model.ActionManager.ExecuteActions(); modelt.Start(); foreach (var viewThread in viewThreads) { viewThread.Start(); } foreach (var controllerThread in controllerThreads) { controllerThread.Start(); } }
// Use this for initialization void Start() { engmodel = Engine.EngineModel; //Start turn manager TurnManager turnManager = new TurnManager(); engmodel.AddActor(turnManager); AbilityManager abilityManager = new AbilityManager(); engmodel.AddActor(abilityManager); engmodel.EventManager.Register(new Trigger<PlayerJoinedEvent>(OnPlayerJoin)); Player[] players = Settings.LocalPlayers; foreach (Player p in players) { engmodel.ActionManager.Queue(new PlayerJoinAction(p)); } }