Skip to content

Commit 8476117

Browse files
committed
refactor: Fix OOP inheritance
1 parent 64def70 commit 8476117

101 files changed

Lines changed: 1207 additions & 861 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/acceltween/src/Shared/AccelTween.lua

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ function AccelTween:__index(index)
103103
if AccelTween[index] then
104104
return AccelTween[index]
105105
elseif index == "p" then
106-
local pos, _ = self:_getstate(os.clock())
106+
local pos, _ = self:_getState(os.clock())
107107
return pos
108108
elseif index == "v" then
109-
local _, vel = self:_getstate(os.clock())
109+
local _, vel = self:_getState(os.clock())
110110
return vel
111111
elseif index == "a" then
112112
return self._accel
@@ -122,21 +122,21 @@ end
122122

123123
function AccelTween:__newindex(index, value)
124124
if index == "p" then
125-
self:_setstate(value, nil, nil, nil)
125+
self:_setState(value, nil, nil, nil)
126126
elseif index == "v" then
127-
self:_setstate(nil, value, nil, nil)
127+
self:_setState(nil, value, nil, nil)
128128
elseif index == "a" then
129-
self:_setstate(nil, nil, value, nil)
129+
self:_setState(nil, nil, value, nil)
130130
elseif index == "t" then
131-
self:_setstate(nil, nil, nil, value)
131+
self:_setState(nil, nil, nil, value)
132132
elseif index == "pt" then
133-
self:_setstate(value, 0, nil, value)
133+
self:_setState(value, 0, nil, value)
134134
else
135135
error(string.format("Bad index %q", tostring(index)))
136136
end
137137
end
138138

139-
function AccelTween:_getstate(time)
139+
function AccelTween:_getState(time)
140140
if time < (self._t0 + self._t1) / 2 then
141141
local t = time - self._t0
142142
return self._y0 + t * t / 2 * self._a0, t * self._a0
@@ -148,9 +148,9 @@ function AccelTween:_getstate(time)
148148
end
149149
end
150150

151-
function AccelTween:_setstate(newpos, newvel, newaccel, newtarg)
151+
function AccelTween:_setState(newpos, newvel, newaccel, newtarg)
152152
local time = os.clock()
153-
local pos, vel = self:_getstate(time)
153+
local pos, vel = self:_getState(time)
154154
pos = newpos or pos
155155
vel = newvel or vel
156156
self._accel = newaccel or self._accel

src/adorneeboundingbox/src/Shared/AdorneeBoundingBox.lua

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,16 @@ local AdorneeBoundingBox = setmetatable({}, BaseObject)
2020
AdorneeBoundingBox.ClassName = "AdorneeBoundingBox"
2121
AdorneeBoundingBox.__index = AdorneeBoundingBox
2222

23-
export type AdorneeBoundingBox = typeof(setmetatable({}, AdorneeBoundingBox))
24-
25-
function AdorneeBoundingBox.new(initialAdornee: Instance): AdorneeBoundingBox
23+
export type AdorneeBoundingBox = typeof(setmetatable(
24+
{} :: {
25+
_adornee: ValueObject.ValueObject<Instance?>,
26+
_bbCFrame: ValueObject.ValueObject<CFrame?>,
27+
_bbSize: ValueObject.ValueObject<Vector3?>,
28+
},
29+
{} :: typeof({ __index = AdorneeBoundingBox })
30+
)) & BaseObject.BaseObject
31+
32+
function AdorneeBoundingBox.new(initialAdornee: Instance?): AdorneeBoundingBox
2633
local self = setmetatable(BaseObject.new() :: any, AdorneeBoundingBox)
2734

2835
self._adornee = self._maid:Add(ValueObject.new(initialAdornee))
@@ -45,7 +52,7 @@ function AdorneeBoundingBox.new(initialAdornee: Instance): AdorneeBoundingBox
4552
return self
4653
end
4754

48-
function AdorneeBoundingBox:SetAdornee(adornee: Instance?): () -> ()
55+
function AdorneeBoundingBox.SetAdornee(self: AdorneeBoundingBox, adornee: Instance?): () -> ()
4956
assert(typeof(adornee) == "Instance" or adornee == nil, "Bad adornee")
5057

