Пример #1
0
        public Color GetColor(int x, int y)
        {
            if (x < 0 || x >= Width)
            {
                throw new ArgumentException("X given is out of bounds: " + x);
            }
            if (y < 0 || y >= Height)
            {
                throw new ArgumentException("Y given is out of bounds: " + y);
            }

            int     tileX = x / 16;
            int     tileY = y / 16;
            MapTile combo;
            int     index = -1;

            for (int i = 0; i < ShowChanges.Length; i++)
            {
                if (ShowChanges[i] && Changes.Contains(i, tileX, tileY))
                {
                    index = i;
                }
            }
            if (index == -1)
            {
                combo = Tileset.Tiles[Layout[tileX, tileY]];
            }
            else
            {
                int tile_index = Changes.GetTile(index, tileX, tileY);
                if (tile_index == 0)
                {
                    combo = Tileset.Tiles[Layout[tileX, tileY]];
                }
                else
                {
                    combo = Tileset.Tiles[tile_index];
                    if (ShowChanges_TileBorders && (
                            x % 16 == 0 || x % 16 == 15 ||
                            y % 16 == 0 || y % 16 == 15))
                    {
                        return(new Color(0x7FFF));
                    }
                }
            }
            tileX = x % 16;
            tileY = y % 16;
            int tileIndex;
            int palette;

            if (tileX < 8 && tileY < 8)
            {
                palette   = combo.Palette_00;
                tileIndex = combo.ComboTile_00;
                if (combo.FlipH_00)
                {
                    tileX = 7 - tileX;
                }
                if (combo.FlipV_00)
                {
                    tileY = 7 - tileY;
                }
            }
            else if (tileX < 8)
            {
                palette   = combo.Palette_01;
                tileIndex = combo.ComboTile_01;
                tileY    -= 8;
                if (combo.FlipH_01)
                {
                    tileX = 7 - tileX;
                }
                if (combo.FlipV_01)
                {
                    tileY = 7 - tileY;
                }
            }
            else if (tileY < 8)
            {
                palette   = combo.Palette_10;
                tileIndex = combo.ComboTile_10;
                tileX    -= 8;
                if (combo.FlipH_10)
                {
                    tileX = 7 - tileX;
                }
                if (combo.FlipV_10)
                {
                    tileY = 7 - tileY;
                }
            }
            else
            {
                palette   = combo.Palette_11;
                tileIndex = combo.ComboTile_11;
                tileX    -= 8;
                tileY    -= 8;
                if (combo.FlipH_11)
                {
                    tileX = 7 - tileX;
                }
                if (combo.FlipV_11)
                {
                    tileY = 7 - tileY;
                }
            }
            if (ShowFog)
            {
                palette += 5;
            }
            Tile tile = (Tileset.Tileset2 == null) ?
                        Tileset.Tileset1[tileIndex] :
                        (tileIndex < 512) ?
                        Tileset.Tileset1[tileIndex] :
                        Tileset.Tileset2[tileIndex - 512];

            return(Tileset.Palettes[palette][tile[tileX, tileY]]);
        }