Esempio n. 1
0
        public override void LoadContent()
        {
            base.LoadContent();
            var backgroundSize = new Vector2(6f / 3.508f * 1.1f * GameConstants.ScreenHeight, 1.1f * GameConstants.ScreenHeight);

            AddEntity(new Entity(this, EntityType.Game, new SpriteComponent("background", backgroundSize, new Vector2(0.5f, 0.5f), layerDepth: -1.0f)));
            AddEntity(new Entity(this, EntityType.Game, new SpriteComponent("trees_border", backgroundSize, new Vector2(0.5f, 0.5f), layerDepth: 0.9f)));

            // UI
            var buttonBackground = new HUDComponent("button_bg", new Vector2(1.2f, 0.2f), offset: new Vector2(0.5f, 0f), origin: new Vector2(0.5f, 0f));

            AddEntity(new Entity(this, EntityType.UI, buttonBackground,
                                 new HUDTextComponent(MainFont, 0.1f, "Select a game mode:",
                                                      offset: buttonBackground.LocalPointToWorldPoint(new Vector2(0.5f, 0.5f)),
                                                      origin: new Vector2(0.5f, 0.5f))
                                 ));

            HUDListEntity levelList = new HUDListEntity(this, new Vector2(0.5f, 0.5f), menuEntries: levels.Select(l => new HUDListEntity.ListEntry(l.Item2, item =>
            {
                selectedLevel = l.Item1;
                Dispatcher.NextFrame(StartLevel);
            })).ToArray());

            AddEntity(levelList);

            AddEntity(new Entity(this, EntityType.LayerIndependent, new CenterCameraComponent(Game.Camera)));
        }
