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;
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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;
        }