public GameOverScene(IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; Entities = new List <IEntity>(); EntityFactory = new MenuEntityFactory(this); LoadImages(); }
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(); }
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); }; }
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(); }