Beispiel #1
0
        protected override void Subscribed()
        {
            var(services, builder) = IsometricSetup.SetupEngine(Exchange,
                                                                IsometricLabyrinthLoader.DefaultWidth,
                                                                IsometricLabyrinthLoader.DefaultHeight,
                                                                IsometricLabyrinthLoader.DefaultBaseHeight,
                                                                IsometricLabyrinthLoader.DefaultTilesPerRow,
                                                                _cmdLine.Backend,
                                                                _cmdLine.UseRenderDoc,
                                                                new Rectangle(0, 0,
                                                                              IsometricLabyrinthLoader.DefaultWidth * IsometricLabyrinthLoader.DefaultTilesPerRow,
                                                                              IsometricLabyrinthLoader.DefaultHeight * 10));

            var config = Resolve <IGeneralConfig>();

            services
            .Add(new InputManager().RegisterMouseMode(MouseMode.Normal, new NormalMouseMode()))
            .Add(new InputBinder((disk, jsonUtil) => InputConfig.Load(config.BasePath, disk, jsonUtil)))
            ;

            _mainFramebuffer = new MainFramebuffer();
            _quadRenderer    = new FullscreenQuadRenderer();
            var quad = new FullscreenQuad("Quad", DrawLayer.MaxLayer,
                                          ((SimpleFramebuffer)builder.Framebuffer).Color,
                                          _mainFramebuffer,
                                          new Vector4(-1, -1, 2, 2));
            var source = new AdhocRenderableSource(new[] { quad });

            services.Add(_mainFramebuffer);
            services.Add(_quadRenderer);
            services.Add(quad);
            Exchange.Attach(services);

            var renderer = Resolve <ISceneRenderer>();

            renderer.AddRenderer(_quadRenderer, typeof(FullscreenQuad));
            renderer.AddSource(source);

            Raise(new InputModeEvent(InputMode.IsoBake));
            Raise(new SetSceneEvent(SceneId.IsometricBake));
            Raise(new SetClearColourEvent(0, 0, 0, 0));
            Raise(new EngineFlagEvent(FlagOperation.Set, EngineFlags.ShowBoundingBoxes));

            Resolve <IEngine>().Run();
        }
Beispiel #2
0
        static void RegisterComponents(EventExchange global, IContainer services, string baseDir, CommandLineOptions commandLine)
        {
            PerfTracker.StartupEvent("Creating main components");

            global
            .Register <ICommonColors>(new CommonColors())
            ;

            if (!commandLine.Mute)
            {
                services.Add(new AudioManager(false));
            }

            var renderableSources = new IRenderableSource[]
            {
                new SkyboxManager(),
                new EtmManager(),
                new SpriteManager(),
                DebugGuiRenderable.Instance
            };

            var renderer = global.Resolve <ISceneRenderer>();

            foreach (var source in renderableSources)
            {
                if (source is IComponent component)
                {
                    services.Add(component);
                }
                renderer.AddSource(source);
            }

            services
            .Add(new VeldridGameFactory())
            .Add(new GameState())
            .Add(new GameClock())
            .Add(new IdleClock())
            .Add(new SlowClock())
            .Add(new TextureSource())
            .Add(new SpriteSamplerSource())
            .Add(new VideoManager())
            .Add(new EventChainManager())
            .Add(new Querier())
            .Add(new MapManager())
            .Add(new CollisionManager())
            .Add(new SceneStack())
            .Add(new SceneManager()
                 .AddScene((IScene) new EmptyScene()
                           .Add(new StatusBar())
                           .Add(new PaletteManager()))

                 .AddScene((IScene) new AutomapScene()
                           .Add(new StatusBar())
                           .Add(new PaletteManager()))

                 .AddScene((IScene) new FlatScene()
                           .Add(new StatusBar())
                           .Add(new ConversationManager())
                           .Add(new PaletteManager())
                           .Add(new ClockWidget())
                           .Add(new MonsterEye()))

                 .AddScene((IScene) new DungeonScene()
                           .Add(new SceneGraph())
                           .Add(new StatusBar())
                           .Add(new ConversationManager())
                           .Add(new PaletteManager())
                           .Add(new ClockWidget())
                           .Add(new Compass())
                           .Add(new MonsterEye()))

                 .AddScene((IScene) new MenuScene()
                           .Add(new StatusBar())
                           .Add(new PaletteManager())
                           .Add(new MainMenu())
                           .Add(new Sprite(
                                    (SpriteId)Base.Picture.MenuBackground8,
                                    new Vector3(-1.0f, 1.0f, 0),
                                    DrawLayer.Interface,
                                    SpriteKeyFlags.NoTransform,
                                    SpriteFlags.LeftAligned)
            {
                Size = new Vector2(2.0f, -2.0f)
            }))

                 .AddScene((IScene) new InventoryScene()
                           .Add(new StatusBar())
                           .Add(new ConversationManager())
                           .Add(new PaletteManager())
                           .Add(new InventoryInspector()))

                 .AddScene((IScene) new EditorScene()
                           .Add(new RawAssetManager())
                           .Add(new PaletteManager())
                           .Add(new EditorAssetManager())
                           .Add(new EditorUi()))
                 )

            .Add(new TextFormatter())
            .Add(new TextManager())
            .Add(new LayoutManager())
            .Add(new DialogManager())
            .Add(new InventoryScreenManager())
            .Add(new DebugMapInspector(services)
                 .AddBehaviour(new SpriteInstanceDataDebugBehaviour())
                 .AddBehaviour(new FormatTextEventBehaviour()))
            // .AddBehaviour(new QueryEventDebugBehaviour()))
            .Add(new ContextMenu())
            .Add(new CursorManager())
            .Add(new InputManager()
                 .RegisterInputMode(InputMode.ContextMenu, new ContextMenuInputMode())
                 .RegisterInputMode(InputMode.World2D, new World2DInputMode())
                 .RegisterMouseMode(MouseMode.DebugPick, new DebugPickMouseMode())
                 .RegisterMouseMode(MouseMode.MouseLook, new MouseLookMouseMode())
                 .RegisterMouseMode(MouseMode.Normal, new NormalMouseMode())
                 .RegisterMouseMode(MouseMode.RightButtonHeld, new RightButtonHeldMouseMode())
                 .RegisterMouseMode(MouseMode.ContextMenu, new ContextMenuMouseMode()))
            .Add(new SelectionManager())
            .Add(new InputBinder((disk, jsonUtil) => InputConfig.Load(baseDir, disk, jsonUtil)))
            .Add(new ItemTransitionManager())
            ;
        }
