From 5f58789d7865a6408d75bcf67d4f723f4e07c73f Mon Sep 17 00:00:00 2001 From: Error Date: Mon, 10 Feb 2025 20:50:18 -0800 Subject: [PATCH 1/3] fix(StateMachine/init): Added `state.OnHeartbeat` to `_stateTrove` --- src/StateMachine/init.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/StateMachine/init.lua b/src/StateMachine/init.lua index 8e47c7b..518013b 100644 --- a/src/StateMachine/init.lua +++ b/src/StateMachine/init.lua @@ -271,7 +271,9 @@ function StateMachine.new(initialState: string, states: {State}, initialData: {[ return end - task.spawn(state.OnHeartbeat, state, self:GetData(), deltaTime) + self._stateTrove:Add( + task.spawn(state.OnHeartbeat, state, self:GetData(), deltaTime) + ) end)) self._trove:Add(self.StateChanged) From 3385cc128fa7f34a1b2086027b0116bc782a40ad Mon Sep 17 00:00:00 2001 From: Error Date: Mon, 10 Feb 2025 22:01:06 -0800 Subject: [PATCH 2/3] feat(StateMachine/init): Added most `state` methods to `_stateTrove` --- src/StateMachine/init.lua | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/StateMachine/init.lua b/src/StateMachine/init.lua index 518013b..843fe62 100644 --- a/src/StateMachine/init.lua +++ b/src/StateMachine/init.lua @@ -271,9 +271,7 @@ function StateMachine.new(initialState: string, states: {State}, initialData: {[ return end - self._stateTrove:Add( - task.spawn(state.OnHeartbeat, state, self:GetData(), deltaTime) - ) + self:_CallMethod(state, false, "OnHeartbeat", self:GetData(), deltaTime) end)) self._trove:Add(self.StateChanged) @@ -337,7 +335,7 @@ function StateMachine:ChangeData(index: string, newValue: any): () self.Data[index] = newValue local state: State = self._States[self:GetCurrentState()] - task.spawn(state.OnDataChanged, state, self.Data, index, newValue, oldValue) + self:_CallMethod(state, false, "OnDataChanged", self.Data, index, newValue, oldValue) self.DataChanged:Fire(self.Data, index, newValue, oldValue) end @@ -527,7 +525,7 @@ function StateMachine:_ChangeState(newState: string): () task.defer(function() self:_CallTransitions(state, "OnEnter", self:GetData()) end) - self._stateTrove:Add(task.defer(state.OnEnter, state, self:GetData())) + self:_CallMethod(state, true, "OnEnter", self:GetData()) self._CurrentState = newState @@ -582,6 +580,25 @@ function StateMachine:_CallTransitions(state: State, methodName: string, ...: an end end +--[=[ + Calls the corresponding method for the given state. (to be cleaned up later) + + @param state State + @param methodName string + @param shouldDefer boolean? + @param ... any + + @private + + @return () +]=] +function StateMachine:_CallMethod(state: State, shouldDefer: boolean, methodName: string, ...: any): () + local action = shouldDefer and "defer" or "spawn" + + self._stateTrove:Add( + task[action](state[methodName], state, ...) + ) +end export type RobloxStateMachine = typeof(StateMachine) export type State = State.State export type Transition = Transition.Transition From 7157fb2c94d6b9d5460a9078ed7fce69774b017c Mon Sep 17 00:00:00 2001 From: Error Date: Mon, 10 Feb 2025 22:08:06 -0800 Subject: [PATCH 3/3] style(StateMachine/init): Nitpicked `_trove:Connect` instead of `_trove:Add` --- src/StateMachine/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/StateMachine/init.lua b/src/StateMachine/init.lua index 843fe62..0656d67 100644 --- a/src/StateMachine/init.lua +++ b/src/StateMachine/init.lua @@ -253,7 +253,7 @@ function StateMachine.new(initialState: string, states: {State}, initialData: {[ end local previousState: State = nil - self._trove:Add(RunService.Heartbeat:Connect(function(deltaTime: number) + self._trove:Connect(RunService.Heartbeat, function(deltaTime: number) if self._Destroyed then return end @@ -272,7 +272,7 @@ function StateMachine.new(initialState: string, states: {State}, initialData: {[ end self:_CallMethod(state, false, "OnHeartbeat", self:GetData(), deltaTime) - end)) + end) self._trove:Add(self.StateChanged) self._trove:Add(self.DataChanged)