private void onZoneCompleted(ZoneController zoneController) { if (zoneController.ZoneModel.IsFinalZone) { Log.Info("World completed!"); handleGameCompleted(); return; } addPlayersToNextZone(zoneController.AllPlayersinZone); zoneController.Destroy(); }
private void addPlayersToNextZone(List <ServerPlayerModel> serverPlayerModels) { // TODO: determine zone. For now, first incomplete ZoneController zoneController = null; for (int z = 0; z < zoneControllers.Length; z++) { if (!worldModel.ZoneModels[z].IsCompleted) { zoneController = zoneControllers[z]; break; } } if (zoneController == null) { throw new Exception("Couldn't determine a starting zone."); } zoneController.AddPlayers(serverPlayerModels); }
public void StartGame(List <ServerPlayerModel> initialServerPlayerModels) { Log.InfoHeader("Starting Game"); // Build world and send load events. worldModel = worldBuilder.Build(initialServerPlayerModels, gameDifficultyType, NPC_TEAM_ID); zoneControllers = new ZoneController[worldModel.ZoneModels.Length]; for (int i = 0; i < zoneControllers.Length; i++) { zoneControllers[i] = new ZoneController(worldModel.ZoneModels[i]); zoneControllers[i].Completed += onZoneCompleted; } Log.Info("Built World: " + worldModel.ToString()); new SendLoadWorldEventsCMD(worldModel, initialServerPlayerModels, completedPlayers => { // Players who are able to finish loading the world are considered original players and can re-join for (int i = 0; i < initialServerPlayerModels.Count; i++) { originalPlayerIDToModel.Add(initialServerPlayerModels[i].PlayerID, initialServerPlayerModels[i]); } onPlayersLoadedWorld(completedPlayers); }).Execute(); }