]> git.sesse.net Git - nageru/blobdiff - nageru/scene.h
Make it possible for the theme to override the status line.
[nageru] / nageru / scene.h
index 83346647236eb0ecda7aa512ec1fead4172940bf..77155479adeb2f25280a0b822b67de0f2044541f 100644 (file)
@@ -78,7 +78,7 @@ struct Block {
        size_t cardinality_base = 0;
 
        // Find the chosen alternative for this block in a given instance.
-       size_t chosen_alternative(size_t chain_idx) const {
+       int chosen_alternative(size_t chain_idx) const {
                if (chain_idx == size_t(-1)) {
                        return currently_chosen_alternative;
                } else {
@@ -88,7 +88,12 @@ struct Block {
 
        std::vector<EffectBlueprint *> alternatives;  // Must all have the same amount of inputs. Pointers to make things easier for Lua.
        std::vector<Index> inputs;  // One for each input of alternatives[0] (ie., typically 0 or 1, occasionally 2).
+       std::vector<Index> disablers;  // If any of these are disabled (IdentityEffect chosen), so should this one.
        int currently_chosen_alternative = 0;
+       // What alternative to use if the block is disabled.
+       // Points to an alternative with IDENTITY_EFFECT if it exists
+       // (to disable as much as possible), otherwise 0.
+       int canonical_alternative = 0;
        bool is_input = false;
 
        // For LIVE_INPUT* only. We can't just always populate signal_to_connect,
@@ -110,6 +115,8 @@ struct Block {
        std::map<std::string, float> float_parameters;
        std::map<std::string, std::array<float, 3>> vec3_parameters;
        std::map<std::string, std::array<float, 4>> vec4_parameters;
+
+       std::string declaration_point;  // For error messages.
 };
 
 int Block_display(lua_State* L);
@@ -117,6 +124,7 @@ 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_always_disable_if_disabled(lua_State *L);
 int Block_set_int(lua_State *L);
 int Block_set_float(lua_State *L);
 int Block_set_vec3(lua_State *L);
@@ -152,7 +160,7 @@ private:
        std::bitset<256> find_disabled_blocks(size_t chain_idx) const;
        void find_disabled_blocks(size_t chain_idx, size_t block_idx, bool currently_disabled, std::bitset<256> *disabled) const;
 
-       // If a block is disabled, it should always have alternative 0 chosen,
+       // If a block is disabled, it should always have canonical_alternative chosen,
        // so that we don't instantiate a bunch of irrelevant duplicates that
        // differ only in disabled blocks. You can check this property with
        // is_noncanonical_chain() and then avoid instantiating the ones where