예제 #1
0
    private static void Init()
    {
        TileMapWindow window = (TileMapWindow)EditorWindow.GetWindow(typeof(TileMapWindow));

        window.minSize = new Vector2(800, 600);
        window.title   = "Tile Based Level Creator";
        window.Show();
        windowIsOpen = !windowIsOpen;
    }
예제 #2
0
        public IEnumerable <IRenderable> UpdatePerFrameResources(IRendererContext context, IEnumerable <IRenderable> renderables)
        {
            var c  = (VeldridRendererContext)context;
            var cl = c.CommandList;
            var gd = c.GraphicsDevice;

            ITextureManager textureManager = Resolve <ITextureManager>();

            foreach (var buffer in _instanceBuffers)
            {
                buffer.Dispose();
            }
            _instanceBuffers.Clear();

            foreach (var resourceSet in _resourceSets)
            {
                resourceSet.Dispose();
            }
            _resourceSets.Clear();

            void UpdateTilemapWindow(TileMapWindow window)
            {
                var tilemap = window.TileMap;

                window.InstanceBufferId = _instanceBuffers.Count;
                var buffer = gd.ResourceFactory.CreateBuffer(new BufferDescription((uint)window.Length * TileMap.Tile.StructSize, BufferUsage.VertexBuffer));

                buffer.Name = $"B_Tile3DInst{_instanceBuffers.Count}";
                cl.UpdateBuffer(buffer, 0, ref tilemap.Tiles[window.Offset], TileMap.Tile.StructSize * (uint)window.Length);
                _instanceBuffers.Add(buffer);

                textureManager.PrepareTexture(tilemap.Floors, context);
                textureManager.PrepareTexture(tilemap.Walls, context);
            }

            foreach (var renderable in renderables)
            {
                if (renderable is TileMap tilemap)
                {
                    var dummyWindow = new TileMapWindow(tilemap, 0, tilemap.Tiles.Length);
                    UpdateTilemapWindow(dummyWindow);
                    yield return(dummyWindow);
                }
                else if (renderable is TileMapWindow window)
                {
                    UpdateTilemapWindow(window);
                    yield return(window);
                }
            }
        }
    public void LoadListsAndGUIFirst()
    {
        #region Load GUI Files
        if (!mapCreatorWindow)
        {
            mapCreatorWindow = (TileMapWindow)EditorWindow.GetWindow(typeof(TileMapWindow));
        }
        tileBaseTex  = Resources.Load(mapCreatorWindow.directory.resourceFile[0]) as Texture2D;
        tileHighLTex = Resources.Load(mapCreatorWindow.directory.resourceFile[1]) as Texture2D;
        #endregion

        #region Load Game Lists
        backgroundTileList = Resources.LoadAll <GameObject>(mapCreatorWindow.directory.resourcesPath[4]);
        mecanicTileList    = Resources.LoadAll <GameObject>(mapCreatorWindow.directory.resourcesPath[5]);
        foregroundTileList = Resources.LoadAll <GameObject>(mapCreatorWindow.directory.resourcesPath[6]);
        #endregion

        #region Load Tile In Window
        LoadCurrentTabList();
        DrawCurrentTiles();
        GetTilePositions();
        #endregion
    }
예제 #4
0
        void InitTile(GameObject vTile, int vGridx, int vGridY)
        {
            //assign sprite
            SpriteRenderer spriteRenderer = vTile.GetComponent <SpriteRenderer> ();

            if (spriteRenderer == null)
            {
                spriteRenderer = vTile.AddComponent <SpriteRenderer> ();
            }
            spriteRenderer.sprite = AssetDatabase.LoadAssetAtPath <Sprite> (TileMapWindow.GetTextureAssetPath());            //need to optimise

            //assign tile info
            TileInfo tileInfo = vTile.GetComponent <TileInfo> ();

            if (tileInfo == null)
            {
                tileInfo = vTile.AddComponent <TileInfo> ();
            }
            tileInfo.m_ElemType = TileMapWindow.m_SelectElemType;

            //grid pos
            tileInfo.m_GridX = vGridx;
            tileInfo.m_GridY = vGridY;
        }
예제 #5
0
        public void UpdatePerFrameResources(IRendererContext context, IEnumerable <IRenderable> renderables, IList <IRenderable> results)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (renderables == null)
            {
                throw new ArgumentNullException(nameof(renderables));
            }
            if (results == null)
            {
                throw new ArgumentNullException(nameof(results));
            }
            var c  = (VeldridRendererContext)context;
            var cl = c.CommandList;
            var gd = c.GraphicsDevice;

            ITextureManager textureManager = Resolve <ITextureManager>();

            foreach (var buffer in _instanceBuffers)
            {
                buffer.Dispose();
            }
            _instanceBuffers.Clear();

            foreach (var resourceSet in _resourceSets)
            {
                resourceSet.Dispose();
            }
            _resourceSets.Clear();

            void UpdateTilemapWindow(TileMapWindow window)
            {
                var tilemap = window.TileMap;

                cl.PushDebugGroup($"Tiles3D:{tilemap.Name}:{tilemap.RenderOrder}");
                window.InstanceBufferId = _instanceBuffers.Count;
                var buffer = gd.ResourceFactory.CreateBuffer(new BufferDescription((uint)window.Length * DungeonTile.StructSize, BufferUsage.VertexBuffer));

                buffer.Name = $"B_Tile3DInst{_instanceBuffers.Count}";
                unsafe
                {
                    fixed(DungeonTile *tile = &tilemap.Tiles[0])
                    {
                        cl.UpdateBuffer(
                            buffer,
                            0,
                            (IntPtr)(&tile[window.Offset]),
                            DungeonTile.StructSize * (uint)window.Length);
                    }
                }
                _instanceBuffers.Add(buffer);

                textureManager.PrepareTexture(tilemap.Floors, context);
                textureManager.PrepareTexture(tilemap.Walls, context);
                cl.PopDebugGroup();
            }

            foreach (var renderable in renderables)
            {
                if (renderable is DungeonTileMap tilemap)
                {
                    var dummyWindow = new TileMapWindow(tilemap, 0, tilemap.Tiles.Length);
                    UpdateTilemapWindow(dummyWindow);
                    results.Add(dummyWindow);
                }
                else if (renderable is TileMapWindow window)
                {
                    UpdateTilemapWindow(window);
                    results.Add(window);
                }
            }
        }