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);
            }
        }
Exemple #2
0
 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;
 }
Exemple #3
0
 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);
        }