Skip to content

Commit b104b6c

Browse files
committed
fix(IManagedValue): fix missing logic
- Fix missing bit index parameter and logic for packed stats.
1 parent ea31eef commit b104b6c

3 files changed

Lines changed: 50 additions & 22 deletions

File tree

SSV2/includes/structs/IManagedStat.lua

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ local IManagedValue = require("includes.structs.IManagedValue")
1616
---@field protected m_id joaat_t|string tuneable name or joaat hash
1717
---@field protected m_type eManagedValueDataType
1818
---@field protected m_default_val? T
19+
---@field protected m_bit_index? integer
1920
---@field protected m_modified boolean
20-
---@field private __get fun(t: joaat_t|string): T
21-
---@field private __set fun(t: joaat_t|string, v: T): nil
21+
---@field private __get fun(): T
22+
---@field private __set fun(v: T): nil
2223
local IManagedStat <const> = setmetatable({}, IManagedValue)
2324
IManagedStat.__index = IManagedStat
2425

@@ -28,16 +29,20 @@ IManagedStat.__index = IManagedStat
2829
---@param dataType eManagedValueDataType
2930
---@param desired_val integer|float|boolean
3031
---@param packed? boolean
32+
---@param bit_index? integer only for masked stats
3133
---@return IManagedStat<T>
3234
---@overload fun(name: string, identifier: ID, dataType: 1, desired_val: integer, packed?: boolean): IManagedStat<integer>
3335
---@overload fun(name: string, identifier: ID, dataType: 2, desired_val: float, packed?: boolean): IManagedStat<float>
3436
---@overload fun(name: string, identifier: ID, dataType: 3, desired_val: boolean, packed?: boolean): IManagedStat<boolean>
35-
---@overload fun(name: string, identifier: ID, dataType: 4, desired_val: boolean, packed?: boolean): IManagedStat<boolean>
36-
function IManagedStat.new(name, stat, dataType, desired_val, packed)
37+
---@overload fun(name: string, identifier: ID, dataType: 4, desired_val: boolean, packed: false, bit_index: integer): IManagedStat<boolean>
38+
function IManagedStat.new(name, stat, dataType, desired_val, packed, bit_index)
39+
if (dataType == Enums.eManagedValueDataType.BOOL_MASKED and bit_index ~= nil) then
40+
packed = false
41+
end
42+
3743
local statType = packed and Enums.eManagedValueType.PACKED_STAT or Enums.eManagedValueType.STAT
38-
local base = IManagedValue.new(name, stat, statType, dataType, desired_val)
39-
local instance = setmetatable(base, IManagedStat) ---@cast instance IManagedStat
40-
return instance
44+
local base = IManagedValue.new(name, stat, statType, dataType, desired_val, bit_index)
45+
return setmetatable(base, IManagedStat)
4146
end
4247

4348
return IManagedStat

SSV2/includes/structs/IManagedTuneable.lua

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ local IManagedValue = require("includes.structs.IManagedValue")
1717
---@field protected m_type eManagedValueDataType
1818
---@field protected m_default_val? T
1919
---@field protected m_modified boolean
20-
---@field private __get fun(t: joaat_t|string): T
21-
---@field private __set fun(t: joaat_t|string, v: T): nil
20+
---@field private __get fun(): T
21+
---@field private __set fun(v: T): nil
2222
local IManagedTuneable <const> = setmetatable({}, IManagedValue)
2323
IManagedTuneable.__index = IManagedTuneable
2424

@@ -33,9 +33,8 @@ IManagedTuneable.__index = IManagedTuneable
3333
---@overload fun(name: string, identifier: ID, dataType: 3, desired_val: boolean): IManagedTuneable<boolean>
3434
---@overload fun(name: string, identifier: ID, dataType: 4, desired_val: boolean): IManagedTuneable<boolean>
3535
function IManagedTuneable.new(name, tuneable, dataType, desired_val)
36-
local base = IManagedValue.new(name, tuneable, Enums.eManagedValueType.TUNEABLE, dataType, desired_val)
37-
local instance = setmetatable(base, IManagedTuneable) ---@cast instance IManagedTuneable
38-
return instance
36+
local base = IManagedValue.new(name, tuneable, Enums.eManagedValueType.TUNEABLE, dataType, desired_val)
37+
return setmetatable(base, IManagedTuneable)
3938
end
4039

4140
return IManagedTuneable

SSV2/includes/structs/IManagedValue.lua

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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
4950
local IManagedValue <const> = {}
5051
IManagedValue.__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

@@ -120,7 +144,7 @@ end
120144
function 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
125149
end
126150

@@ -142,7 +166,7 @@ end
142166

143167
---@return T
144168
function IManagedValue:GetValue()
145-
return self.__get(self.m_id)
169+
return self.__get()
146170
end
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
159183
end
@@ -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
168192
end
169193

0 commit comments

Comments
 (0)