internal SceneLoader(string sceneName, object scene, LoaderUtility loaderUtility, GameLoader gameLoader) { GameLoader = gameLoader; Game = GameLoader.Game; this.loaderUtility = loaderUtility; PropertyHolder sceneValues = loaderUtility.GetProperties(scene); LoadedScene = new LoadedScene(sceneName, sceneValues, this, gameLoader.Game, loaderUtility); IEnumerable<object> managers = loaderUtility.GetOfType(scene, loaderUtility.ManagerType); foreach (object manager in managers) { PropertyHolder managerValues = loaderUtility.GetProperties(manager); string type = loaderUtility.GetType(manager); LoadedManager lm = LoadedManager.GetLoadedManager(type, LoadedScene, managerValues, loaderUtility); LoadedScene.addLoadedManager(lm); } IEnumerable<object> entities = loaderUtility.GetOfType(scene, loaderUtility.EntityType); foreach (object entity in entities) { string name = loaderUtility.GetName(entity); if (ClassFactory.isRegistered(name)) Game.CurrentGame.Die("The name " + name + " can't be both defined and used for an entity"); LoadedEntity loadedEntity = gameLoader.entityParse(entity, name, onid++); LoadedScene.addLoadedEntity(loadedEntity); } }
internal static Game StartGame(string testFile, Action<string> die = null) { if (die == null) die = new Action<string>(str => Assert.Fail(str)); GameLoader gameLoader = new GameLoader(testFile, new Assembly[] { typeof(Setup).Assembly }, die); Game game = gameLoader.CreateGame(); game.Start(); return game; }
public static void RunGame(string testFile, Action<string> die = null) { if (die == null) die = new Action<string>(str => Assert.Fail(str)); GameLoader gameLoader = new GameLoader(testFile, new Assembly[] { typeof(Setup).Assembly }, die); Game game = gameLoader.CreateGame(); game.Start(); while (game.Running) game.OnUpdate(1 / 60f); }
public Application() { Assembly renderAssembly = Assembly.GetAssembly(typeof(RenderService)); Assembly inputAssembly = Assembly.GetAssembly(typeof(InputService)); Factory drawFactory = new SlimDX.Direct2D.Factory(); GameLoader gameLoader = new GameLoader("game.kgl", new Assembly[] { renderAssembly, inputAssembly }, die); game = gameLoader.CreateGame(); renderService = game.GetService<RenderService>(); renderService.Dpi = drawFactory.DesktopDpi; if (renderService.Width == 0) { renderService.Width = 800; } if (renderService.Height == 0) { renderService.Height = 600; } PointF pixelSize = renderService.ConvertDipsToPixels(new PointF(renderService.Width, renderService.Height)); Size size = new Size((int)pixelSize.X, (int)pixelSize.Y); form = new RenderForm(game.Name) { ClientSize = size, FormBorderStyle = FormBorderStyle.FixedSingle, MaximizeBox = false }; renderService.RenderTarget = new WindowRenderTarget(drawFactory, new WindowRenderTargetProperties() { Handle = form.Handle, PixelSize = size }); inputService = game.GetService<InputService>(); inputService.Form = form; int y = (int)((SystemInformation.VirtualScreen.Height - renderService.Height * renderService.Dpi.Height / 96.0) / 2); if (y < 0) y = 0; int x = (int)((SystemInformation.VirtualScreen.Width - renderService.Width * renderService.Dpi.Width / 96.0) / 2); if (x < 0) x = 0; form.SetDesktopLocation(x, y); }