From 6a5ff30a32a7cdacf008bf9b4e644878488ed7a8 Mon Sep 17 00:00:00 2001 From: David Markowitz Date: Sun, 6 Aug 2023 23:40:30 -0700 Subject: [PATCH] Working built in reverse for movementAI --- dGame/dComponents/MovementAIComponent.cpp | 15 +++++++++++---- dGame/dComponents/MovementAIComponent.h | 9 ++++++--- dMasterServer/MasterServer.cpp | 1 + dScripts/ai/MINIGAME/SG_GF/SERVER/SGCannon.cpp | 2 +- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/dGame/dComponents/MovementAIComponent.cpp b/dGame/dComponents/MovementAIComponent.cpp index bfd96963..7f17fb18 100644 --- a/dGame/dComponents/MovementAIComponent.cpp +++ b/dGame/dComponents/MovementAIComponent.cpp @@ -143,10 +143,10 @@ nextAction: bool MovementAIComponent::AdvancePathWaypointIndex() { m_CurrentPathWaypointIndex = m_NextPathWaypointIndex; if (m_IsInReverse) { - if (m_CurrentPathWaypointIndex > 0) m_NextPathWaypointIndex--; - return m_NextPathWaypointIndex >= 0; + if (m_CurrentPathWaypointIndex >= 0) m_NextPathWaypointIndex--; + return m_CurrentPathWaypointIndex >= 0; } else { - if (m_CurrentPathWaypointIndex < m_CurrentPath.size()) m_NextPathWaypointIndex++; + if (m_CurrentPathWaypointIndex <= m_CurrentPath.size()) m_NextPathWaypointIndex++; return m_CurrentPathWaypointIndex < m_CurrentPath.size(); } } @@ -237,6 +237,13 @@ void MovementAIComponent::PullToPoint(const NiPoint3& point) { m_PullPoint = point; } +const NiPoint3& MovementAIComponent::GetCurrentPathWaypoint() const { + if (m_CurrentPathWaypointIndex >= m_CurrentPath.size() || m_CurrentPathWaypointIndex < 0) { + return m_Parent->GetPosition(); + } + return m_CurrentPath.at(m_CurrentPathWaypointIndex); +} + void MovementAIComponent::SetPath(std::vector path, bool startInReverse) { if (path.empty()) return; m_CurrentPath = path; @@ -247,7 +254,7 @@ void MovementAIComponent::SetPath(std::vector path, bool startInRevers m_CurrentPathWaypointIndex = m_IsInReverse ? m_CurrentPath.size() - 1 : 0; m_NextPathWaypointIndex = m_IsInReverse ? m_CurrentPath.size() - 1 : 0; AdvancePathWaypointIndex(); - SetDestination(m_CurrentPath.front()); + SetDestination(GetCurrentPathWaypoint()); } float MovementAIComponent::GetBaseSpeed(LOT lot) { diff --git a/dGame/dComponents/MovementAIComponent.h b/dGame/dComponents/MovementAIComponent.h index 7d7257a6..5148dfdf 100644 --- a/dGame/dComponents/MovementAIComponent.h +++ b/dGame/dComponents/MovementAIComponent.h @@ -194,7 +194,7 @@ public: // Advance the path waypoint index and return if there is a next waypoint bool AdvancePathWaypointIndex(); - const NiPoint3& GetCurrentPathWaypoint() const { return m_CurrentPathWaypointIndex < m_CurrentPath.size() ? m_CurrentPath.at(m_CurrentPathWaypointIndex) : m_Parent->GetPosition(); } + const NiPoint3& GetCurrentPathWaypoint() const; /** * Returns the base speed from the DB for a given LOT @@ -311,13 +311,16 @@ private: /** * The index of the current waypoint in the path */ - uint32_t m_CurrentPathWaypointIndex; + int32_t m_CurrentPathWaypointIndex; /** * The index of the current waypoint in the path */ - uint32_t m_NextPathWaypointIndex; + int32_t m_NextPathWaypointIndex; + /** + * Whether or not the path is being read in reverse + */ bool m_IsInReverse; }; diff --git a/dMasterServer/MasterServer.cpp b/dMasterServer/MasterServer.cpp index f56cad7f..ad46aa4a 100644 --- a/dMasterServer/MasterServer.cpp +++ b/dMasterServer/MasterServer.cpp @@ -348,6 +348,7 @@ int main(int argc, char** argv) { Game::im->GetInstance(0, false, 0); Game::im->GetInstance(1000, false, 0); + Game::im->GetInstance(1300, false, 0); StartAuthServer(); } diff --git a/dScripts/ai/MINIGAME/SG_GF/SERVER/SGCannon.cpp b/dScripts/ai/MINIGAME/SG_GF/SERVER/SGCannon.cpp index 3a901f82..112636cb 100644 --- a/dScripts/ai/MINIGAME/SG_GF/SERVER/SGCannon.cpp +++ b/dScripts/ai/MINIGAME/SG_GF/SERVER/SGCannon.cpp @@ -301,7 +301,7 @@ void SGCannon::OnActivityTimerDone(Entity* self, const std::string& name) { pathWaypoints.push_back(waypoint.position); } - movementAI->SetPath(pathWaypoints, true); + movementAI->SetPath(pathWaypoints, GeneralUtils::GenerateRandomNumber(0, 1) > 0.5f); enemy->AddDieCallback([this, self, enemy, name]() { RegisterHit(self, enemy, name);