From f24a89a8385b94165c25bdb04ab9f048a2453c74 Mon Sep 17 00:00:00 2001 From: Jeffrey Clark Date: Sun, 14 Feb 2016 18:06:27 -0600 Subject: [PATCH] extend lua api more (nw) --- src/emu/luaengine.cpp | 89 +++++++++++++++++++++++++++++++++++++++++++ src/emu/luaengine.h | 2 + 2 files changed, 91 insertions(+) diff --git a/src/emu/luaengine.cpp b/src/emu/luaengine.cpp index 1e193e6785f..40e7d82af7a 100644 --- a/src/emu/luaengine.cpp +++ b/src/emu/luaengine.cpp @@ -438,6 +438,25 @@ luabridge::LuaRef lua_engine::l_machine_get_devices(const running_machine *r) return devs_table; } +//------------------------------------------------- +// render_get_targets - return table of render targets +// -> manager:machine():render().targets[0] +//------------------------------------------------- + +luabridge::LuaRef lua_engine::l_render_get_targets(const render_manager *r) +{ + lua_State *L = luaThis->m_lua_state; + luabridge::LuaRef target_table = luabridge::LuaRef::newTable(L); + + int tc = 0; + for (render_target *curr_rt = r->first_target(); curr_rt != nullptr; curr_rt = curr_rt->next()) + { + target_table[tc++] = curr_rt; + } + + return target_table; +} + // private helper for get_devices - DFS visit all devices in a running machine luabridge::LuaRef lua_engine::devtree_dfs(device_t *root, luabridge::LuaRef devs_table) { @@ -619,6 +638,36 @@ int lua_engine::lua_addr_space::l_mem_write(lua_State *L) return 0; } +//------------------------------------------------- +// ui_options - return table of options +// -> manager:machine():ui().options[] +//------------------------------------------------- + +luabridge::LuaRef lua_engine::l_ui_get_options(const ui_manager *u) +{ + lua_State *L = luaThis->m_lua_state; + luabridge::LuaRef options_table = luabridge::LuaRef::newTable(L); + + ui_manager &ui = luaThis->machine().ui(); + + int unadorned_index = 0; + for (core_options::entry *curentry = ui.options().first(); curentry != nullptr; curentry = curentry->next()) + { + const char *name = curentry->name(); + bool is_unadorned = false; + // check if it's unadorned + if (name && strlen(name) && !strcmp(name, core_options::unadorned(unadorned_index))) + { + unadorned_index++; + is_unadorned = true; + } + if (!curentry->is_header() && !curentry->is_command() && !curentry->is_internal() && !is_unadorned) + options_table[name] = curentry; + } + + return options_table; +} + int lua_engine::lua_options_entry::l_entry_value(lua_State *L) { core_options::entry *e = luabridge::Stack::get(L, 1); @@ -1234,6 +1283,8 @@ void lua_engine::initialize() .addFunction ("save", &running_machine::schedule_save) .addFunction ("load", &running_machine::schedule_load) .addFunction ("system", &running_machine::system) + .addFunction ("ui", &running_machine::ui) + .addFunction ("render", &running_machine::render) .addProperty ("devices", &lua_engine::l_machine_get_devices) .addProperty ("screens", &lua_engine::l_machine_get_screens) .addProperty ("options", &lua_engine::l_machine_get_options) @@ -1286,6 +1337,44 @@ void lua_engine::initialize() .deriveClass ("addr_space") .addFunction("name", &address_space::name) .endClass() + .beginClass ("target") + .addFunction ("width", &render_target::width) + .addFunction ("height", &render_target::height) + .addFunction ("pixel_aspect", &render_target::pixel_aspect) + .addFunction ("hidden", &render_target::hidden) + .addFunction ("is_ui_target", &render_target::is_ui_target) + .addFunction ("index", &render_target::index) + .addProperty ("max_update_rate", &render_target::max_update_rate, &render_target::set_max_update_rate) + .addProperty ("view", &render_target::view, &render_target::set_view) + .addProperty ("orientation", &render_target::orientation, &render_target::set_orientation) + .addProperty ("backdrops", &render_target::backdrops_enabled, &render_target::set_backdrops_enabled) + .addProperty ("overlays", &render_target::overlays_enabled, &render_target::set_overlays_enabled) + .addProperty ("bezels", &render_target::bezels_enabled, &render_target::set_bezels_enabled) + .addProperty ("marquees", &render_target::marquees_enabled, &render_target::set_marquees_enabled) + .addProperty ("screen_overlay", &render_target::screen_overlay_enabled, &render_target::set_screen_overlay_enabled) + .addProperty ("zoom", &render_target::zoom_to_screen, &render_target::set_zoom_to_screen) + .endClass() + .beginClass ("render_container") + .addFunction ("orientation", &render_container::orientation) + .addFunction ("xscale", &render_container::xscale) + .addFunction ("yscale", &render_container::yscale) + .addFunction ("xoffset", &render_container::xoffset) + .addFunction ("yoffset", &render_container::yoffset) + .addFunction ("is_empty", &render_container::is_empty) + .endClass() + .beginClass ("render") + .addFunction ("max_update_rate", &render_manager::max_update_rate) + .addFunction ("ui_target", &render_manager::ui_target) + .addFunction ("ui_container", &render_manager::ui_container) + .addProperty ("targets", &lua_engine::l_render_get_targets) + .endClass() + .beginClass ("ui") + .addFunction ("is_menu_active", &ui_manager::is_menu_active) + .addProperty ("show_fps", &ui_manager::show_fps, &ui_manager::set_show_fps) + .addProperty ("show_profiler", &ui_manager::show_profiler, &ui_manager::set_show_profiler) + .addProperty ("single_step", &ui_manager::single_step, &ui_manager::set_single_step) + .addProperty ("options", &lua_engine::l_ui_get_options) + .endClass() .beginClass ("lua_screen_dev") .addCFunction ("draw_box", &lua_screen::l_draw_box) .addCFunction ("draw_line", &lua_screen::l_draw_line) diff --git a/src/emu/luaengine.h b/src/emu/luaengine.h index dc2df29a463..72f28a06c15 100644 --- a/src/emu/luaengine.h +++ b/src/emu/luaengine.h @@ -120,6 +120,7 @@ private: // "emu.machine" namespace static luabridge::LuaRef l_machine_get_options(const running_machine *r); static luabridge::LuaRef l_machine_get_devices(const running_machine *r); + static luabridge::LuaRef l_render_get_targets(const render_manager *r); static luabridge::LuaRef devtree_dfs(device_t *root, luabridge::LuaRef dev_table); static luabridge::LuaRef l_dev_get_states(const device_t *d); static UINT64 l_state_get_value(const device_state_entry *d); @@ -141,6 +142,7 @@ private: int l_draw_text(lua_State *L); }; + static luabridge::LuaRef l_ui_get_options(const ui_manager *ui); struct lua_options_entry { int l_entry_value(lua_State *L); };