Esempio n. 2
0
        public override void LoadContent()
        {
            base.LoadContent();

            Game.EngineComponents.Get <AudioManager>().PreloadSoundEffects("Audio/countDownLong", "Audio/countDownShort");

            Game.CurrentGameMode.ClearScore();

            AddPlayersWithBarns(locs, rotations);

            // Border trees
            Entity border;

            AddEntity(border = new Entity(this, EntityType.Game, new Vector2(0, 0),
                                          new SpriteComponent("joinscreen_outerBorder", new Vector2(screenWidth, screenWidth / 3.84f * 2.245f), new Vector2(0.5f, 0.5f), layerDepth: 0.9f)
                                          ));

            var triangulated = Triangulate.ConvexPartition(GameConstants.BoundingGameFieldTop, TriangulationAlgorithm.Earclip);

            triangulated.AddRange(Triangulate.ConvexPartition(GameConstants.BoundingGameFieldRight, TriangulationAlgorithm.Earclip));
            triangulated.AddRange(Triangulate.ConvexPartition(GameConstants.BoundingGameFieldBottom, TriangulationAlgorithm.Earclip));
            triangulated.AddRange(Triangulate.ConvexPartition(GameConstants.BoundingGameFieldLeft, TriangulationAlgorithm.Earclip));
            var fixtureList = FixtureFactory.AttachCompoundPolygon(triangulated, 1, border.Body);

            border.AddComponent(new PhysicsComponent(fixtureList[0].Shape));

            // Background
            AddEntity(new Entity(this, EntityType.Game, new Vector2(0, 0),
                                 // src image 6000x3508
                                 new SpriteComponent("background", new Vector2(screenWidth, screenWidth / 3.84f * 2.245f), new Vector2(0.5f, 0.5f), layerDepth: -1.0f)
                                 ));


            // HUD
            // src image 1365x460
            if (spawnAnyUI)
            {
                timeComponentBackground = new HUDComponent("timer_bg", new Vector2(1.365f / 0.46f * 0.1f, 1f * 0.1f), new Vector2(0.5f, 0f));

                this.timeComponent100 = new HUDTextComponent(MainFont, 0.07f, "", color: countdownColor,
                                                             offset: timeComponentBackground.LocalPointToWorldPoint(new Vector2(0.35f, 0.5f)),
                                                             origin: new Vector2(0.5f, 0.5f)
                                                             );
                this.timeComponent10 = new HUDTextComponent(MainFont, 0.07f, "", color: countdownColor,
                                                            offset: timeComponentBackground.LocalPointToWorldPoint(new Vector2(0.425f, 0.5f)),
                                                            origin: new Vector2(0.5f, 0.5f)
                                                            );
                this.timeComponent1 = new HUDTextComponent(MainFont, 0.07f, "", color: countdownColor,
                                                           offset: timeComponentBackground.LocalPointToWorldPoint(new Vector2(0.5f, 0.5f)),
                                                           origin: new Vector2(0.5f, 0.5f)
                                                           );
                AddEntity(new Entity(this, EntityType.UI, new Vector2(0.5f, 0f),
                                     timeComponentBackground, timeComponent100, timeComponent10, timeComponent1
                                     ));

                if (!IsCountdownRunning)
                {
                    timeComponentBackground.Opacity    =
                        timeComponent100.Opacity       =
                            timeComponent10.Opacity    =
                                timeComponent1.Opacity = 0f;
                }

                UpdateCountdown(0);

                // Add pause overlay
                AddEntity(new Entity(this, EntityType.UI, pauseOverlayComponents.AddAndReturn(new HUDComponent(Game.Debug.DebugRectangle, Vector2.One, layerDepth: 0.99f)
                {
                    Color = Color.Black,
                    MaintainAspectRation = false,
                    OnVirtualUIScreen    = false,
                })));

                AddEntity(new Entity(this, EntityType.UI, new Vector2(0.5f, 0.25f),
                                     pauseTextOverlayComponents.AddAndReturn(new HUDTextComponent(MainFont, 0.2f, "Game Paused", origin: new Vector2(0.5f, 0.5f), layerDepth: 1f))));

                pauseTextOverlayComponents.AddRange(
                    AddEntity(pauseMenuList = new HUDListEntity(this, new Vector2(0.5f, 0.5f), layerDepth: 1f,
                                                                menuEntries: new[] { new HUDListEntity.ListEntry("Resume", TogglePause), new HUDListEntity.ListEntry("Rejoin", BackToJoinScreen)
                                                                                     , new HUDListEntity.ListEntry("Back to main menu", BackToMainMenu) })
                {
                    Enabled = false
                })
                    .GetAllComponents <HUDTextComponent>().ToList());

                // make overlay invisible
                // [FOREACH PERFORMANCE] Should not allocate garbage
                pauseOverlayComponents.ForEach(c => c.Opacity = 0f);
                // [FOREACH PERFORMANCE] Should not allocate garbage
                pauseTextOverlayComponents.ForEach(c => c.Opacity = 0f);

                // Add pause controls
                // [FOREACH PERFORMANCE] Should not allocate garbage
                foreach (var playerInfo in Game.CurrentGameMode.PlayerInfos)
                {
                    if (playerInfo.IsKeyboardPlayer)
                    {
                        AddEntity(new Entity(this, EntityType.LayerIndependent, new InputComponent(new InputMapping(i => InputFunctions.KeyboardPause(i), (f) => TogglePause(null)))));
                    }
                    else
                    {
                        AddEntity(new Entity(this, EntityType.LayerIndependent, new InputComponent(playerInfo.GamepadIndex,
                                                                                                   new InputMapping(i => InputFunctions.Pause(i), (f) => TogglePause(null)),
                                                                                                   new InputMapping(i => InputFunctions.StartCountdown(i), (f) => StartCountown())
                                                                                                   )));
                    }
                }

                var playerInfos = Game.CurrentGameMode.PlayerInfos;
                var colors      = ((PlayerColors[])Enum.GetValues(typeof(PlayerColors)));

                initialCountdownComponent = new HUDTextComponent(MainFont, 0.25f, Game.CurrentGameMode.PlayerMode == PlayerMode.TwoVsTwo ? "vs" : "free4all", origin: new Vector2(0.5f, 0.5f));
                playerName1Component      = new HUDTextComponent(MainFont, 0.15f, playerInfos[0].Name, color: colors[0].GetColor(), origin: new Vector2(0f, 0.5f), offset: new Vector2(-0.25f, -0.25f));
                playerName2Component      = new HUDTextComponent(MainFont, 0.15f, playerInfos.Count > 1 ? playerInfos[1].Name : "name2", color: colors[1].GetColor(), origin: new Vector2(0f, 0.5f), offset: new Vector2(-0.25f, 0.25f));
                playerName3Component      = new HUDTextComponent(MainFont, 0.15f, playerInfos.Count > 2 ? playerInfos[2].Name : "name3", color: colors[2].GetColor(), origin: new Vector2(1f, 0.5f), offset: new Vector2(0.25f, -0.25f));
                playerName4Component      = new HUDTextComponent(MainFont, 0.15f, playerInfos.Count > 3 ? playerInfos[3].Name : "name4", color: colors[3].GetColor(), origin: new Vector2(1f, 0.5f), offset: new Vector2(0.25f, 0.25f));
                separatorTeam1Component   = new HUDTextComponent(MainFont, 0.15f, "&", origin: new Vector2(0.5f, 0.5f), offset: new Vector2(0f, -0.25f));
                separatorTeam2Component   = new HUDTextComponent(MainFont, 0.15f, "&", origin: new Vector2(0.5f, 0.5f), offset: new Vector2(0f, 0.25f));
                Entity countdownEntity;
                AddEntity(countdownEntity = new Entity(this, EntityType.UI, new Vector2(0.5f, 0.5f), initialCountdownComponent));

                if (Game.CurrentGameMode.PlayerMode == PlayerMode.TwoVsTwo)
                {
                    countdownEntity.AddComponent(playerName1Component);
                    countdownEntity.AddComponent(playerName2Component);
                    countdownEntity.AddComponent(playerName3Component);
                    countdownEntity.AddComponent(playerName4Component);
                    countdownEntity.AddComponent(separatorTeam1Component);
                    countdownEntity.AddComponent(separatorTeam2Component);
                }
            }
            // Camera director
            AddEntity(new Entity(this, EntityType.LayerIndependent, new CameraDirectorComponent(playerEntities, Game.Camera)));
        }
