[NL] ui скрипта

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
12 Фев 2021
Сообщения
123
Реакции
21
Всем добрый день, как сделать что бы когда чек бокс выключен определенные элементы скрипта пропадали?
Писал скрипты на нл в2, а на нл в3 не могу допереть
Буду очень благодарен, тому, кто поможет.
 
code_language.lua:
Expand Collapse Copy
__ui.dependence = { } do
    __ui.dependence.new = function( self )
      local dependence = { }
        dependence.__list = { }
        dependence.__elements = { }
        dependence.__state = false

        dependence.push = function( self, ... )
          local dependencies = { ... }
        
          for i, dependence in ipairs( dependencies ) do
            table.insert( self.__list, dependence )
            table.insert( self.__elements, dependence[ 1 ] )
          end
        end

        dependence.elements = function( self )
          return self.__elements
        end

        dependence.update = function( self )
          local state = true

          for i, dependence in ipairs( self.__list ) do
            local element = dependence[ 1 ]
            local condition = dependence[ 2 ]
            local inverse = dependence[ 3 ] or false

            if element:type( ) == "selectable" or element:type( ) == "listable" then
              if element:get( condition ) == inverse then
                state = false
                break
              end

            elseif ( element:get( ) == condition ) == inverse then
              state = false
              break
            end
          end
        
          self.__state = state
        end

        dependence.state = function( self )
          return self.__state
        end

      return setmetatable( dependence, {
        __index = self
      } )
    end

code_language.lua:
Expand Collapse Copy
element.depend = function( self, ... )
          if self.__dependence == nil then
            self.__dependence = __ui.dependence( )
          end

          self.__dependence:push( ... )

          local elements = self.__dependence:elements( )
          for i, parent in ipairs( elements ) do
            parent:set_callback( function( )
              self.__dependence:update( )
              self:visibility( self.__dependence:state( ) )
            end, true )
          end

          return self
        end

element:depend( { element1, element1_value, inverse_condition } )

можешь сразу в метатаблицу скрипта вшить
 
Последнее редактирование:
code_language.lua:
Expand Collapse Copy
__ui.dependence = { } do
    __ui.dependence.new = function( self )
      local dependence = { }
        dependence.__list = { }
        dependence.__elements = { }
        dependence.__state = false

        dependence.push = function( self, ... )
          local dependencies = { ... }
       
          for i, dependence in ipairs( dependencies ) do
            table.insert( self.__list, dependence )
            table.insert( self.__elements, dependence[ 1 ] )
          end
        end

        dependence.elements = function( self )
          return self.__elements
        end

        dependence.update = function( self )
          local state = true

          for i, dependence in ipairs( self.__list ) do
            local element = dependence[ 1 ]
            local condition = dependence[ 2 ]
            local inverse = dependence[ 3 ] or false

            if element:type( ) == "selectable" or element:type( ) == "listable" then
              if element:get( condition ) == inverse then
                state = false
                break
              end

            elseif ( element:get( ) == condition ) == inverse then
              state = false
              break
            end
          end
       
          self.__state = state
        end

        dependence.state = function( self )
          return self.__state
        end

      return setmetatable( dependence, {
        __index = self
      } )
    end

code_language.lua:
Expand Collapse Copy
element.depend = function( self, ... )
          if self.__dependence == nil then
            self.__dependence = __ui.dependence( )
          end

          self.__dependence:push( ... )

          local elements = self.__dependence:elements( )
          for i, parent in ipairs( elements ) do
            parent:set_callback( function( )
              self.__dependence:update( )
              self:visibility( self.__dependence:state( ) )
            end, true )
          end

          return self
        end

element:depend( { element1, element1_value, inverse_condition } )

можешь сразу в метатаблицу скрипта вшить
это нельзя сделать проще? допустим как в примо через set_visible
 
это нельзя сделать проще? допустим как в примо через set_visible
Это просто удобнее. Если хочешь писать кучу строк - дело твое
code_language.lua:
Expand Collapse Copy
local sm_switch = group:switch( "switch1", false )
local sm_switch2 = group:switch( "switch2", false )

sm_switch:set_callback( function( ref )
    sm_switch2:visibility( ref:get( ) == true )
end, true )
 
Это просто удобнее. Если хочешь писать кучу строк - дело твое
code_language.lua:
Expand Collapse Copy
local sm_switch = group:switch( "switch1", false )
local sm_switch2 = group:switch( "switch2", false )

sm_switch:set_callback( function( ref )
    sm_switch2:visibility( ref:get( ) == true )
end, true )
спасибо большое
 
code_language.lua:
Expand Collapse Copy
__ui.dependence = { } do
    __ui.dependence.new = function( self )
      local dependence = { }
        dependence.__list = { }
        dependence.__elements = { }
        dependence.__state = false

        dependence.push = function( self, ... )
          local dependencies = { ... }
       
          for i, dependence in ipairs( dependencies ) do
            table.insert( self.__list, dependence )
            table.insert( self.__elements, dependence[ 1 ] )
          end
        end

        dependence.elements = function( self )
          return self.__elements
        end

        dependence.update = function( self )
          local state = true

          for i, dependence in ipairs( self.__list ) do
            local element = dependence[ 1 ]
            local condition = dependence[ 2 ]
            local inverse = dependence[ 3 ] or false

            if element:type( ) == "selectable" or element:type( ) == "listable" then
              if element:get( condition ) == inverse then
                state = false
                break
              end

            elseif ( element:get( ) == condition ) == inverse then
              state = false
              break
            end
          end
       
          self.__state = state
        end

        dependence.state = function( self )
          return self.__state
        end

      return setmetatable( dependence, {
        __index = self
      } )
    end

code_language.lua:
Expand Collapse Copy
element.depend = function( self, ... )
          if self.__dependence == nil then
            self.__dependence = __ui.dependence( )
          end

          self.__dependence:push( ... )

          local elements = self.__dependence:elements( )
          for i, parent in ipairs( elements ) do
            parent:set_callback( function( )
              self.__dependence:update( )
              self:visibility( self.__dependence:state( ) )
            end, true )
          end

          return self
        end

element:depend( { element1, element1_value, inverse_condition } )

можешь сразу в метатаблицу скрипта вшить
и как это юзать?
 
Это просто удобнее. Если хочешь писать кучу строк - дело твое
code_language.lua:
Expand Collapse Copy
local sm_switch = group:switch( "switch1", false )
local sm_switch2 = group:switch( "switch2", false )

sm_switch:set_callback( function( ref )
    sm_switch2:visibility( ref:get( ) == true )
end, true )
то что ты показал это хуйня какая-то
 
Ну не все же шарят за метатаблицы ооп и всё то что должен знать нормальный кодер
Метатаблицы я тут юзаю только для псевдо-инкапсуляции ( костыль через __ ) и для нормальных конструкторов как в C-подобных языках
Вместо того чтобы писать
class:new( ... ) или class.new( ... )
можно писать просто
class( ... )

А в остальном переделать все не составит труда, можно вместо объекта просто таблицу новую создавать и все, а так же переделать depend и засунуть в какой нибудь utils, передавая первым аргументом элемент, который должен будет зависеть от других
 
Назад
Сверху Снизу