mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-15 04:38:21 +00:00
working forward
This commit is contained in:
parent
bce87aaa06
commit
3e12dd782b
@ -49,6 +49,8 @@ MovementAIComponent::MovementAIComponent(Entity* parent, MovementAIInfo info) :
|
|||||||
m_MaxSpeed = 0;
|
m_MaxSpeed = 0;
|
||||||
m_CurrentPathWaypointIndex = 0;
|
m_CurrentPathWaypointIndex = 0;
|
||||||
m_LockRotation = false;
|
m_LockRotation = false;
|
||||||
|
m_IsInReverse = false;
|
||||||
|
m_NextPathWaypointIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MovementAIComponent::Update(const float deltaTime) {
|
void MovementAIComponent::Update(const float deltaTime) {
|
||||||
@ -124,7 +126,7 @@ void MovementAIComponent::Update(const float deltaTime) {
|
|||||||
SetRotation(NiQuaternion::LookAt(source, m_NextWaypoint));
|
SetRotation(NiQuaternion::LookAt(source, m_NextWaypoint));
|
||||||
} else {
|
} else {
|
||||||
// Check if there are more waypoints in the queue, if so set our next destination to the next waypoint
|
// Check if there are more waypoints in the queue, if so set our next destination to the next waypoint
|
||||||
if (AdvancePathWaypointIndex()) {
|
if (!AdvancePathWaypointIndex()) {
|
||||||
Stop();
|
Stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -139,8 +141,14 @@ nextAction:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MovementAIComponent::AdvancePathWaypointIndex() {
|
bool MovementAIComponent::AdvancePathWaypointIndex() {
|
||||||
if (m_CurrentPathWaypointIndex < m_CurrentPath.size()) m_CurrentPathWaypointIndex++;
|
m_CurrentPathWaypointIndex = m_NextPathWaypointIndex;
|
||||||
|
if (m_IsInReverse) {
|
||||||
|
if (m_CurrentPathWaypointIndex > 0) m_NextPathWaypointIndex--;
|
||||||
|
return m_NextPathWaypointIndex >= 0;
|
||||||
|
} else {
|
||||||
|
if (m_CurrentPathWaypointIndex < m_CurrentPath.size()) m_NextPathWaypointIndex++;
|
||||||
return m_CurrentPathWaypointIndex < m_CurrentPath.size();
|
return m_CurrentPathWaypointIndex < m_CurrentPath.size();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const MovementAIInfo& MovementAIComponent::GetInfo() const {
|
const MovementAIInfo& MovementAIComponent::GetInfo() const {
|
||||||
@ -229,12 +237,16 @@ void MovementAIComponent::PullToPoint(const NiPoint3& point) {
|
|||||||
m_PullPoint = point;
|
m_PullPoint = point;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MovementAIComponent::SetPath(std::vector<NiPoint3> path) {
|
void MovementAIComponent::SetPath(std::vector<NiPoint3> path, bool startInReverse) {
|
||||||
if (path.empty()) return;
|
if (path.empty()) return;
|
||||||
m_CurrentPath = path;
|
m_CurrentPath = path;
|
||||||
|
m_IsInReverse = startInReverse;
|
||||||
|
|
||||||
m_CurrentPathWaypointIndex = 0;
|
// Start the Entity out at the first waypoint with their next waypoint being the same one.
|
||||||
|
// This is so AdvancePathWaypointIndex can do the recovery from effectively a paused state.
|
||||||
|
m_CurrentPathWaypointIndex = m_IsInReverse ? m_CurrentPath.size() - 1 : 0;
|
||||||
|
m_NextPathWaypointIndex = m_IsInReverse ? m_CurrentPath.size() - 1 : 0;
|
||||||
|
AdvancePathWaypointIndex();
|
||||||
SetDestination(m_CurrentPath.front());
|
SetDestination(m_CurrentPath.front());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,8 +189,9 @@ public:
|
|||||||
* Sets a path to follow for the AI
|
* Sets a path to follow for the AI
|
||||||
* @param path the path to follow
|
* @param path the path to follow
|
||||||
*/
|
*/
|
||||||
void SetPath(std::vector<NiPoint3> path);
|
void SetPath(std::vector<NiPoint3> path, bool startsInReverse = false);
|
||||||
|
|
||||||
|
// Advance the path waypoint index and return if there is a next waypoint
|
||||||
bool AdvancePathWaypointIndex();
|
bool AdvancePathWaypointIndex();
|
||||||
|
|
||||||
const NiPoint3& GetCurrentPathWaypoint() const { return m_CurrentPathWaypointIndex < m_CurrentPath.size() ? m_CurrentPath.at(m_CurrentPathWaypointIndex) : m_Parent->GetPosition(); }
|
const NiPoint3& GetCurrentPathWaypoint() const { return m_CurrentPathWaypointIndex < m_CurrentPath.size() ? m_CurrentPath.at(m_CurrentPathWaypointIndex) : m_Parent->GetPosition(); }
|
||||||
@ -311,6 +312,13 @@ private:
|
|||||||
* The index of the current waypoint in the path
|
* The index of the current waypoint in the path
|
||||||
*/
|
*/
|
||||||
uint32_t m_CurrentPathWaypointIndex;
|
uint32_t m_CurrentPathWaypointIndex;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The index of the current waypoint in the path
|
||||||
|
*/
|
||||||
|
uint32_t m_NextPathWaypointIndex;
|
||||||
|
|
||||||
|
bool m_IsInReverse;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MOVEMENTAICOMPONENT_H
|
#endif // MOVEMENTAICOMPONENT_H
|
||||||
|
@ -301,11 +301,7 @@ void SGCannon::OnActivityTimerDone(Entity* self, const std::string& name) {
|
|||||||
pathWaypoints.push_back(waypoint.position);
|
pathWaypoints.push_back(waypoint.position);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (GeneralUtils::GenerateRandomNumber<float_t>(0, 1) < 0.5f) {
|
movementAI->SetPath(pathWaypoints, true);
|
||||||
// std::reverse(pathWaypoints.begin(), pathWaypoints.end());
|
|
||||||
// }
|
|
||||||
|
|
||||||
movementAI->SetPath(pathWaypoints);
|
|
||||||
|
|
||||||
enemy->AddDieCallback([this, self, enemy, name]() {
|
enemy->AddDieCallback([this, self, enemy, name]() {
|
||||||
RegisterHit(self, enemy, name);
|
RegisterHit(self, enemy, name);
|
||||||
|
Loading…
Reference in New Issue
Block a user