示例#1
0
 public void InitAutotiles()
 {
     lock (MapLock)
     {
         Autotiles.InitAutotiles(GenerateAutotileGrid());
     }
 }
示例#2
0
        private GameTileBuffer[] CheckAutotile(int x, int y, MapBase[,] surroundingMaps)
        {
            var updated = new List <GameTileBuffer>();

            for (var layer = 0; layer < 5; layer++)
            {
                if (Autotiles.UpdateAutoTile(x, y, layer, surroundingMaps))
                {
                    //Find the VBO, update it.
                    var tileBuffer = mTileBufferDict[layer];
                    var tile       = Layers[layer].Tiles[x, y];
                    if (tile.TilesetTex == null)
                    {
                        continue;
                    }

                    var tilesetTex = (GameTexture)tile.TilesetTex;
                    if (tile.X < 0 || tile.Y < 0)
                    {
                        continue;
                    }

                    if (tile.X * Options.TileWidth >= tilesetTex.GetWidth() ||
                        tile.Y * Options.TileHeight >= tilesetTex.GetHeight())
                    {
                        continue;
                    }

                    var platformTex = tilesetTex.GetTexture();
                    if (tileBuffer.ContainsKey(platformTex))
                    {
                        for (var autotileFrame = 0; autotileFrame < 3; autotileFrame++)
                        {
                            var buffer  = tileBuffer[platformTex][autotileFrame];
                            var xoffset = GetX();
                            var yoffset = GetY();
                            DrawAutoTile(
                                layer, x * Options.TileWidth + xoffset, y * Options.TileHeight + yoffset, 1, x, y,
                                autotileFrame, tilesetTex, buffer, true
                                ); //Top Left

                            DrawAutoTile(
                                layer, x * Options.TileWidth + Options.TileWidth / 2 + xoffset,
                                y * Options.TileHeight + yoffset, 2, x, y, autotileFrame, tilesetTex, buffer, true
                                );

                            DrawAutoTile(
                                layer, x * Options.TileWidth + xoffset,
                                y * Options.TileHeight + Options.TileHeight / 2 + yoffset, 3, x, y, autotileFrame,
                                tilesetTex, buffer, true
                                );

                            DrawAutoTile(
                                layer, +x * Options.TileWidth + Options.TileWidth / 2 + xoffset,
                                y * Options.TileHeight + Options.TileHeight / 2 + yoffset, 4, x, y, autotileFrame,
                                tilesetTex, buffer, true
                                );

                            if (!updated.Contains(buffer))
                            {
                                updated.Add(buffer);
                            }
                        }
                    }
                }
            }

            return(updated.ToArray());
        }