5158
self._adornee.Value = adornee
@@ -66,7 +73,7 @@ export type BoundingBoxData = {
6673
Observes the bounding box of the adornee
6774
@return Observable<BoundingBoxData>
6875
]=]
69-
function AdorneeBoundingBox:ObserveBoundingBox(): _Observable.Observable<BoundingBoxData>
76+
function AdorneeBoundingBox.ObserveBoundingBox(self: AdorneeBoundingBox): _Observable.Observable<BoundingBoxData>
7077
return Rx.combineLatest({
7178
CFrame = self:ObserveCFrame(),
7279
Size = self:ObserveSize(),
@@ -81,7 +88,7 @@ end
8188
Gets the bounding box of the adornee
8289
@return BoundingBoxData?
8390
]=]
84-
function AdorneeBoundingBox:GetBoundingBox(): BoundingBoxData?
91+
function AdorneeBoundingBox.GetBoundingBox(self: AdorneeBoundingBox): BoundingBoxData?
8592
local cframe = self._bbCFrame.Value
8693
local size = self._bbSize.Value
8794

@@ -99,35 +106,35 @@ end
99106
Observes the cframe of the adornee
100107
@return Observable<Vector3>
101108
]=]
102-
function AdorneeBoundingBox:ObserveCFrame(): _Observable.Observable<CFrame>
109+
function AdorneeBoundingBox.ObserveCFrame(self: AdorneeBoundingBox): _Observable.Observable<CFrame?>
103110
return self._bbCFrame:Observe()
104111
end
105112

106113
--[=[
107114
Gets the CFrame of the adornee
108115
@return Vector3
109116
]=]
110-
function AdorneeBoundingBox:GetCFrame(): CFrame?
117+
function AdorneeBoundingBox.GetCFrame(self: AdorneeBoundingBox): CFrame?
111118
return self._bbCFrame.Value
112119
end
113120

114121
--[=[
115122
Observes the size of the adornee
116123
@return Observable<Vector3>
117124
]=]
118-
function AdorneeBoundingBox:ObserveSize(): _Observable.Observable<Vector3>
125+
function AdorneeBoundingBox.ObserveSize(self: AdorneeBoundingBox): _Observable.Observable<Vector3?>
119126
return self._bbSize:Observe()
120127
end
121128

122129
--[=[
123130
Gets the size of the adornee
124131
@return Vector3
125132
]=]
126-
function AdorneeBoundingBox:GetSize(): Vector3
133+
function AdorneeBoundingBox.GetSize(self: AdorneeBoundingBox): Vector3?
127134
return self._bbSize.Value
128135
end
129136

130-
function AdorneeBoundingBox:_setup(maid: Maid.Maid, adornee: Instance)
137+
function AdorneeBoundingBox._setup(self: AdorneeBoundingBox, maid: Maid.Maid, adornee: Instance)
131138
if adornee:IsA("BasePart") then
132139
maid:GiveTask(self:_setupPart(adornee))
133140
elseif adornee:IsA("Model") then
@@ -150,7 +157,7 @@ function AdorneeBoundingBox:_setup(maid: Maid.Maid, adornee: Instance)
150157
end
151158
end
152159

153-
function AdorneeBoundingBox:_setupTool(tool: Tool): Maid.Maid
160+
function AdorneeBoundingBox._setupTool(self: AdorneeBoundingBox, tool: Tool): Maid.Maid
154161
assert(typeof(tool) == "Instance" and tool:IsA("Tool"), "Bad tool")
155162

156163
local topMaid = Maid.new()
@@ -160,17 +167,16 @@ function AdorneeBoundingBox:_setupTool(tool: Tool): Maid.Maid
160167
return
161168
end
162169

163-
local maid = brio:ToMaid()
164-
local handle = brio:GetValue()
170+
local maid, handle = brio:ToMaidAndValue()
165171

166172
-- TODO: Something smarter? But we'll need to change the AdorneeUtils contract too
167-
maid:GiveTask(self:_setupPart(handle))
173+
maid:GiveTask(self:_setupPart(handle :: BasePart))
168174
end))
169175

170176
return topMaid
171177
end
172178

173-
function AdorneeBoundingBox:_setupModel(model: Model): Maid.Maid
179+
function AdorneeBoundingBox._setupModel(self: AdorneeBoundingBox, model: Model): Maid.Maid
174180
assert(typeof(model) == "Instance" and model:IsA("Model"), "Bad model")
175181

176182
local topMaid = Maid.new()
@@ -186,7 +192,7 @@ function AdorneeBoundingBox:_setupModel(model: Model): Maid.Maid
186192
return topMaid
187193
end
188194

189-
function AdorneeBoundingBox:_setupHumanoid(humanoid: Humanoid): Maid.Maid
195+
function AdorneeBoundingBox._setupHumanoid(self: AdorneeBoundingBox, humanoid: Humanoid): Maid.Maid
190196
assert(typeof(humanoid) == "Instance" and humanoid:IsA("Humanoid"), "Bad humanoid")
191197

192198
local topMaid = Maid.new()
@@ -206,7 +212,7 @@ function AdorneeBoundingBox:_setupHumanoid(humanoid: Humanoid): Maid.Maid
206212
return topMaid
207213
end
208214

