public void update_blocks(utils.ETileViewType _view_type, tiles_data _tiles_data, bool _prop_per_block, data_sets_manager.EScreenDataType _scr_type)
        {
            Image    img;
            Graphics gfx;

            m_block_rect.Width = m_block_rect.Height = (_view_type == utils.ETileViewType.tvt_ObjectId && !_prop_per_block) ? (utils.CONST_BLOCKS_IMG_SIZE >> 1):utils.CONST_BLOCKS_IMG_SIZE;

            for (int i = 0; i < platform_data.get_max_blocks_cnt(); i++)
            {
                img = m_imagelist_blocks.Images[i];

                gfx = Graphics.FromImage(img);

                if (_tiles_data != null)
                {
                    update_block(i, _view_type, _tiles_data, _prop_per_block, gfx, img, _scr_type);
                }
                else
                {
                    gfx.Clear(utils.CONST_COLOR_BLOCK_CLEAR);
                }

                m_imagelist_blocks.Images[i] = img;

                gfx.Dispose();
            }

            m_panel_blocks.Refresh();
        }
        public void update_tiles(utils.ETileViewType _view_type, tiles_data _tiles_data, data_sets_manager.EScreenDataType _scr_type)
        {
            Image    img;
            Graphics gfx;

            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                for (int i = 0; i < platform_data.get_max_tiles_cnt(); i++)
                {
                    img = m_imagelist_tiles.Images[i];

                    gfx = Graphics.FromImage(img);

                    if (_tiles_data != null)
                    {
                        update_tile(i, _view_type, _tiles_data, gfx, img, _scr_type);
                    }
                    else
                    {
                        gfx.Clear(utils.CONST_COLOR_TILE_CLEAR);
                    }

                    m_imagelist_tiles.Images[i] = img;

                    gfx.Dispose();
                }

                m_panel_tiles.Refresh();
            }
        }
示例#3
0
 public void set_view_type(utils.ETileViewType _view_type)
 {
     m_tile_editor.view_type = m_block_editor.view_type = m_CHR_bank_viewer.view_type = _view_type;
 }
        public void insert_screen(bool _all_banks_list, int _CHR_bank_ind, int _scr_local_ind, int _scr_global_ind, List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type)
        {
            int i;
            int size;

            m_listview_screens.BeginUpdate();

            Bitmap bmp = create_screen_image(_scr_local_ind, _tiles_data[_CHR_bank_ind], _scr_type, _view_type);

            if (_scr_global_ind == m_scr_list.count())
            {
                // add image
                m_scr_list.add(bmp);
            }
            else
            {
                // insert image
                m_scr_list.add(bmp);

                size = m_scr_list.count();

                for (i = size - 1; i > _scr_global_ind; i--)
                {
                    m_scr_list.replace(i, m_scr_list.get(i - 1));
                }

                m_scr_list.replace(_scr_global_ind, bmp);
            }

            ListViewItem lst = new ListViewItem();

            lst.Name       = lst.Text = utils.get_screen_id_str(_CHR_bank_ind, _scr_local_ind);
            lst.ImageIndex = _scr_global_ind;

            int insert_ind = _all_banks_list ? _scr_global_ind:_scr_local_ind;

            m_listview_screens.Items.Insert(insert_ind, lst);

            size = m_listview_screens.Items.Count;

            for (i = insert_ind + 1; i < size; i++)
            {
                lst = m_listview_screens.Items[i];

                ++lst.ImageIndex;
            }

            m_listview_screens.EndUpdate();
        }
        private Bitmap create_screen_image(int _screen_n, tiles_data _data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type)
        {
#if DEF_SCREEN_DRAW_FAST
            Image block_img;
#endif
            int tile_n;
            int block_n;

            ushort tile_id;

            int tile_offs_x;
            int tile_offs_y;

            palette_group.Instance.set_palette(_data);

            Bitmap bmp = new Bitmap(platform_data.get_screen_width_pixels(), platform_data.get_screen_height_pixels(), PixelFormat.Format32bppPArgb);

            Graphics gfx = Graphics.FromImage(bmp);

            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
            gfx.PixelOffsetMode   = PixelOffsetMode.None;

            gfx.Clear(utils.CONST_COLOR_SCREEN_CLEAR);

            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                for (tile_n = 0; tile_n < platform_data.get_screen_tiles_cnt(); tile_n++)
                {
                    tile_id = _data.get_screen_tile(_screen_n, tile_n);

                    tile_offs_x = (tile_n % platform_data.get_screen_tiles_width()) << 5;
                    tile_offs_y = (tile_n / platform_data.get_screen_tiles_width()) << 5;

                    for (block_n = 0; block_n < utils.CONST_BLOCK_SIZE; block_n++)
                    {
#if DEF_SCREEN_DRAW_FAST
                        block_img = m_imagelist_blocks.Images[_data.get_tile_block(tile_id, block_n)];

                        gfx.DrawImage(block_img, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y, block_img.Width >> 1, block_img.Height >> 1);
#else
#if DEF_ZX
                        utils.update_block_gfx(_data.get_tile_block(tile_id, block_n), _data, gfx, 8, 8, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y, utils.get_draw_block_flags_by_view_type(_view_type));
#else
                        utils.update_block_gfx(_data.get_tile_block(tile_id, block_n), _data, gfx, 8, 8, ((block_n % 2) << 4) + tile_offs_x, ((block_n >> 1) << 4) + tile_offs_y);
#endif
#endif
                    }
                }
            }
            else
            {
                for (tile_n = 0; tile_n < platform_data.get_screen_blocks_cnt(); tile_n++)
                {
#if DEF_SCREEN_DRAW_FAST
                    block_img = m_imagelist_blocks.Images[_data.get_screen_tile(_screen_n, tile_n)];

                    gfx.DrawImage(block_img, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4), block_img.Width >> 1, block_img.Height >> 1);
#else
#if DEF_ZX
                    utils.update_block_gfx(_data.get_screen_tile(_screen_n, tile_n), _data, gfx, 8, 8, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4), utils.get_draw_block_flags_by_view_type(_view_type));
