[NL] ui скрипта

Начинающий
Статус
Оффлайн
Регистрация
12 Фев 2021
Сообщения
121
Реакции[?]
20
Поинты[?]
5K
Всем добрый день, как сделать что бы когда чек бокс выключен определенные элементы скрипта пропадали?
Писал скрипты на нл в2, а на нл в3 не могу допереть
Буду очень благодарен, тому, кто поможет.
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,746
Реакции[?]
1,465
Поинты[?]
2K
code_language.lua:
__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:
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 } )

можешь сразу в метатаблицу скрипта вшить
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
12 Фев 2021
Сообщения
121
Реакции[?]
20
Поинты[?]
5K
code_language.lua:
__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:
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
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,746
Реакции[?]
1,465
Поинты[?]
2K
это нельзя сделать проще? допустим как в примо через set_visible
Это просто удобнее. Если хочешь писать кучу строк - дело твое
code_language.lua:
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 )
 
Начинающий
Статус
Оффлайн
Регистрация
12 Фев 2021
Сообщения
121
Реакции[?]
20
Поинты[?]
5K
Это просто удобнее. Если хочешь писать кучу строк - дело твое
code_language.lua:
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 )
спасибо большое
 
Начинающий
Статус
Оффлайн
Регистрация
30 Апр 2022
Сообщения
194
Реакции[?]
8
Поинты[?]
1K
code_language.lua:
__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:
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 } )

можешь сразу в метатаблицу скрипта вшить
и как это юзать?
 
Участник
Статус
Оффлайн
Регистрация
21 Сен 2019
Сообщения
1,009
Реакции[?]
183
Поинты[?]
9K
Это просто удобнее. Если хочешь писать кучу строк - дело твое
code_language.lua:
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 )
то что ты показал это хуйня какая-то
 
Эксперт
Статус
Оффлайн
Регистрация
14 Ноя 2020
Сообщения
1,796
Реакции[?]
586
Поинты[?]
2K
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,746
Реакции[?]
1,465
Поинты[?]
2K
Ну не все же шарят за метатаблицы ооп и всё то что должен знать нормальный кодер
Метатаблицы я тут юзаю только для псевдо-инкапсуляции ( костыль через __ ) и для нормальных конструкторов как в C-подобных языках
Вместо того чтобы писать
class:new( ... ) или class.new( ... )
можно писать просто
class( ... )

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