public static PlayerView Create(PlayerInfo playerInfo, CharacterInfo selectedCharacter, IScreenHoncho screenHoncho, ContentManager viewContentLoader) { Type viewType = null; object[] ctorParams = null; switch (playerInfo.Type) { case PlayerInfo.PlayerType.Local: viewType = screenHoncho.HumanViewType; ctorParams = new object[] { playerInfo, selectedCharacter, viewContentLoader }; break; case PlayerInfo.PlayerType.Remote: viewType = screenHoncho.RemoteViewType; ctorParams = new object[] { playerInfo, selectedCharacter }; break; case PlayerInfo.PlayerType.Bot: viewType = screenHoncho.BotViewType; ctorParams = new object[] { playerInfo, selectedCharacter }; break; } return Activator.CreateInstance(viewType, ctorParams) as PlayerView; }
public static PlayerView Create(PlayerInfo playerInfo, CharacterInfo selectedCharacter, IScreenHoncho screenHoncho, ContentManager viewContentLoader) { Type viewType = null; object[] ctorParams = null; switch (playerInfo.Type) { case PlayerInfo.PlayerType.Local: viewType = screenHoncho.HumanViewType; ctorParams = new object[] { playerInfo, selectedCharacter, viewContentLoader }; break; case PlayerInfo.PlayerType.Remote: viewType = screenHoncho.RemoteViewType; ctorParams = new object[] { playerInfo, selectedCharacter }; break; case PlayerInfo.PlayerType.Bot: viewType = screenHoncho.BotViewType; ctorParams = new object[] { playerInfo, selectedCharacter }; break; } return(Activator.CreateInstance(viewType, ctorParams) as PlayerView); }
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; }