Esempio n. 3
0
        public override void LoadContent()
        {
            base.LoadContent();

            var backgroundSize = new Vector2(6f / 3.508f * 1.1f * GameConstants.ScreenHeight, 1.1f * GameConstants.ScreenHeight);

            AddEntity(new Entity(this, EntityType.Game, new SpriteComponent("background", backgroundSize, new Vector2(0.5f, 0.5f), layerDepth: -1.0f)));
            AddEntity(new Entity(this, EntityType.Game, new SpriteComponent("trees_border", backgroundSize, new Vector2(0.5f, 0.5f), layerDepth: 0.9f)));

            // UI
            var buttonBackground = new HUDComponent("overlayInstructionBox", new Vector2(1.2f, 0.2f), offset: new Vector2(0.5f, 0.05f), origin: new Vector2(0.5f, 0.05f));

            AddEntity(new Entity(this, EntityType.UI, buttonBackground,
                                 new HUDTextComponent(MainFont, 0.1f, "Game mode",
                                                      offset: buttonBackground.LocalPointToWorldPoint(new Vector2(0.5f, 0.5f)),
                                                      origin: new Vector2(0.5f, 0.5f), layerDepth: 0.1f)
                                 ));

            // Player mode selection
            playerMode2vs2 = new HUDComponent("gameMode_2VS2_notselected", new Vector2(0.5f, 0.32f), origin: new Vector2(0.5f, 0.5f), offset: new Vector2(-0.16f, 0))
            {
                Opacity = 0f
            };
            playerMode2vs2Selected     = new HUDComponent("gameMode_2VS2_selected", new Vector2(0.5f, 0.32f), origin: new Vector2(0.5f, 0.5f), offset: new Vector2(-0.16f, 0));
            playerModeFree4All         = new HUDComponent("gameMode_freeForAll_notselected", new Vector2(0.5f, 0.32f), origin: new Vector2(0.5f, 0.5f), offset: new Vector2(0.16f, 0));
            playerModeFree4AllSelected = new HUDComponent("gameMode_freeForAll_selected", new Vector2(0.5f, 0.32f), origin: new Vector2(0.5f, 0.5f), offset: new Vector2(0.16f, 0))
            {
                Opacity = 0f
            };

            AddEntity(new Entity(this, EntityType.UI, new Vector2(0.5f, 0.3f), playerMode2vs2, playerModeFree4All, playerMode2vs2Selected, playerModeFree4AllSelected));


            // Game mode selection
            gameModeWaves = new HUDTextComponent(MainFont, 0.05f, "WAVES", origin: new Vector2(0.5f, 0.5f), offset: new Vector2(-0.11f, 0), color: Color.Yellow)
            {
                Opacity = InActiveOpacity
            };
            gameModeBigHerd = new HUDTextComponent(MainFont, 0.05f, "BIG HERD", origin: new Vector2(0.5f, 0.5f), offset: new Vector2(0.11f, 0))
            {
                Opacity = InActiveOpacity
            };

            AddEntity(new Entity(this, EntityType.UI, new Vector2(0.5f, 0.55f), gameModeWaves, gameModeBigHerd));

            // Runtime mode selection
            runtimeModeOptions = Enumerable.Range(0, 4).Select(i => new HUDTextComponent(MainFont, 0.05f, "", origin: new Vector2(0.5f, 0.5f),
                                                                                         offset: new Vector2(-0.225f, 0) + new Vector2(0.15f, 0) * i)
            {
                Opacity = InActiveOpacity, Color = i == 0 ? Color.Yellow : Color.Wheat
            }).ToArray();
            UpdateRuntimeTexts();
            AddEntity(new Entity(this, EntityType.UI, new Vector2(0.5f, 0.65f), runtimeModeOptions));

            // CONTINUE TEXT
            continueText = new HUDTextComponent(MainFont, 0.05f, "press A to continue", origin: new Vector2(0.5f, 0.5f))
            {
                Opacity = 0
            };
            AddEntity(new Entity(this, EntityType.UI, new Vector2(0.5f, 0.8f), continueText));
            continueTextAnimation = Dispatcher.AddAnimation(Animation.Get(0, 1, 1.5f, true, val => continueText.Opacity = val, EasingFunctions.ToLoop(EasingFunctions.QuadIn))
                                                            .Set(a => a.IsRunning = false));


            // add controls
            var layerIndependent = new Entity(this, EntityType.LayerIndependent, new CenterCameraComponent(Game.Camera));

            for (int i = 0; i < 4; i++)
            {
                layerIndependent.AddComponent(new InputComponent(i,
                                                                 new InputMapping(f => InputFunctions.MenuSelect(f) || InputFunctions.MenuDown(f), OnNextPressed),
                                                                 new InputMapping(f => InputFunctions.MenuBack(f) || InputFunctions.MenuUp(f), OnBackPressed),
                                                                 new InputMapping(f => InputFunctions.MenuStart(f), OnStartPressed),
                                                                 new InputMapping(f => InputFunctions.MenuLeft(f), OnLeftPressed),
                                                                 new InputMapping(f => InputFunctions.MenuRight(f), OnRightPressed)));
            }


            layerIndependent.AddComponent(new InputComponent(
                                              new InputMapping(f => InputFunctions.KeyboardMenuSelect(f) || InputFunctions.KeyboardMenuDown(f), OnNextPressed),
                                              new InputMapping(f => InputFunctions.KeyboardMenuBack(f) || InputFunctions.KeyboardMenuUp(f), OnBackPressed),
                                              new InputMapping(f => InputFunctions.KeyboardMenuStart(f), OnStartPressed),
                                              new InputMapping(f => InputFunctions.KeyboardMenuLeft(f), OnLeftPressed),
                                              new InputMapping(f => InputFunctions.KeyboardMenuRight(f), OnRightPressed)));
            AddEntity(layerIndependent);

            GoToMenuState(MenuState.ChoosePlayerMode);


            this.TransitionIn();
        }