@@ -43,9 +43,10 @@ local TypeRefs <const> = {
4343--- @field protected m_data_type eManagedValueDataType
4444--- @field protected m_default_val ? T
4545--- @field protected m_desired_val T
46+ --- @field protected m_bit_index ? integer
4647--- @field private m_modified boolean
47- --- @field private __get fun (t : joaat_t | string ): T
48- --- @field private __set fun (t : joaat_t | string , v : T )
48+ --- @field private __get fun (): T
49+ --- @field private __set fun (v : T ): nil
4950local IManagedValue <const> = {}
5051IManagedValue .__index = IManagedValue
5152
@@ -55,12 +56,18 @@ IManagedValue.__index = IManagedValue
5556--- @param valueType eManagedValueType
5657--- @param dataType eManagedValueDataType
5758--- @param desired_val integer | float | boolean
59+ --- @param bit_index ? integer only for masked stats
5860--- @return IManagedValue<T>
5961--- @overload fun ( name : string , identifier : ID , valueType : eManagedValueType , dataType : 1, desired_val : integer ): IManagedValue<integer>
6062--- @overload fun ( name : string , identifier : ID , valueType : eManagedValueType , dataType : 2, desired_val : float ): IManagedValue<float>
6163--- @overload fun ( name : string , identifier : ID , valueType : eManagedValueType , dataType : 3, desired_val : boolean ): IManagedValue<boolean>
62- --- @overload fun ( name : string , identifier : ID , valueType : 2, dataType : 4, desired_val : boolean ): IManagedValue<boolean>
63- function IManagedValue .new (name , identifier , valueType , dataType , desired_val )
64+ --- @overload fun ( name : string , identifier : ID , valueType : 2, dataType : 4, desired_val : boolean , bit_index : integer ): IManagedValue<boolean>
65+ function IManagedValue .new (name , identifier , valueType , dataType , desired_val , bit_index )
66+ local isMasked = valueType == Enums .eManagedValueType .STAT and dataType == Enums .eManagedValueDataType .BOOL_MASKED
67+ if (isMasked ) then
68+ assert (type (bit_index ) == " number" , " Missing parameter: bit_index<integer>!" )
69+ end
70+
6471 local ref = TypeRefs [valueType ]
6572 assert (ref ~= nil , " Unknown type reference." )
6673
@@ -78,15 +85,32 @@ function IManagedValue.new(name, identifier, valueType, dataType, desired_val)
7885 )
7986 end
8087
88+ local getWrapper = function ()
89+ if (isMasked ) then
90+ return get_func (identifier , bit_index )
91+ else
92+ return get_func (identifier )
93+ end
94+ end
95+
96+ local setWrapper = function (v )
97+ if (isMasked ) then
98+ set_func (identifier , v , bit_index )
99+ else
100+ set_func (identifier , v )
101+ end
102+ end
103+
81104 local instance = setmetatable ({
82105 m_name = name ,
83106 m_id = identifier ,
84107 m_managed_type = valueType ,
85108 m_data_type = dataType ,
86109 m_desired_val = desired_val ,
110+ m_bit_index = isMasked and bit_index or nil ,
87111 m_modified = false ,
88- __get = get_func ,
89- __set = set_func
112+ __get = getWrapper ,
113+ __set = setWrapper
90114 }, IManagedValue )
91115
92116
120144function IManagedValue :SaveDefaultValue ()
121145 if (not self :CanAccess ()) then return end
122146
123- local default = self .__get (self . m_id )
147+ local default = self .__get ()
124148 self .m_default_val = default
125149end
126150
142166
143167--- @return T
144168function IManagedValue :GetValue ()
145- return self .__get (self . m_id )
169+ return self .__get ()
146170end
147171
148172--- @nodiscard
@@ -153,7 +177,7 @@ function IManagedValue:Apply()
153177 return false
154178 end
155179
156- self .__set (self .m_id , self . m_desired_val )
180+ self .__set (self .m_desired_val )
157181 self .m_modified = true
158182 return true
159183end
@@ -163,7 +187,7 @@ function IManagedValue:Reset()
163187 return
164188 end
165189
166- self .__set (self .m_id , self . m_default_val )
190+ self .__set (self .m_default_val )
167191 self .m_modified = false
168192end
169193
0 commit comments