feat: Add Restart Behavior (#1836)

Resets the model to the default state at the end of the models frame.  Will see if in the future designers want this to be more strict on the resetting timing.
This commit is contained in:
David Markowitz 2025-06-29 00:22:20 -07:00 committed by GitHub
parent 55d181ea4b
commit c697f8ad97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 17 additions and 0 deletions

View File

@ -63,6 +63,12 @@ void ModelComponent::Update(float deltaTime) {
for (auto& behavior : m_Behaviors) { for (auto& behavior : m_Behaviors) {
behavior.Update(deltaTime, *this); behavior.Update(deltaTime, *this);
} }
if (!m_RestartAtEndOfFrame) return;
GameMessages::ResetModelToDefaults reset{};
OnResetModelToDefaults(reset);
m_RestartAtEndOfFrame = false;
} }
void ModelComponent::LoadBehaviors() { void ModelComponent::LoadBehaviors() {

View File

@ -146,7 +146,11 @@ public:
void OnChatMessageReceived(const std::string& sMessage); void OnChatMessageReceived(const std::string& sMessage);
// Sets the speed of the model
void SetSpeed(const float newSpeed) { m_Speed = newSpeed; } void SetSpeed(const float newSpeed) { m_Speed = newSpeed; }
// Whether or not to restart at the end of the frame
void RestartAtEndOfFrame() { m_RestartAtEndOfFrame = true; }
private: private:
// Loads a behavior from the database. // Loads a behavior from the database.
@ -190,4 +194,7 @@ private:
// The speed at which this model moves // The speed at which this model moves
float m_Speed{ 3.0f }; float m_Speed{ 3.0f };
// Whether or not to restart at the end of the frame.
bool m_RestartAtEndOfFrame{ false };
}; };

View File

@ -221,6 +221,8 @@ void Strip::ProcNormalAction(float deltaTime, ModelComponent& modelComponent) {
sound.target = modelComponent.GetParent()->GetObjectID(); sound.target = modelComponent.GetParent()->GetObjectID();
sound.soundID = numberAsInt; sound.soundID = numberAsInt;
sound.Send(UNASSIGNED_SYSTEM_ADDRESS); sound.Send(UNASSIGNED_SYSTEM_ADDRESS);
} else if (nextActionType == "Restart") {
modelComponent.RestartAtEndOfFrame();
} }
/* END Action */ /* END Action */
/* BEGIN Gameplay */ /* BEGIN Gameplay */

View File

@ -65,6 +65,8 @@ private:
// The position of the parent model on the previous frame // The position of the parent model on the previous frame
NiPoint3 m_PreviousFramePosition{}; NiPoint3 m_PreviousFramePosition{};
NiPoint3 m_SavedVelocity{};
}; };
#endif //!__STRIP__H__ #endif //!__STRIP__H__