#pragma warning restore 0414 private void Start() { _prototype.gameObject.SetActive(false); GameObject.DontDestroyOnLoad(this.gameObject); _factory = new PlayerViewFactory(_viewParent, _prototype); _model = new PlayerListModel(); _ctrl = new PlayerCtrl(_model, _factory); }
public PlayerCtrl(PlayerListModel model, PlayerViewFactory factory) { _model = model; _factory = factory; if (_model.Count == 0) { PlayerModel defaultPlayer = new PlayerModel() { Color = 0, Name = "Hooman", Team = 0, Type = PlayerTypeEnum.Human }; _model.Add(defaultPlayer); } _view = new List <IPlayerView>(_model.Count); for (int p = 0; p < _model.Count; ++p) { PlayerModel player = _model[p]; IPlayerView pview = _factory.CreateNewPlayer(); _view.Add(pview); Link(p, player, pview); } }
public override void LoadContent() { mScene = new Scene(); mActorMan = new ActorManager(mViews); GameResources.ActorManager = mActorMan; LevelManifest manifest; using (ContentManager manifestLoader = new ContentManager(SharedResources.Game.Services, "Content")) { manifest = manifestLoader.Load <LevelManifest>(mRequest.LevelName); manifestLoader.Unload(); // a LevelManifest does not use any Disposable resources, so this is ok. } // The IScreenHoncho tells this gameplay screen how to set up the PlayerViews and DrawSegments required to play this level IScreenHoncho screenHoncho = Activator.CreateInstance(Type.GetType(manifest.ScreenHonchoTypeName)) as IScreenHoncho; mViewContentLoader = new ContentManager(SharedResources.Game.Services, "Content"); foreach (PlayerInfo player in GameResources.PlaySession.Players) { mViews.Add(PlayerViewFactory.Create(player, mRequest.CharacterSelections[player.PlayerId], screenHoncho, mViewContentLoader)); } // Determine screen layout and create DrawSegments if (screenHoncho.PlayersUseSeparateViewports) { switch (GameResources.PlaySession.LocalPlayers.Count) { case 1: mScreenLayout = ViewportLayout.FullScreen; break; case 2: mScreenLayout = GameOptions.PreferHorizontalSplit ? ViewportLayout.HorizontalSplit : ViewportLayout.VerticalSplit; break; case 3: case 4: mScreenLayout = ViewportLayout.FourWaySplit; break; default: throw new InvalidOperationException("Unsupported number of local players."); } foreach (int playerId in GameResources.PlaySession.LocalPlayers.Keys) { HumanView playerView = mViews.Single(v => v.PlayerId == playerId) as HumanView; ICameraProvider cameraPlayerView = playerView as ICameraProvider; if (cameraPlayerView == null) { throw new LevelManifestException("When IScreenHoncho.PlayersUseSeparateViewports is true, HumanViews must implement the ICameraProvider interface."); } DrawSegment ds = new DrawSegment(mScene, cameraPlayerView.Camera); mDrawSegments.Add(ds); playerView.DrawSegment = ds; } } else { mScreenLayout = ViewportLayout.FullScreen; DrawSegment ds = new DrawSegment(mScene); mDrawSegments.Add(ds); foreach (int playerId in GameResources.PlaySession.LocalPlayers.Keys) { HumanView playerView = mViews.Single(v => v.PlayerId == playerId) as HumanView; playerView.DrawSegment = ds; } } // TODO: P3: Make sure all non-local players are connected mScene.Load(); mActorMan.LoadContent(manifest); // TODO: P3: Make sure all remote clients have loaded their game. foreach (PlayerView view in mViews) { view.Load(); } GameResources.LoadNewLevelDelegate = LoadNewLevel; SharedResources.Game.GraphicsDevice.DeviceLost += DeviceLostHandler; SharedResources.Game.GraphicsDevice.DeviceResetting += DeviceResettingHandler; SharedResources.Game.GraphicsDevice.DeviceReset += DeviceResetHandler; }