예제 #1
0
        public void AddRenderableSource(IRenderableSource source)
        {
            var rend = source.ToList();

            _renderables.AddRange(rend);
            _newRenderables.AddRange(rend);
        }
예제 #2
0
 internal OneLayerBoundApplier(IRenderableSource source, Layer layer, CachePackage cachePackage)
 {
     this.source             = source;
     this.layer              = layer;
     this.clippedImageFuture = new MemCachePrototype(cachePackage.computeCache, new ApplyPrototype(new UserClipperVerb(), new IFuturePrototype[]
     {
         source.GetImagePrototype(null, (FutureFeatures)11),
         new UnevaluatedTerm(TermName.TileAddress),
         source.GetUserBounds(null, FutureFeatures.Cached)
     }));
 }
		internal OneLayerBoundApplier(IRenderableSource source, Layer layer, CachePackage cachePackage)
		{
			this.source = source;
			this.layer = layer;
			this.clippedImageFuture = new MemCachePrototype(cachePackage.computeCache, new ApplyPrototype(new UserClipperVerb(), new IFuturePrototype[]
			{
				source.GetImagePrototype(null, (FutureFeatures)11),
				new UnevaluatedTerm(TermName.TileAddress),
				source.GetUserBounds(null, FutureFeatures.Cached)
			}));
		}
예제 #4
0
파일: Albion.cs 프로젝트: lucorp/ualbion
        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())
            ;
        }
예제 #5
0
        public static (Container, IsometricBuilder) SetupEngine(
            EventExchange exchange,
            int tileWidth, int tileHeight,
            int baseHeight, int tilesPerRow,
            GraphicsBackend backend, bool useRenderDoc, Rectangle?windowRect)
        {
            if (exchange == null)
            {
                throw new ArgumentNullException(nameof(exchange));
            }
            var framebuffer = new SimpleFramebuffer((uint)(tileWidth * tilesPerRow), (uint)tileHeight, "FB_Offscreen");
            var builder     = new IsometricBuilder(framebuffer, tileWidth, tileHeight, baseHeight, tilesPerRow);

#pragma warning disable CA2000 // Dispose objects before losing scopes
            var config        = exchange.Resolve <IGeneralConfig>();
            var shaderCache   = new ShaderCache(config.ResolvePath("$(CACHE)/ShaderCache"));
            var sceneRenderer = new SceneRenderer("MainPipeline", framebuffer)
                                .AddRenderer(new SpriteRenderer(framebuffer), typeof(VeldridSpriteBatch))
                                .AddRenderer(new EtmRenderer(framebuffer), typeof(EtmWindow))
            ;

            foreach (var shaderPath in exchange.Resolve <IModApplier>().ShaderPaths)
            {
                shaderCache.AddShaderPath(shaderPath);
            }

            var engine = new Engine(
                backend, useRenderDoc, false, windowRect != null, sceneRenderer, windowRect)
            ;

            var renderableSources = new IRenderableSource[]
            {
                new EtmManager(),
                new SpriteManager(),
            };

            var services = new Container("IsometricLayoutServices");
            services
            .Add(shaderCache)
            .Add(framebuffer)
            .Add(sceneRenderer)
            .Add(engine)
            .Add(new SpriteSamplerSource())
            .Add(new TextureSource())
            .Add(new ResourceLayoutSource())
            .Add(new VeldridCoreFactory())
            .Add(new SceneStack())
            .Add(new SceneManager()
                 .AddScene(new EmptyScene())
                 .AddScene((IScene) new IsometricBakeScene()
                           .Add(new PaletteManager())
                           .Add(builder)))
            ;

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

            return(services, builder);
        }