コード例 #1
0
        private void tileset_Change(Widget widget)
        {
            State.SelectedTileset = ((ComboBox)widget).SelectedIndex;
            Data.TileSet tileset = State.Data.TileSets[State.SelectedTileset];
            for (int i = 0; i < 4; i++)
            {
                if (tileset.GetPalette(i) < 0 || tileset.GetPalette(i) >= State.Data.Palettes.Count)
                {
                    tileset.SetPalette(i, 0);
                }
                m_PaletteCombos[i].SelectedIndex = tileset.GetPalette(i);
            }

            bool loadtiles = (State.Data.TileSets[State.SelectedTileset] != null);

            if (loadtiles)
            {
                for (int i = 0; i < Data.TileSet.TilesPerSet; i++)
                {
                    m_MetaTiles[i].Flags = State.Data.TileSets[State.SelectedTileset].GetFlags(i);
                    for (int j = 0; j < 4; j++)
                    {
                        TilePageAttribute tile_page_attrib = State.Data.TileSets[State.SelectedTileset].GetSubTile(i, j);
                        m_MetaTiles[i].SetTile(j, tile_page_attrib.Tile, State.GfxPage(tile_page_attrib.Page).Texture);
                        m_MetaTiles[i].Attribute = tile_page_attrib.Attribute;
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Loads data into a chunk in the 'Current Map' panel.
        /// </summary>
        /// <param name="p">The x and y indexes of the chunk to load.</param>
        /// <param name="index">The index of the chunk in the Current Map panel.</param>
        private void loadChunk(Point p, int ctl_index)
        {
            Data.Map map      = State.Data.Maps[State.SelectedMap];
            MapChunk ctlChunk = m_Chunks[ctl_index];

            int chunk_index = p.X + p.Y * State.Data.Maps[State.SelectedMap].WidthInChunks;
            int chunk_type  = map.GetSuperChunk(p.X / 2, p.Y / 2).Chunks[p.X % 2 + (p.Y % 2) * 2];

            ctlChunk.Chunk.ChunkIndexXY = p;

            if (ctlChunk.Chunk.ChunkType != chunk_type)
            {
                if (p.X < 0 || p.X >= map.WidthInChunks || p.Y < 0 || p.Y >= map.HeightInChunks)
                {
                    return;
                }
                else
                {
                    ctlChunk.Chunk.ChunkType = chunk_type;
                    Data.Chunk chunk = State.Data.Chunks[chunk_type];
                    for (int i = 0; i < 64; i++)
                    {
                        int tile = chunk[i];
                        for (int j = 0; j < 4; j++)
                        {
                            TilePageAttribute tile_page_attrib = State.Data.TileSets[State.SelectedTileset].GetSubTile(tile, j);
                            ctlChunk.Chunk.SetTile(i, j, tile_page_attrib.Tile, State.GfxPage(tile_page_attrib.Page).Texture);
                            ctlChunk.Chunk.SetAttribute(i, tile_page_attrib.Attribute);
                        }
                    }
                }
            }
        }
コード例 #3
0
        private void loadChunkTile(int index, int tile)
        {
            Data.Chunk chunk = State.Data.Chunks[State.SelectedChunk];
            if (chunk == null)
            {
                return;
            }

            Data.TileSet tileset = State.Data.TileSets[State.SelectedTileset];
            if (tileset == null)
            {
                return;
            }

            if (index < 0 || index >= 64)
            {
                return;
            }

            chunk[index] = State.SelectedMetatile;

            for (int j = 0; j < 4; j++)
            {
                TilePageAttribute tile_page_attrib = State.Data.TileSets[State.SelectedTileset].GetSubTile(tile, j);
                ctlChunk.SetTile(index, j, tile_page_attrib.Tile, State.GfxPage(tile_page_attrib.Page).Texture);
                ctlChunk.SetAttribute(index, tile_page_attrib.Attribute);
            }
        }
コード例 #4
0
 private void createMetaTilePanel()
 {
     if (m_MetaTiles == null)
     {
         m_MetaTiles = new List <Elements.MetaTile>();
         int  tilesperrow = 8, tilesize = 48, tilemargin = 8;
         int  x = 16, y = 4;
         bool loadtiles = (State.Data.TileSets[State.SelectedTileset] != null && State.Data.Palettes.Count != 0 && State.Data.TileGfx.PageCount != 0);
         for (int i = 0; i < Data.TileSet.TilesPerSet; i++)
         {
             Elements.MetaTile metatile = new Elements.MetaTile(i,
                                                                x + (tilesize + tilemargin) * (i % tilesperrow), y + 18 + (tilesize + tilemargin) * (i / tilesperrow), tilesize, tilesize, metatile_OnClick);
             if (loadtiles)
             {
                 for (int j = 0; j < 4; j++)
                 {
                     TilePageAttribute tile_page_attrib = State.Data.TileSets[State.SelectedTileset].GetSubTile(i, j);
                     metatile.SetTile(j, tile_page_attrib.Tile, State.GfxPage(tile_page_attrib.Page).Texture);
                     metatile.Attribute = tile_page_attrib.Attribute;
                 }
             }
             m_MetaTiles.Add(metatile);
         }
         scrMetaTiles.AddWidget(
             new Label(x, y, "MetaTiles:"));
         scrMetaTiles.AddWidgets(m_MetaTiles);
     }
 }
コード例 #5
0
        /// <summary>
        /// Returns the tile, gfxpage, and attribute for the subtile in tile (index).
        /// </summary>
        /// <param name="index"></param>
        /// <param name="subtile"></param>
        /// <returns></returns>
        public TilePageAttribute GetSubTile(int index, int subtile)
        {
            if (index < 0 || index >= TilesPerSet)
            {
                return(TilePageAttribute.Zero);
            }
            TilePage          value  = m_Tilegfx.GetTileAndPageFromIndex(m_Metatiles[index][subtile]);
            TilePageAttribute value2 = new TilePageAttribute(value.Tile, value.Page, m_Attributes[index]);

            return(value2);
        }
コード例 #6
0
 /// <summary>
 /// Sets an entire chunk at once.
 /// </summary>
 /// <param name="chunk"></param>
 /// <param name="tileset"></param>
 public void SetChunk(Data.Chunk chunk, Data.TileSet tileset)
 {
     for (int i = 0; i < 64; i++)
     {
         int tile = chunk[i];
         for (int j = 0; j < 4; j++)
         {
             TilePageAttribute tile_page_attrib = State.Data.TileSets[State.SelectedTileset].GetSubTile(tile, j);
             SetTile(i, j, tile_page_attrib.Tile, State.GfxPage(tile_page_attrib.Page).Texture);
             SetAttribute(i, tile_page_attrib.Attribute);
         }
     }
 }
コード例 #7
0
        public void WriteChunk(int x, int y, Data.Chunk chunk, Data.TileSet tileset, Data.TileGfx gfx)
        {
            if (m_TilesToBytes == null)
            {
                m_TilesToBytes = new Dictionary <int, int[]>();
            }

            for (int i = 0; i < 4; i++)
            {
                int[] chunksums = new int[16];
                for (int iy = 0; iy < 4; iy++)
                {
                    for (int ix = 0; ix < 4; ix++)
                    {
                        int metatile = chunk[(iy + (i / 2) * 2) * 8 + (ix + (i % 2) * 2)];
                        if (!m_TilesToBytes.ContainsKey(metatile))
                        {
                            int[] tilesums = new int[16];
                            for (int j = 0; j < 4; j++)
                            {
                                TilePageAttribute value = tileset.GetSubTile(metatile, j);
                                byte[]            tile  = gfx.GetTile(value.Page, value.Tile);
                                for (int k = 0; k < 16; k++)
                                {
                                    int t = (tile[k] & 0x03);
                                    tilesums[t + (t == 0 ? 0 : value.Attribute * 4)]++;
                                    t = ((tile[k] >> 2) & 0x03);
                                    tilesums[t + (t == 0 ? 0 : value.Attribute * 4)]++;
                                    t = ((tile[k] >> 4) & 0x03);
                                    tilesums[t + (t == 0 ? 0 : value.Attribute * 4)]++;
                                    t = ((tile[k] >> 6) & 0x03);
                                    tilesums[t + (t == 0 ? 0 : value.Attribute * 4)]++;
                                }
                            }
                            m_TilesToBytes.Add(metatile, tilesums);
                        }
                        for (int j = 0; j < 16; j++)
                        {
                            chunksums[j] += m_TilesToBytes[metatile][j];
                        }
                    }
                    uint[] mostCommonPixel = new uint[1] {
                        (uint)GreatestIndexInArray(chunksums)
                    };
                    m_Texture.SetData <uint>(0, new Rectangle(x * 2 + (i % 2), y * 2 + (i / 2), 1, 1), mostCommonPixel, 0, 1);
                }
            }
        }
コード例 #8
0
ファイル: Manager.cs プロジェクト: lmaxim/MultiScrollNES
 private void fixData()
 {
     for (int ts = 0; ts < m_TileSets.Count; ts++)
     {
         for (int i = 0; i < TileSet.TilesPerSet; i++)
         {
             for (int j = 0; j < 4; j++)
             {
                 TilePageAttribute tpa = m_TileSets[ts].GetSubTile(i, j);
                 if (tpa.Page >= m_TileGfx.PageCount)
                 {
                     m_TileSets[ts].SetSubTileAndPage(i, j, 0, 0);
                 }
             }
         }
     }
 }
コード例 #9
0
        private void cmbTilesets_SelectionChanged(Widget widget)
        {
            State.SelectedTileset = ((ComboBox)widget).SelectedIndex;

            Data.Chunk chunk = State.Data.Chunks[State.SelectedChunk];
            if (chunk != null)
            {
                chunk.Tileset = State.SelectedTileset;
            }

            Data.TileSet tileset = State.Data.TileSets[State.SelectedTileset];

            if (tileset != null)
            {
                for (int i = 0; i < 4; i++)
                {
                    if (tileset.GetPalette(i) < 0 || tileset.GetPalette(i) >= State.Data.Palettes.Count)
                    {
                        tileset.SetPalette(i, 0);
                    }
                    byte[] palette = new byte[4];
                    palette[0] = State.Data.Palettes[tileset.GetPalette(0)][0];
                    for (int j = 1; j < 4; j++)
                    {
                        palette[j] = State.Data.Palettes[tileset.GetPalette(i)][j];
                    }
                    State.Palette.LoadPalette(i, palette);
                }

                for (int i = 0; i < Data.TileSet.TilesPerSet; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        TilePageAttribute tile_page_attrib = State.Data.TileSets[State.SelectedTileset].GetSubTile(i, j);
                        aioTileset.SetTile(i, j, tile_page_attrib.Tile, State.GfxPage(tile_page_attrib.Page).Texture);
                        aioTileset.SetAttribute(i, tile_page_attrib.Attribute);
                    }
                }

                loadChunkElement();
            }
        }