Beispiel #3
0
        static void RunGame(EventExchange global, string baseDir)
        {
            PerfTracker.StartupEvent("Creating engine");
            using var engine = new Engine(_backend, _useRenderDoc)
                               .AddRenderer(new SpriteRenderer())
                               .AddRenderer(new ExtrudedTileMapRenderer())
                               .AddRenderer(new FullScreenQuad())
                               .AddRenderer(new DebugGuiRenderer())
                               .AddRenderer(new ScreenDuplicator())
            ;

            global
            .Register <IShaderCache>(new ShaderCache(
                                         Path.Combine(baseDir, "Core", "Visual", "Shaders"),
                                         Path.Combine(baseDir, "data", "ShaderCache")))
            .Register <IEngine>(engine);

            var backgroundThreadInitTask = Task.Run(() =>
            {
                PerfTracker.StartupEvent("Creating main components");
                global
                .Register <IInputManager>(new InputManager()
                                          .RegisterInputMode(InputMode.ContextMenu, new ContextMenuInputMode())
                                          .RegisterInputMode(InputMode.World2D, new World2DInputMode())
                                          .RegisterMouseMode(MouseMode.DebugPick, new DebugPickMouseMode())
                                          .RegisterMouseMode(MouseMode.Exclusive, new ExclusiveMouseMode())
                                          .RegisterMouseMode(MouseMode.MouseLook, new MouseLookMouseMode())
                                          .RegisterMouseMode(MouseMode.Normal, new NormalMouseMode())
                                          )
                .Register <ILayoutManager>(new LayoutManager())
                .Register <IMapManager>(new MapManager())
                .Register <IPaletteManager>(new PaletteManager())
                .Register <ISceneManager>(new SceneManager()
                                          .AddScene(new EmptyScene())
                                          .AddScene(new AutomapScene())
                                          .AddScene(new FlatScene())
                                          .AddScene(new DungeonScene())
                                          .AddScene(new MenuScene())
                                          .AddScene(new InventoryScene())
                                          )
                .Register <IClock>(new GameClock())
                .Register <ISpriteManager>(new SpriteManager())
                .Register <IGameState>(new GameState())
                .Register <ITextManager>(new TextManager())
                .Register <ITextureManager>(new TextureManager())
                .Register <IDeviceObjectManager>(new DeviceObjectManager())
                .Attach(new SlowClock())
                .Attach(new CursorManager())
                .Attach(new DebugMapInspector()
                        .AddBehaviour(new SpriteInstanceDataDebugBehaviour()))
                .Attach(new InputBinder(InputConfig.Load(baseDir)))
                .Attach(new InputModeStack())
                .Attach(new MouseModeStack())
                .Attach(new SceneStack())
                .Attach(new StatusBar())
                ;

                PerfTracker.StartupEvent("Creating scene-specific components");
                var inventoryConfig = InventoryConfig.Load(baseDir);
                global.Resolve <ISceneManager>().GetExchange(SceneId.Inventory)
                .Attach(new InventoryScreen(inventoryConfig))
                ;

                var menuBackground = Sprite <PictureId> .ScreenSpaceSprite(
                    PictureId.MenuBackground8,
                    new Vector2(-1.0f, 1.0f),
                    new Vector2(2.0f, -2.0f));

                global.Resolve <ISceneManager>().GetExchange(SceneId.MainMenu)
                .Attach(new MainMenu())
                .Attach(menuBackground)
                ;

                PerfTracker.StartupEvent("Starting new game");
                //global.Raise(new LoadMapEvent(MapDataId.Jirinaar3D), null); /*

                /*
                 * global.Raise(new LoadMapEvent(MapDataId.AltesFormergebäude), null); /*
                 * global.Raise(new LoadMapEvent(MapDataId.HausDesJägerclans), null); //*/
                /*
                 * global.Raise(new SetSceneEvent(SceneId.Inventory), null);
                 * //*/

                global.Raise(new SetSceneEvent(SceneId.MainMenu), null);
                //global.Raise(new NewGameEvent(), null);
                ReflectionHelper.ClearTypeCache();
            });

            engine.Initialise();
            backgroundThreadInitTask.Wait();

            PerfTracker.StartupEvent("Running game");
            if (_startupOnly)
            {
                global.Raise(new QuitEvent(), null);
            }

            engine.Run();
            // TODO: Ensure all sprite leases returned etc to weed out memory leaks
        }
