From 1f580491c778cdf033e198d64cb6c637a5507794 Mon Sep 17 00:00:00 2001 From: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> Date: Wed, 25 Jun 2025 02:04:25 -0700 Subject: [PATCH] feat: add speed behavior (#1831) --- dGame/dComponents/ModelComponent.cpp | 2 ++ dGame/dComponents/ModelComponent.h | 7 ++++++- dGame/dPropertyBehaviors/Strip.cpp | 16 +++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/dGame/dComponents/ModelComponent.cpp b/dGame/dComponents/ModelComponent.cpp index 128b014f..07eafd45 100644 --- a/dGame/dComponents/ModelComponent.cpp +++ b/dGame/dComponents/ModelComponent.cpp @@ -37,6 +37,7 @@ bool ModelComponent::OnResetModelToDefaults(GameMessages::GameMsg& msg) { m_Parent->SetRotation(m_OriginalRotation); m_Parent->SetVelocity(NiPoint3Constant::ZERO); + m_Speed = 3.0f; m_NumListeningInteract = 0; m_NumActiveUnSmash = 0; m_Dirty = true; @@ -279,6 +280,7 @@ bool ModelComponent::TrySetVelocity(const NiPoint3& velocity) const { currentVelocity = velocity; } + currentVelocity *= m_Speed; m_Parent->SetVelocity(currentVelocity); return true; } diff --git a/dGame/dComponents/ModelComponent.h b/dGame/dComponents/ModelComponent.h index d70718de..90715108 100644 --- a/dGame/dComponents/ModelComponent.h +++ b/dGame/dComponents/ModelComponent.h @@ -66,7 +66,7 @@ public: * * @tparam Msg The message type to pass * @param args the arguments of the message to be deserialized - * + * * @return returns true if a new behaviorID is needed. */ template @@ -145,6 +145,8 @@ public: void SetVelocity(const NiPoint3& velocity) const; void OnChatMessageReceived(const std::string& sMessage); + + void SetSpeed(const float newSpeed) { m_Speed = newSpeed; } private: // Loads a behavior from the database. @@ -185,4 +187,7 @@ private: * The ID of the user that made the model */ LWOOBJID m_userModelID; + + // The speed at which this model moves + float m_Speed{ 3.0f }; }; diff --git a/dGame/dPropertyBehaviors/Strip.cpp b/dGame/dPropertyBehaviors/Strip.cpp index 2a5f25a0..03c6ceb9 100644 --- a/dGame/dPropertyBehaviors/Strip.cpp +++ b/dGame/dPropertyBehaviors/Strip.cpp @@ -8,6 +8,7 @@ #include "ChatPackets.h" #include "PropertyManagementComponent.h" #include "PlayerManager.h" +#include "SimplePhysicsComponent.h" #include "dChatFilter.h" @@ -154,16 +155,18 @@ void Strip::ProcNormalAction(float deltaTime, ModelComponent& modelComponent) { if (nextActionType == "MoveRight" || nextActionType == "MoveLeft") { // X axis bool isMoveLeft = nextActionType == "MoveLeft"; + int negative = isMoveLeft ? -1 : 1; // Default velocity is 3 units per second. - if (modelComponent.TrySetVelocity(NiPoint3{ isMoveLeft ? -3.0f : 3.0f, 0.0f, 0.0f })) { + if (modelComponent.TrySetVelocity(NiPoint3Constant::UNIT_X * negative)) { m_PreviousFramePosition = entity.GetPosition(); m_InActionMove.x = isMoveLeft ? -number : number; } } else if (nextActionType == "FlyUp" || nextActionType == "FlyDown") { // Y axis bool isFlyDown = nextActionType == "FlyDown"; + int negative = isFlyDown ? -1 : 1; // Default velocity is 3 units per second. - if (modelComponent.TrySetVelocity(NiPoint3{ 0.0f, isFlyDown ? -3.0f : 3.0f, 0.0f })) { + if (modelComponent.TrySetVelocity(NiPoint3Constant::UNIT_Y * negative)) { m_PreviousFramePosition = entity.GetPosition(); m_InActionMove.y = isFlyDown ? -number : number; } @@ -171,14 +174,21 @@ void Strip::ProcNormalAction(float deltaTime, ModelComponent& modelComponent) { } else if (nextActionType == "MoveForward" || nextActionType == "MoveBackward") { // Z axis bool isMoveBackward = nextActionType == "MoveBackward"; + int negative = isMoveBackward ? -1 : 1; // Default velocity is 3 units per second. - if (modelComponent.TrySetVelocity(NiPoint3{ 0.0f, 0.0f, isMoveBackward ? -3.0f : 3.0f })) { + if (modelComponent.TrySetVelocity(NiPoint3Constant::UNIT_Z * negative)) { m_PreviousFramePosition = entity.GetPosition(); m_InActionMove.z = isMoveBackward ? -number : number; } } /* END Move */ + /* BEGIN Navigation */ + else if (nextActionType == "SetSpeed") { + modelComponent.SetSpeed(number); + } + /* END Navigation */ + /* BEGIN Action */ else if (nextActionType == "Smash") { if (!modelComponent.IsUnSmashing()) {