예제 #1
0
#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);
    }
예제 #2
0
    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);
        }
    }
예제 #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;
        }