Beispiel #4
0
        static void RegisterComponents(EventExchange global, IContainer services, string baseDir, CommandLineOptions commandLine)
        {
            PerfTracker.StartupEvent("Creating main components");
            var factory = global.Resolve <ICoreFactory>();

            global
            .Register <ICommonColors>(new CommonColors(factory))
            .Register(CoreConfig.Load(baseDir))
            .Register(GameConfig.Load(baseDir))
            ;

            if (commandLine.AudioMode == AudioMode.InProcess)
            {
                services.Add(new AudioManager(false));
            }

            services
            .Add(new GameState())
            .Add(new GameClock())
            .Add(new IdleClock())
            .Add(new SlowClock())
            .Add(new DeviceObjectManager())
            .Add(new SpriteManager())
            .Add(new TextureManager())
            .Add(new EventChainManager())
            .Add(new Querier())
            .Add(new MapManager())
            .Add(new CollisionManager())
            .Add(new SceneStack())
            .Add(new SceneManager()
                 .AddScene((GameScene) new EmptyScene()
                           .Add(new PaletteManager()))

                 .AddScene((GameScene) new AutomapScene()
                           .Add(new PaletteManager()))

                 .AddScene((GameScene) new FlatScene()
                           .Add(new ConversationManager())
                           .Add(new PaletteManager()))

                 .AddScene((GameScene) new DungeonScene()
                           .Add(new ConversationManager())
                           .Add(new PaletteManager()))

                 .AddScene((GameScene) new MenuScene()
                           .Add(new PaletteManager())
                           .Add(new MainMenu())
                           .Add(Sprite <PictureId> .ScreenSpaceSprite(
                                    PictureId.MenuBackground8,
                                    new Vector2(-1.0f, 1.0f),
                                    new Vector2(2.0f, -2.0f))))

                 .AddScene((GameScene) new InventoryScene()
                           .Add(new ConversationManager())
                           .Add(new PaletteManager())
                           .Add(new InventoryInspector())))

            .Add(new TextFormatter())
            .Add(new TextManager())
            .Add(new LayoutManager())
            .Add(new DialogManager())
            .Add(new InventoryScreenManager())
            .Add(new DebugMapInspector(services)
                 .AddBehaviour(new SpriteInstanceDataDebugBehaviour())
                 .AddBehaviour(new FormatTextEventBehaviour())
                 .AddBehaviour(new QueryEventDebugBehaviour()))
            .Add(new StatusBar())
            .Add(new ContextMenu())
            .Add(new CursorManager())
            .Add(new InputManager()
                 .RegisterInputMode(InputMode.ContextMenu, new ContextMenuInputMode())
                 .RegisterInputMode(InputMode.World2D, new World2DInputMode())
                 .RegisterMouseMode(MouseMode.DebugPick, new DebugPickMouseMode())
                 .RegisterMouseMode(MouseMode.MouseLook, new MouseLookMouseMode())
                 .RegisterMouseMode(MouseMode.Normal, new NormalMouseMode())
                 .RegisterMouseMode(MouseMode.RightButtonHeld, new RightButtonHeldMouseMode())
                 .RegisterMouseMode(MouseMode.ContextMenu, new ContextMenuMouseMode()))
            .Add(new SelectionManager())
            .Add(new InputBinder(InputConfig.Load(baseDir)))
            .Add(new ItemTransitionManager())
            ;
        }