#else
                    utils.update_block_gfx(_data.get_screen_tile(_screen_n, tile_n), _data, gfx, 8, 8, ((tile_n % platform_data.get_screen_blocks_width()) << 4), ((tile_n / platform_data.get_screen_blocks_width()) << 4));
#endif
#endif
                }
            }

            return(bmp);
        }
        public void update_screens(List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, bool _update_images, utils.ETileViewType _view_type, int _bank_id = -1)
        {
            m_listview_screens.BeginUpdate();

            m_listview_screens.Items.Clear();

            tiles_data   data;
            ListViewItem lst;

            int img_ind;
            int screens_cnt;
            int screens_ind = 0;
            int banks_cnt   = _tiles_data.Count;

            for (int bank_n = 0; bank_n < banks_cnt; bank_n++)
            {
                data = _tiles_data[bank_n];

                screens_cnt = data.screen_data_cnt();

                if ((_bank_id >= 0 && _bank_id == bank_n) || _bank_id < 0)
                {
                    palette_group.Instance.set_palette(data);

                    for (int screen_n = 0; screen_n < screens_cnt; screen_n++)
                    {
                        img_ind = screens_ind + screen_n;

                        if (_update_images)
                        {
                            m_scr_list.get(img_ind).Dispose();
                            m_scr_list.replace(img_ind, create_screen_image(screen_n, data, _scr_type, _view_type));
                        }

                        lst            = new ListViewItem();
                        lst.Name       = lst.Text = utils.get_screen_id_str(bank_n, screen_n);
                        lst.ImageIndex = img_ind;

                        m_listview_screens.Items.Add(lst);
                    }
                }

                screens_ind += screens_cnt;
            }

            m_listview_screens.EndUpdate();
        }
        public void update_all_screens(List <tiles_data> _tiles_data, data_sets_manager.EScreenDataType _scr_type, utils.ETileViewType _view_type)
        {
            m_listview_screens.BeginUpdate();

            // clear items
            {
                m_scr_list.clear();
                m_listview_screens.Items.Clear();
            }

            tiles_data   data;
            ListViewItem lst;

            int screens_cnt;
            int img_ind   = 0;
            int banks_cnt = _tiles_data.Count;

            for (int bank_n = 0; bank_n < banks_cnt; bank_n++)
            {
                data = _tiles_data[bank_n];

                palette_group.Instance.set_palette(data);

                screens_cnt = data.screen_data_cnt();

                for (int screen_n = 0; screen_n < screens_cnt; screen_n++)
                {
                    m_scr_list.add(create_screen_image(screen_n, data, _scr_type, _view_type));

                    lst            = new ListViewItem();
                    lst.Name       = lst.Text = utils.get_screen_id_str(bank_n, screen_n);
                    lst.ImageIndex = img_ind;

                    ++img_ind;

                    m_listview_screens.Items.Add(lst);
                }
            }

            m_listview_screens.EndUpdate();
        }
        public void update_block(int _block_ind, utils.ETileViewType _view_type, tiles_data _tiles_data, bool _prop_per_block, Graphics _gfx, Image _img, data_sets_manager.EScreenDataType _scr_type)
        {
            int obj_id;

            Image img;

            if (_img != null)
            {
                img = _img;
            }
            else
            {
                img = m_imagelist_blocks.Images[_block_ind];
            }

            Graphics gfx;

            if (_gfx != null)
            {
                gfx = _gfx;
            }
            else
            {
                gfx = Graphics.FromImage(img);
            }

            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
            gfx.PixelOffsetMode   = PixelOffsetMode.Half;

#if DEF_ZX
            utils.update_block_gfx(_block_ind, _tiles_data, gfx, img.Width >> 1, img.Height >> 1, 0, 0, utils.get_draw_block_flags_by_view_type(_view_type));
#else
            utils.update_block_gfx(_block_ind, _tiles_data, gfx, img.Width >> 1, img.Height >> 1);
#endif
            if (_view_type == utils.ETileViewType.tvt_ObjectId)              // obj id
            {
                if (_prop_per_block)
                {
                    obj_id = tiles_data.get_block_flags_obj_id(_tiles_data.blocks[_block_ind << 2]);

                    utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | m_clrs_arr[obj_id]);

                    draw_block_info(String.Format("{0}", obj_id), gfx);
                }
                else
                {
                    for (int chr_n = 0; chr_n < utils.CONST_BLOCK_SIZE; chr_n++)
                    {
                        obj_id = tiles_data.get_block_flags_obj_id(_tiles_data.blocks[(_block_ind << 2) + chr_n]);

                        utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | m_clrs_arr[obj_id]);

                        m_block_rect.X = ((chr_n & 0x01) == 0x01) ? m_block_rect.Width:0;
                        m_block_rect.Y = ((chr_n & 0x02) == 0x02) ? m_block_rect.Height:0;

                        gfx.FillRectangle(utils.brush, m_block_rect);
                    }
                }
            }
            else
            if (_view_type == utils.ETileViewType.tvt_BlocksUsage)              // usage
            {
                utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | 0x00ffffff);

                draw_block_info(String.Format("{0}", _tiles_data.get_block_usage(( ushort )_block_ind, _scr_type)), gfx);
            }
            else
            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Blocks2x2)
            {
                if (_view_type == utils.ETileViewType.tvt_Number)                  // block id
                {
                    utils.brush.Color = Color.FromArgb((CONST_ALPHA << 24) | 0x00ffffff);

                    draw_block_info(String.Format("{0:X2}", _block_ind), gfx);
                }
            }

            if (_img == null)
            {
                m_imagelist_blocks.Images[_block_ind] = img;
            }

            if (_gfx == null)
            {
                gfx.Dispose();
            }
        }
        public void update_tile(int _tile_ind, utils.ETileViewType _view_type, tiles_data _tiles_data, Graphics _gfx, Image _img, data_sets_manager.EScreenDataType _scr_type)
        {
#if DEF_TILE_DRAW_FAST
            Image block_img;
#else
            ushort[] blocks_arr = null;
            byte[]   CHR_data   = null;

            // draw a block from CHR bank sprites
            if (_tiles_data != null)
            {
                blocks_arr = _tiles_data.blocks;
                CHR_data   = _tiles_data.CHR_bank;
            }
#endif //DEF_TILE_DRAW_FAST

            Image img;

            if (_img != null)
            {
                img = _img;
            }
            else
            {
                img = m_imagelist_tiles.Images[_tile_ind];
            }

            Graphics gfx;

            if (_gfx != null)
            {
                gfx = _gfx;
            }
            else
            {
                gfx = Graphics.FromImage(img);
            }

            gfx.InterpolationMode = InterpolationMode.NearestNeighbor;
            gfx.PixelOffsetMode   = PixelOffsetMode.None;

#if DEF_TILE_DRAW_FAST
            for (int j = 0; j < utils.CONST_TILE_SIZE; j++)
            {
                block_img = m_imagelist_blocks.Images[_tiles_data.get_tile_block(_tile_ind, j)];

                gfx.DrawImage(block_img, ((j % 2) << 5), ((j >> 1) << 5), block_img.Width, block_img.Height);
            }
#else
            // draw a block from CHR bank sprites
            for (int j = 0; j < utils.CONST_TILE_SIZE; j++)
            {
                utils.update_block_gfx(_tiles_data.get_tile_block(_tile_ind, j), blocks_arr, CHR_data, gfx, utils.CONST_BLOCKS_IMG_SIZE >> 1, utils.CONST_BLOCKS_IMG_SIZE >> 1, ((j % 2) << 5), ((j >> 1) << 5));
            }
#endif //DEF_TILE_DRAW_FAST

            if (_scr_type == data_sets_manager.EScreenDataType.sdt_Tiles4x4)
            {
                if (_view_type == utils.ETileViewType.tvt_Number)                  // tile id
                {
                    draw_tile_info(String.Format("{0:X2}", _tile_ind), gfx);
                }
                else
                if (_view_type == utils.ETileViewType.tvt_TilesUsage)                  // usage
                {
                    draw_tile_info(String.Format("{0}", _tiles_data.get_tile_usage(( ushort )_tile_ind, _scr_type)), gfx);
                }
            }

            if (_img == null)
            {
                m_imagelist_tiles.Images[_tile_ind] = img;
            }

            if (_gfx == null)
            {
                gfx.Dispose();
            }
        }