209-
function AdorneeBoundingBox:_setupAttachment(attachment: Attachment): Maid.Maid
215+
function AdorneeBoundingBox._setupAttachment(self: AdorneeBoundingBox, attachment: Attachment): Maid.Maid
210216
assert(typeof(attachment) == "Instance" and attachment:IsA("Attachment"), "Bad attachment")
211217

212218
local maid = Maid.new()
@@ -217,7 +223,7 @@ function AdorneeBoundingBox:_setupAttachment(attachment: Attachment): Maid.Maid
217223
return parent ~= nil
218224
end)
219225
:Pipe({
220-
RxBrioUtils.switchMapBrio(function(parent)
226+
RxBrioUtils.switchMapBrio(function(parent): any
221227
if parent:IsA("BasePart") then
222228
return Rx.combineLatest({
223229
partCFrame = RxPartBoundingBoxUtils.observePartCFrame(parent),
@@ -240,7 +246,7 @@ function AdorneeBoundingBox:_setupAttachment(attachment: Attachment): Maid.Maid
240246
return maid
241247
end
242248

243-
function AdorneeBoundingBox:_setupPart(part: BasePart): Maid.Maid
249+
function AdorneeBoundingBox._setupPart(self: AdorneeBoundingBox, part: BasePart): Maid.Maid
244250
assert(typeof(part) == "Instance" and part:IsA("BasePart"), "Bad part")
245251

246252
local maid = Maid.new()

src/adorneevalue/src/Shared/AdorneeValue.lua

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
--!strict
12
--[=[
23
Helper class to transform a an adornee into relative positions/information
34
@class AdorneeValue
@@ -12,21 +13,32 @@ local BaseObject = require("BaseObject")
1213
local Blend = require("Blend")
1314
local ValueObject = require("ValueObject")
1415
local _Observable = require("Observable")
16+
local _Signal = require("Signal")
1517

1618
local AdorneeValue = setmetatable({}, BaseObject)
1719
AdorneeValue.ClassName = "AdorneeValue"
1820
AdorneeValue.__index = AdorneeValue
1921

22+
export type AdorneeValueOption = Instance | CFrame | Vector3
23+
24+
export type AdorneeValue = typeof(setmetatable(
25+
{} :: {
26+
_adornee: ValueObject.ValueObject<AdorneeValueOption?>,
27+
Value: AdorneeValueOption?,
28+
Changed: _Signal.Signal<(AdorneeValueOption?, AdorneeValueOption?)>,
29+
},
30+
{} :: typeof({ __index = AdorneeValue })
31+
)) & BaseObject.BaseObject
32+
2033
--[=[
2134
Constructs a new AdorneeValue
2235
2336
@return AdorneeValue
2437
]=]
25-
function AdorneeValue.new()
26-
local self = setmetatable(BaseObject.new(), AdorneeValue)
38+
function AdorneeValue.new(): AdorneeValue
39+
local self: AdorneeValue = setmetatable(BaseObject.new() :: any, AdorneeValue)
2740

28-
self._adornee = ValueObject.new()
29-
self._maid:GiveTask(self._adornee)
41+
self._adornee = self._maid:Add(ValueObject.new())
3042

3143
return self
3244
end
@@ -36,7 +48,7 @@ end
3648
3749
@return Instance | CFrame | Vector3 | nil
3850
]=]
39-
function AdorneeValue:GetAdornee(): (Instance | CFrame | Vector3)?
51+
function AdorneeValue.GetAdornee(self: AdorneeValue): (Instance | CFrame | Vector3)?
4052
return self._adornee.Value
4153
end
4254

@@ -45,7 +57,7 @@ end
4557
4658
@return Observable<Instance | CFrame | Vector3 | nil>
4759
]=]
48-
function AdorneeValue:Observe(): _Observable.Observable<(Instance | CFrame | Vector3)?>
60+
function AdorneeValue.Observe(self: AdorneeValue): _Observable.Observable<(Instance | CFrame | Vector3)?>
4961
return self._adornee:Observe()
5062
end
5163

@@ -61,7 +73,7 @@ end
6173
@prop Value Instance | CFrame | Vector3 | nil
6274
@within AdorneeValue
6375
]=]
64-
function AdorneeValue:__index(index)
76+
(AdorneeValue :: any).__index = function(self, index)
6577
if index == "Value" then
6678
return self._adornee.Value
6779
elseif index == "Changed" then
@@ -76,7 +88,7 @@ function AdorneeValue:__index(index)
7688
end
7789
end
7890

79-
function AdorneeValue:__newindex(index, value)
91+
function AdorneeValue.__newindex(self, index, value)
8092
if index == "Value" then
8193
assert(
8294
typeof(value) == "Instance" or typeof(value) == "Vector3" or typeof(value) == "CFrame" or value == nil,
@@ -100,7 +112,7 @@ end
100112
101113
@return Observable<CFrame | nil>
102114
]=]
103-
function AdorneeValue:ObserveBottomCFrame()
115+
function AdorneeValue.ObserveBottomCFrame(self: AdorneeValue)
104116
return Blend.Computed(self._adornee, function(adornee: Instance): CFrame?
105117
if typeof(adornee) == "CFrame" then
106118
return adornee
@@ -128,7 +140,7 @@ end
128140
129141
@return Observable<Vector3 | nil>
130142
]=]
131-
function AdorneeValue:ObserveCenterPosition()
143+
function AdorneeValue.ObserveCenterPosition(self: AdorneeValue): _Observable.Observable<Vector3?>
132144
return Blend.Computed(self._adornee, function()
133145
return self:GetCenterPosition()
134146
end)
@@ -139,7 +151,7 @@ end
139151
140152
@return Vector3 | nil
141153
]=]
142-
function AdorneeValue:GetCenterPosition(): Vector3?
154+
function AdorneeValue.GetCenterPosition(self: AdorneeValue): Vector3?
143155
local adornee = self._adornee.Value
144156

