public GameOverScene(IServiceProvider serviceProvider)
        {
            ServiceProvider = serviceProvider;
            Entities        = new List <IEntity>();

            EntityFactory = new MenuEntityFactory(this);

            LoadImages();
        }
Example #2
0
        private Vector2 ToWorldCoordinate(GameWindow gameWindow, IServiceProvider serviceProvider, Vector2 position)
        {
            var mapService = serviceProvider.GetService <IMapService>();

            if (gameWindow.Height > gameWindow.Width)
            {
                position *= new Vector2(1f, 1 / ((float)gameWindow.Width / gameWindow.Height));
            }
            else
            {
                position *= new Vector2(1 / ((float)gameWindow.Height / gameWindow.Width), 1f);
            }

            if (!serviceProvider.GetService <IGameStateService>().Running)
            {
                var windowAspect = (float)gameWindow.Width / gameWindow.Height;

                if (windowAspect > 1)
                {
                    position *= new Vector2((float)gameWindow.Height / gameWindow.Width, -1f);
                }
                else
                {
                    position *= new Vector2(1f, -(float)gameWindow.Width / gameWindow.Height);
                }
            }
            else
            {
                var windowAspect = (float)gameWindow.Width / gameWindow.Height;
                var mapAspect    = (float)mapService.Width /
                                   mapService.Height;
                if (windowAspect > 1)
                {
                    position -= new Vector2(-windowAspect, 1);
                    position *= new Vector2(1 / (Math.Min(windowAspect, mapAspect) / mapService.Width), 1 / (Math.Min(windowAspect, mapAspect) / mapService.Width));
                }
                else
                {
                    position -= new Vector2(-1, 1 / windowAspect);
                    position *= new Vector2(1 / (Math.Min(1 / windowAspect, 1 / mapAspect) / mapService.Height), 1 / (Math.Min(1 / windowAspect, 1 / mapAspect) / mapService.Height));
                }

                position *= new Vector2(1 / 2f, 1 / -2f);

                var widthDiff  = (windowAspect * mapService.Height) - mapService.Width;
                var heightDiff = ((1 / windowAspect) * mapService.Width) - mapService.Height;
                position -= new Vector2(Math.Max(0f, widthDiff / 2), Math.Max(0f, heightDiff / 2));
            }

            return(position);
        }
        public GameScene(IServiceProvider serviceProvider, string level)
        {
            ServiceProvider = serviceProvider;

            Entities          = new List <IEntity>();
            EntityFactory     = new GameEntityFactory(this);
            MenuEntityFactory = new MenuEntityFactory(this);

            serviceProvider.GetService <IGoldService>().Reset();
            serviceProvider.GetService <IGameObjectService>().Reset();

            LoadImages();
            LoadFonts();
            LoadLevel(level);
            LoadSounds();

            var startGold = 300;

            ServiceProvider.GetService <IGoldService>().AddGold(0, startGold);
            ((IGameEntityFactory)EntityFactory).CreateGoldDisplay();
        }
Example #4
0
        public KeystateService(GameWindow gameWindow, IServiceProvider serviceProvider)
        {
            pressedKeys        = new List <Key>();
            pressedKeysLast    = new List <Key>();
            pressedButtons     = new List <MouseButton>();
            pressedButtonsLast = new List <MouseButton>();

            gameWindow.KeyDown += (s, e) => pressedKeys.Add(e.Key);

            gameWindow.KeyUp += (s, e) => pressedKeys.RemoveAll(k => k == e.Key);

            gameWindow.MouseDown += (s, e) => pressedButtons.Add(e.Button);
            gameWindow.MouseUp   += (s, e) => pressedButtons.RemoveAll(b => b == e.Button);

            gameWindow.MouseMove += (s, e) =>
            {
                MousePosition  = new Vector2((float)e.X / gameWindow.Width, (float)e.Y / gameWindow.Height);
                MousePosition *= 2;
                MousePosition -= Vector2.One;
                MousePosition *= new Vector2(1f, -1f);

                MousePosition = ToWorldCoordinate(gameWindow, serviceProvider, MousePosition);
            };
        }
Example #5
0
 public MapService(IServiceProvider serviceProvider)
 {
     this.serviceProvider = serviceProvider;
     gidTiles             = new Dictionary <int, TmxTilesetTile>();
 }
        public Program()
        {
            gameWindow = new GameWindow()
            {
                WindowState = WindowState.Maximized,
                Title       = "Medieval Commander",
            };

            scenes = new Dictionary <string, IScene>();

            serviceProvider = new ServiceProvider(gameWindow, scene =>
            {
                if (scene == null)
                {
                    gameWindow.Exit();
                    return;
                }

                IScene nextScene;
                if (scenes.ContainsKey(scene))
                {
                    nextScene = scenes[scene];
                }
                else
                {
                    nextScene = new GameScene(serviceProvider, scene);
                }

                nextScene.OnChange();

                // Reset OpenGL Viewport for next scene
                GL.Viewport(0, 0, gameWindow.Width, gameWindow.Height);
                GL.LoadIdentity();
                if (gameWindow.Height > gameWindow.Width)
                {
                    GL.Scale(1f, (float)gameWindow.Width / gameWindow.Height, 1f);
                }
                else
                {
                    GL.Scale((float)gameWindow.Height / gameWindow.Width, 1f, 1f);
                }

                nextScene.Resize(gameWindow);

                currentScene = nextScene;
            });

            StartMenuScene startMenuScene = new StartMenuScene(serviceProvider);
            GameOverScene  gameOverScene  = new GameOverScene(serviceProvider);
            LevelSelection levelSelection = new LevelSelection(serviceProvider);

            scenes.Add("MainMenu", startMenuScene);
            scenes.Add("GameOver", gameOverScene);
            scenes.Add("LevelSelection", levelSelection);
            currentScene = startMenuScene;

            gameWindow.UpdateFrame += (s, e) => currentScene.Update();

            gameWindow.Resize += (s, e) =>
            {
                GL.Viewport(0, 0, gameWindow.Width, gameWindow.Height);
                GL.LoadIdentity();
                if (gameWindow.Height > gameWindow.Width)
                {
                    GL.Scale(1f, (float)gameWindow.Width / gameWindow.Height, 1f);
                }
                else
                {
                    GL.Scale((float)gameWindow.Height / gameWindow.Width, 1f, 1f);
                }

                currentScene.Resize(gameWindow);
            };

            gameWindow.UpdateFrame += (s, e) => serviceProvider.Update();

            Stream cursorImage = serviceProvider.GetService <IFileResourceService>().Open("cursor_shiny.png");

            using (var image = new MagickImage(cursorImage))
            {
                gameWindow.Cursor = new MouseCursor(0, 0, 32, 32, image.GetPixelsUnsafe().ToArray());
            }

            gameWindow.Run();
        }