From 5a8cccb37e6832197fac3afa0fa39cf83283d5af Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sun, 16 Jun 2019 11:02:11 +0200 Subject: [PATCH] Add an enable_if() to Block, for convenience. --- nageru/scene.cpp | 14 ++++++++++++++ nageru/scene.h | 1 + nageru/theme.cpp | 1 + 3 files changed, 16 insertions(+) diff --git a/nageru/scene.cpp b/nageru/scene.cpp index 6c3a039..ccb3b1b 100644 --- a/nageru/scene.cpp +++ b/nageru/scene.cpp @@ -531,6 +531,20 @@ int Block_enable(lua_State *L) return 0; } +int Block_enable_if(lua_State *L) +{ + assert(lua_gettop(L) == 2); + Block *block = *(Block **)luaL_checkudata(L, 1, "Block"); + + if (block->alternatives.size() != 2 || + block->alternatives[1]->effect_type != IDENTITY_EFFECT) { + luaL_error(L, "enable_if() called on something that wasn't added with add_optional_effect()"); + } + bool enabled = checkbool(L, 2); + block->currently_chosen_alternative = enabled ? 0 : 1; + return 0; +} + int Block_disable(lua_State *L) { assert(lua_gettop(L) == 1); diff --git a/nageru/scene.h b/nageru/scene.h index b659429..7d83a27 100644 --- a/nageru/scene.h +++ b/nageru/scene.h @@ -110,6 +110,7 @@ struct Block { int Block_display(lua_State* L); int Block_choose(lua_State* L); int Block_enable(lua_State *L); +int Block_enable_if(lua_State *L); int Block_disable(lua_State *L); int Block_set_int(lua_State *L); int Block_set_float(lua_State *L); diff --git a/nageru/theme.cpp b/nageru/theme.cpp index 53b7543..d31a4b9 100644 --- a/nageru/theme.cpp +++ b/nageru/theme.cpp @@ -793,6 +793,7 @@ const luaL_Reg Block_funcs[] = { { "display", Block_display }, { "choose", Block_choose }, { "enable", Block_enable }, + { "enable_if", Block_enable_if }, { "disable", Block_disable }, { "set_int", Block_set_int }, { "set_float", Block_set_float }, -- 2.39.2