X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fscene.h;fp=nageru%2Fscene.h;h=8db75540559cfa29bf45611319e19380bb56fc1c;hb=1924bea4fde26067d8ee81cfd12f2dd66c5b2cad;hp=77155479adeb2f25280a0b822b67de0f2044541f;hpb=948d715655a84b93d8292e64731ea3c32b45deb7;p=nageru diff --git a/nageru/scene.h b/nageru/scene.h index 7715547..8db7554 100644 --- a/nageru/scene.h +++ b/nageru/scene.h @@ -88,7 +88,21 @@ struct Block { std::vector alternatives; // Must all have the same amount of inputs. Pointers to make things easier for Lua. std::vector inputs; // One for each input of alternatives[0] (ie., typically 0 or 1, occasionally 2). - std::vector disablers; // If any of these are disabled (IdentityEffect chosen), so should this one. + + // If any of these effects are disabled (IdentityEffect chosen) + // or enabled (not chosen) as determined by , so should this one. + struct Disabler { + Index block_idx; + enum { + DISABLE_IF_OTHER_DISABLED, + + // This a promise from the user; ie., we don't disable automatically + // (see comments in find_disabled_blocks()). + DISABLE_IF_OTHER_ENABLED + } condition; + std::string declaration_point; // For error messages. + }; + std::vector disablers; int currently_chosen_alternative = 0; // What alternative to use if the block is disabled. // Points to an alternative with IDENTITY_EFFECT if it exists @@ -125,6 +139,7 @@ int Block_enable(lua_State *L); int Block_enable_if(lua_State *L); int Block_disable(lua_State *L); int Block_always_disable_if_disabled(lua_State *L); +int Block_promise_to_disable_if_enabled(lua_State *L); int Block_set_int(lua_State *L); int Block_set_float(lua_State *L); int Block_set_vec3(lua_State *L);