145157
if typeof(adornee) == "CFrame" then
@@ -162,7 +174,7 @@ end
162174
163175
@return Observable<number?>
164176
]=]
165-
function AdorneeValue:ObserveRadius()
177+
function AdorneeValue.ObserveRadius(self: AdorneeValue)
166178
return Blend.Computed(self._adornee, function()
167179
return self:GetRadius()
168180
end)
@@ -173,7 +185,7 @@ end
173185
174186
@return number?
175187
]=]
176-
function AdorneeValue:GetRadius(): number?
188+
function AdorneeValue.GetRadius(self: AdorneeValue): number?
177189
local adornee = self._adornee.Value
178190

179191
if typeof(adornee) == "CFrame" then
@@ -204,7 +216,7 @@ end
204216
@param observeRadius Observable<number>
205217
@return Observable
206218
]=]
207-
function AdorneeValue:ObservePositionTowards(observeTargetPosition, observeRadius)
219+
function AdorneeValue.ObservePositionTowards(self: AdorneeValue, observeTargetPosition, observeRadius)
208220
-- TODO: Some sort of de-duplication/multicast.
209221

210222
return Blend.Computed(
@@ -226,16 +238,21 @@ end
226238
@param center Vector3
227239
@return Vector3
228240
]=]
229-
function AdorneeValue:GetPositionTowards(target: Vector3, radius: number, center: Vector3): Vector3?
241+
function AdorneeValue.GetPositionTowards(self: AdorneeValue, target: Vector3, radius: number, center: Vector3): Vector3?
230242
assert(typeof(target) == "Vector3", "Bad target")
231243

232-
center = center or self:GetCenterPosition()
233-
radius = radius or self:GetRadius()
244+
center = center or assert(self:GetCenterPosition(), "Bad center")
245+
radius = radius or assert(self:GetRadius(), "Bad radius")
234246

235247
return self:_getPositionTowards(target, radius, center)
236248
end
237249

238-
function AdorneeValue:_getPositionTowards(target: Vector3, radius: number, center: Vector3): Vector3?
250+
function AdorneeValue._getPositionTowards(
251+
_self: AdorneeValue,
252+
target: Vector3,
253+
radius: number,
254+
center: Vector3
255+
): Vector3?
239256
if not (radius and target and center) then
240257
return nil
241258
end
@@ -245,7 +262,7 @@ function AdorneeValue:_getPositionTowards(target: Vector3, radius: number, cente
245262
return nil
246263
end
247264

248-
return center + offset.unit * radius
265+
return center + offset.Unit * radius
249266
end
250267

251268
--[=[
@@ -254,7 +271,7 @@ end
254271
255272
@return Observable<Instance?>
256273
]=]
257-
function AdorneeValue:ObserveAttachmentParent()
274+
function AdorneeValue.ObserveAttachmentParent(self: AdorneeValue)
258275
return Blend.Computed(self._adornee, function(adornee): Instance?
259276
if typeof(adornee) == "Instance" then
260277
-- TODO: Nearest bounding box stuff.
@@ -283,7 +300,7 @@ end
283300
@param props {} -- Takes [Blend.Children] as an option
284301
@return Observable<Instance?>
285302
]=]
286-
function AdorneeValue:RenderPositionAttachment(props)
303+
function AdorneeValue.RenderPositionAttachment(self: AdorneeValue, props)
287304
props = props or {}
288305

289306
local observeWorldPosition = props.WorldPosition or self:ObserveCenterPosition()

0 commit comments

Comments
 (0)