summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/tilemap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/tilemap.h')
-rw-r--r--src/emu/tilemap.h39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/emu/tilemap.h b/src/emu/tilemap.h
index 119319d32af..7acd649e2e0 100644
--- a/src/emu/tilemap.h
+++ b/src/emu/tilemap.h
@@ -370,7 +370,7 @@ enum tilemap_standard_mapper
#define MCFG_TILEMAP_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, TILEMAP)
#define MCFG_TILEMAP_GFXDECODE(_gfxtag) \
- downcast<tilemap_device &>(*device).set_gfxdecode_tag(_gfxtag);
+ downcast<tilemap_device &>(*device).set_gfxdecode(_gfxtag);
#define MCFG_TILEMAP_BYTES_PER_ENTRY(_bpe) \
downcast<tilemap_device &>(*device).set_bytes_per_entry(_bpe);
#define MCFG_TILEMAP_INFO_CB_DRIVER(_class, _method) \
@@ -717,13 +717,44 @@ class tilemap_device : public device_t,
public tilemap_t
{
public:
- // construction/destruction
+ template <typename T>
+ tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&gfxtag, int entrybytes
+ , u16 tilewidth, u16 tileheight, tilemap_standard_mapper mapper, u32 columns, u32 rows, pen_t transpen)
+ : tilemap_device(mconfig, tag, owner, (u32)0)
+ {
+ set_gfxdecode(std::forward<T>(gfxtag));
+ set_bytes_per_entry(entrybytes);
+ set_layout(mapper, columns, rows);
+ set_tile_size(tilewidth, tileheight);
+ set_configured_transparent_pen(transpen);
+ }
+
+ template <typename T>
+ tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, T &&gfxtag, int entrybytes
+ , u16 tilewidth, u16 tileheight, tilemap_standard_mapper mapper, u32 columns, u32 rows)
+ : tilemap_device(mconfig, tag, owner, (u32)0)
+ {
+ set_gfxdecode(std::forward<T>(gfxtag));
+ set_bytes_per_entry(entrybytes);
+ set_layout(mapper, columns, rows);
+ set_tile_size(tilewidth, tileheight);
+ }
+
tilemap_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
- // configuration
- void set_gfxdecode_tag(const char *tag) { m_gfxdecode.set_tag(tag); }
+ template <typename T> void set_gfxdecode(T &&tag) { m_gfxdecode.set_tag(std::forward<T>(tag)); }
void set_bytes_per_entry(int bpe) { m_bytes_per_entry = bpe; }
+
void set_info_callback(tilemap_get_info_delegate tile_get_info) { m_get_info = tile_get_info; }
+ template <class FunctionClass> void set_info_callback(const char *devname, void (FunctionClass::*callback)(tilemap_t &, tile_data &, tilemap_memory_index), const char *name)
+ {
+ set_info_callback(tilemap_get_info_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
+ }
+ template <class FunctionClass> void set_info_callback(void (FunctionClass::*callback)(tilemap_t &, tile_data &, tilemap_memory_index), const char *name)
+ {
+ set_info_callback(tilemap_get_info_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ }
+
void set_layout(tilemap_standard_mapper mapper, u32 columns, u32 rows) {
m_standard_mapper = mapper;
m_num_columns = columns;