Пример #1
0
 public GameDebugView(IGame game, KeyboardBindings keyboardBindings)
 {
     _game             = game;
     _keyboardBindings = keyboardBindings;
     _layer            = new AGSRenderLayer(AGSLayers.UI.Z - 1, independentResolution: new Size(1800, 1200));
     _inspector        = new InspectorPanel(game, _layer);
     _debugTree        = new GameDebugTree(game, _layer, _inspector);
     _displayList      = new GameDebugDisplayList(game, _layer);
     _input            = game.Input;
     keyboardBindings.OnKeyboardShortcutPressed.Subscribe(onShortcutKeyPressed);
 }
Пример #2
0
        private static async Task load(AGSProject agsProj)
        {
            var(games, assembly) = await GetGames(agsProj);

            if (games.Count == 0)
            {
                throw new Exception($"Cannot load game: failed to find an instance of IGameCreator in {agsProj.AGSProjectPath}.");
            }
            if (games.Count > 1)
            {
                throw new Exception($"Cannot load game: found more than one instance of IGameCreator in {agsProj.AGSProjectPath}.");
            }
            var gameCreatorImplementation = games[0];
            var gameCreator = (IGameStarter)Activator.CreateInstance(gameCreatorImplementation);
            var game        = AGSGame.CreateEmpty();

            gameCreator.StartGame(game);

            KeyboardBindings keyboardBindings = null;

            if (game is AGSGame agsGame) //todo: find a solution for any IGame implementation
            {
                Resolver resolver = agsGame.GetResolver();
                keyboardBindings = resolver.Container.Resolve <KeyboardBindings>();
                var resourceLoader = resolver.Container.Resolve <IResourceLoader>();
                resourceLoader.ResourcePacks.Add(new ResourcePack(new EmbeddedResourcesPack(assembly), 2));
            }

            _gameDebugView = new Lazy <GameDebugView>(() =>
            {
                var gameDebugView = new GameDebugView(game, keyboardBindings);
                gameDebugView.Load();
                return(gameDebugView);
            });

            game.Start(new AGSGameSettings("Demo Game", new AGS.API.Size(320, 200),
                                           windowSize: new AGS.API.Size(640, 400), windowState: WindowState.Normal));

            keyboardBindings.OnKeyboardShortcutPressed.Subscribe(async action =>
            {
                if (action == KeyboardBindings.GameView)
                {
                    var gameDebug = _gameDebugView.Value;
                    if (gameDebug.Visible)
                    {
                        gameDebug.Hide();
                    }
                    else
                    {
                        await gameDebug.Show();
                    }
                }
            });
        }
Пример #3
0
 public GameDebugView(AGSEditor editor, KeyboardBindings keyboardBindings, ActionManager actions, GameToolbar toolbar)
 {
     _toolbar     = toolbar;
     _actions     = actions;
     _editor      = editor;
     _layer       = new AGSRenderLayer(AGSLayers.UI.Z - 1, independentResolution: _resolution);
     _inspector   = new InspectorPanel(editor, _layer, actions);
     Tree         = new GameDebugTree(editor, _layer, _inspector);
     _displayList = new GameDebugDisplayList(editor.Editor, editor.Game, _layer);
     _input       = editor.Editor.Input;
     keyboardBindings.OnKeyboardShortcutPressed.Subscribe(onShortcutKeyPressed);
 }
Пример #4
0
        private static async Task load(AGSProject agsProj, AGSEditor editor)
        {
            var(games, assembly) = await GetGames(agsProj);

            if (games.Count == 0)
            {
                throw new Exception($"Cannot load game: failed to find an instance of {nameof(IGameStarter)} in {agsProj.AGSProjectPath}.");
            }
            if (games.Count > 1)
            {
                throw new Exception($"Cannot load game: found more than one instance of {nameof(IGameStarter)} in {agsProj.AGSProjectPath}.");
            }
            var gameCreatorImplementation = games[0];
            var gameCreator = (IGameStarter)Activator.CreateInstance(gameCreatorImplementation);

            var editorResolver = editor.EditorResolver;
            var updatePump     = editorResolver.Container.Resolve <IUpdateMessagePump>();

            var gameSettings = gameCreator.Settings;
            var gameResolver = new Resolver(AGSGame.Device, gameSettings);

            gameResolver.Builder.RegisterType <EditorShouldBlockEngineInput>().SingleInstance().As <IShouldBlockInput>().As <EditorShouldBlockEngineInput>();
            gameResolver.Builder.RegisterInstance(updatePump).As <IUpdateMessagePump>().As <IUpdateThread>();
            AGSEditor.Platform.SetResolverForGame(gameResolver, editorResolver);
            var game = AGSGame.Create(gameResolver);

            editor.Game         = game;
            editor.GameResolver = gameResolver;
            gameCreator.StartGame(game);

            var keyboardBindings = new KeyboardBindings(editor.Editor.Input);
            var actions          = editorResolver.Container.Resolve <ActionManager>();
            var resourceLoader   = gameResolver.Container.Resolve <IResourceLoader>();

            resourceLoader.ResourcePacks.Add(new ResourcePack(new FileSystemResourcePack(AGSGame.Device.FileSystem, assembly), 2));
            resourceLoader.ResourcePacks.Add(new ResourcePack(new EmbeddedResourcesPack(assembly), 3));

            EditorShouldBlockEngineInput blocker = gameResolver.Container.Resolve <EditorShouldBlockEngineInput>();

            var toolbar = new GameToolbar(blocker, editor.Editor.Input, editor.Editor.State, editor.Editor.Settings);

            toolbar.Init(editor.Editor.Factory, editor);

            game.Events.OnLoad.Subscribe(() =>
            {
                editor.Init();

                var gameDebugView = new GameDebugView(editor, keyboardBindings, actions, toolbar);
                toolbar.SetGame(game, editor.GameResolver.Container.Resolve <IWindowInfo>(), gameDebugView.Tree);
                var canvas = new GameCanvas(editor, toolbar, gameDebugView.Tree);
                canvas.Init();
                gameDebugView.Load();
                gameDebugView.Show();

                keyboardBindings.OnKeyboardShortcutPressed.Subscribe(async action =>
                {
                    if (action == KeyboardBindings.GameView)
                    {
                        if (gameDebugView.Visible)
                        {
                            gameDebugView.Hide();
                        }
                        else
                        {
                            await gameDebugView.Show();
                        }
                    }
                });
            });

            game.Start();
        }