diff options
| author | 2021-04-09 03:04:35 -0700 | |
|---|---|---|
| committer | 2021-04-09 03:04:35 -0700 | |
| commit | b8c568b279f9ebaedac014d51eb48ed9b530566a (patch) | |
| tree | 2b7ece212eedac9271d6603bae4566b805411ccf /src/emu/tilemap.cpp | |
| parent | adf5af551b54e165d9d95370cc569f4bf63b54bc (diff) | |
Created new hierarchical save_registrar, which supports self-describing structs and arrays. Converted several core files and structures over to using it. Currently just for testing.
Diffstat (limited to 'src/emu/tilemap.cpp')
| -rw-r--r-- | src/emu/tilemap.cpp | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/src/emu/tilemap.cpp b/src/emu/tilemap.cpp index 5757f35341f..1981e4a461e 100644 --- a/src/emu/tilemap.cpp +++ b/src/emu/tilemap.cpp @@ -361,7 +361,7 @@ void tilemap_t::init_common( m_manager = &manager; m_device = dynamic_cast<device_t *>(this); m_palette = &decoder.palette(); - m_next = nullptr; +// m_next = nullptr; m_user_data = nullptr; // populate tilemap metrics @@ -416,20 +416,6 @@ void tilemap_t::init_common( for (int group = 0; group < TILEMAP_NUM_GROUPS; group++) map_pens_to_layer(group, 0, 0, TILEMAP_PIXEL_LAYER0); - // save relevant state - int instance = manager.alloc_instance(); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_enable)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_attributes)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_palette_offset)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_scrollrows)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_scrollcols)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_rowscroll)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_colscroll)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_dx)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_dx_flipped)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_dy)); - machine().save().save_item(m_device, "tilemap", nullptr, instance, NAME(m_dy_flipped)); - // reset everything after a load machine().save().register_postload(save_prepost_delegate(FUNC(tilemap_t::postload), this)); } @@ -1587,19 +1573,6 @@ tilemap_manager::tilemap_manager(running_machine &machine) tilemap_manager::~tilemap_manager() { - // detach all device tilemaps since they will be destroyed as subdevices elsewhere - bool found = true; - while (found) - { - found = false; - for (tilemap_t &tmap : m_tilemap_list) - if (tmap.m_device) - { - found = true; - m_tilemap_list.detach(tmap); - break; - } - } } @@ -1610,16 +1583,26 @@ tilemap_manager::~tilemap_manager() tilemap_t &tilemap_manager::create(device_gfx_interface &decoder, tilemap_get_info_delegate tile_get_info, tilemap_mapper_delegate mapper, u16 tilewidth, u16 tileheight, u32 cols, u32 rows, tilemap_t *allocated) { - if (!allocated) - allocated = new tilemap_t(machine().root_device()); - return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, mapper, tilewidth, tileheight, cols, rows)); + if (allocated != nullptr) + m_device_tilemap_list.push_back(allocated); + else + { + m_tilemap_list.push_back(std::make_unique<tilemap_t>(machine().root_device())); + allocated = m_tilemap_list.back().get(); + } + return allocated->init(*this, decoder, tile_get_info, mapper, tilewidth, tileheight, cols, rows); } tilemap_t &tilemap_manager::create(device_gfx_interface &decoder, tilemap_get_info_delegate tile_get_info, tilemap_standard_mapper mapper, u16 tilewidth, u16 tileheight, u32 cols, u32 rows, tilemap_t *allocated) { - if (!allocated) - allocated = new tilemap_t(machine().root_device()); - return m_tilemap_list.append(allocated->init(*this, decoder, tile_get_info, mapper, tilewidth, tileheight, cols, rows)); + if (allocated != nullptr) + m_device_tilemap_list.push_back(allocated); + else + { + m_tilemap_list.push_back(std::make_unique<tilemap_t>(machine().root_device())); + allocated = m_tilemap_list.back().get(); + } + return allocated->init(*this, decoder, tile_get_info, mapper, tilewidth, tileheight, cols, rows); } @@ -1630,8 +1613,10 @@ tilemap_t &tilemap_manager::create(device_gfx_interface &decoder, tilemap_get_in void tilemap_manager::set_flip_all(u32 attributes) { - for (tilemap_t &tmap : m_tilemap_list) - tmap.set_flip(attributes); + for (auto &tmap : m_tilemap_list) + tmap->set_flip(attributes); + for (auto &tmap : m_device_tilemap_list) + tmap->set_flip(attributes); } @@ -1642,8 +1627,10 @@ void tilemap_manager::set_flip_all(u32 attributes) void tilemap_manager::mark_all_dirty() { - for (tilemap_t &tmap : m_tilemap_list) - tmap.mark_all_dirty(); + for (auto &tmap : m_tilemap_list) + tmap->mark_all_dirty(); + for (auto &tmap : m_device_tilemap_list) + tmap->mark_all_dirty(); } |
