コード例 #1
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())
            ;
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: vsafonkin/ualbion
        static async Task <(EventExchange, IContainer)> SetupAssetSystem(string baseDir)
        {
            var generalConfigTask = Task.Run(() =>
            {
                var result = GeneralConfig.Load(Path.Combine(baseDir, "data", "config.json"), baseDir);
                PerfTracker.StartupEvent("Loaded general config");
                return(result);
            });
            var settingsTask = Task.Run(() =>
            {
                var result = GeneralSettings.Load(Path.Combine(baseDir, "data", "settings.json"));
                PerfTracker.StartupEvent("Loaded settings");
                return(result);
            });
            var coreConfigTask = Task.Run(() =>
            {
                var result = CoreConfig.Load(Path.Combine(baseDir, "data", "core.json"));
                PerfTracker.StartupEvent("Loaded core config");
                return(result);
            });
            var gameConfigTask = Task.Run(() =>
            {
                var result = GameConfig.Load(Path.Combine(baseDir, "data", "game.json"));
                PerfTracker.StartupEvent("Loaded game config");
                return(result);
            });

            var assets                  = new AssetManager();
            var factory                 = new VeldridCoreFactory();
            var loaderRegistry          = new AssetLoaderRegistry();
            var locatorRegistry         = new AssetLocatorRegistry();
            var containerLoaderRegistry = new ContainerLoaderRegistry().AddLoader(new RawContainerLoader())
                                          .AddLoader(new XldContainerLoader())
                                          .AddLoader(new BinaryOffsetContainerLoader())
                                          .AddLoader(new ItemListContainerLoader())
                                          .AddLoader(new SpellListContainerLoader())
                                          .AddLoader(new DirectoryContainerLoader())
            ;

            var modApplier = new ModApplier()
                             // Register post-processors for handling transformations of asset data that can't be done by UAlbion.Formats alone.
                             .AddAssetPostProcessor(new AlbionSpritePostProcessor())
                             .AddAssetPostProcessor(new ImageSharpPostProcessor())
                             .AddAssetPostProcessor(new InterlacedBitmapPostProcessor())
                             .AddAssetPostProcessor(new InventoryPostProcessor())
                             .AddAssetPostProcessor(new ItemNamePostProcessor());

            var settings = await settingsTask.ConfigureAwait(false);

            var services = new Container("Services", settings, // Need to register settings first, as the AssetLocator relies on it.
                                         loaderRegistry, locatorRegistry, containerLoaderRegistry, new MetafontBuilder(factory), new StdioConsoleLogger(),
                                                               // new ClipboardManager(),
                                         new ImGuiConsoleLogger(), new WordLookup(), new AssetLocator(), modApplier, assets);

            var generalConfig = await generalConfigTask.ConfigureAwait(false);

            using var exchange = new EventExchange(new LogExchange()).Register <IGeneralConfig>(generalConfig)
                                 .Register <ICoreFactory>(factory)
                                 .Attach(services);
            PerfTracker.StartupEvent("Registered asset services");

            Engine.GlobalExchange = exchange;
            generalConfig.SetPath("LANG", settings.Language.ToString()
                                  .ToUpperInvariant()); // Ensure that the LANG path is set before resolving any assets
            modApplier.LoadMods(generalConfig);
            PerfTracker.StartupEvent("Loaded mods");

            var coreConfig = await coreConfigTask.ConfigureAwait(false);

            var gameConfig = await gameConfigTask.ConfigureAwait(false);

            exchange // Need to load game config after mods so asset ids can be parsed.
            .Register(coreConfig)
            .Register(gameConfig);
            PerfTracker.StartupEvent("Loaded core and game config");
            return(exchange, services);
        }