mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-15 04:38:21 +00:00
woirking
This commit is contained in:
parent
fc56777969
commit
5f7a108154
@ -71,7 +71,10 @@ ControllablePhysicsComponent::~ControllablePhysicsComponent() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ControllablePhysicsComponent::Update(float deltaTime) {
|
void ControllablePhysicsComponent::Update(float deltaTime) {
|
||||||
|
if (m_Velocity == NiPoint3::ZERO) return;
|
||||||
|
m_Position += m_Velocity * deltaTime;
|
||||||
|
m_DirtyPosition = true;
|
||||||
|
Game::entityManager->SerializeEntity(m_Parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
|
void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
|
||||||
@ -153,6 +156,7 @@ void ControllablePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bo
|
|||||||
}
|
}
|
||||||
|
|
||||||
outBitStream->Write0();
|
outBitStream->Write0();
|
||||||
|
if (!bIsInitialUpdate) m_DirtyPosition = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bIsInitialUpdate) {
|
if (!bIsInitialUpdate) {
|
||||||
|
@ -63,7 +63,14 @@ void MovementAIComponent::SetupPath(const std::string& pathname) {
|
|||||||
}
|
}
|
||||||
const Path* pathData = Game::zoneManager->GetZone()->GetPath(path);
|
const Path* pathData = Game::zoneManager->GetZone()->GetPath(path);
|
||||||
if (pathData) {
|
if (pathData) {
|
||||||
Game::logger->Log("MovementAIComponent", "found path %s", path.c_str());
|
Game::logger->Log("MovementAIComponent", "found path %i %s", m_Parent->GetLOT(), path.c_str());
|
||||||
|
m_Path = pathData;
|
||||||
|
std::vector<NiPoint3> waypoints;
|
||||||
|
for (auto& waypoint : m_Path->pathWaypoints) {
|
||||||
|
waypoints.push_back(waypoint.position);
|
||||||
|
}
|
||||||
|
SetPath(waypoints);
|
||||||
|
SetMaxSpeed(3.0f);
|
||||||
} else {
|
} else {
|
||||||
Game::logger->Log("MovementAIComponent", "No path found for %i:%llu", m_Parent->GetLOT(), m_Parent->GetObjectID());
|
Game::logger->Log("MovementAIComponent", "No path found for %i:%llu", m_Parent->GetLOT(), m_Parent->GetObjectID());
|
||||||
}
|
}
|
||||||
@ -144,7 +151,16 @@ void MovementAIComponent::Update(const float deltaTime) {
|
|||||||
// 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
|
||||||
HandleWaypointArrived();
|
HandleWaypointArrived();
|
||||||
if (!AdvancePathWaypointIndex()) {
|
if (!AdvancePathWaypointIndex()) {
|
||||||
|
if (m_Path && m_Path->pathBehavior == PathBehavior::Bounce) {
|
||||||
|
ReversePath(); // untested.
|
||||||
|
} else if (m_Path && m_Path->pathBehavior == PathBehavior::Loop) {
|
||||||
|
m_CurrentPathWaypointIndex = 0;
|
||||||
|
m_NextPathWaypointIndex = 0;
|
||||||
|
AdvancePathWaypointIndex();
|
||||||
|
SetDestination(GetCurrentPathWaypoint());
|
||||||
|
} else {
|
||||||
Stop();
|
Stop();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SetDestination(GetCurrentPathWaypoint());
|
SetDestination(GetCurrentPathWaypoint());
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
class ControllablePhysicsComponent;
|
class ControllablePhysicsComponent;
|
||||||
class BaseCombatAIComponent;
|
class BaseCombatAIComponent;
|
||||||
|
class Path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information that describes the different variables used to make an entity move around
|
* Information that describes the different variables used to make an entity move around
|
||||||
@ -265,7 +266,7 @@ private:
|
|||||||
/**
|
/**
|
||||||
* The path this entity is currently traversing
|
* The path this entity is currently traversing
|
||||||
*/
|
*/
|
||||||
uint32_t m_PathIndex;
|
int32_t m_PathIndex;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the entity has reached it last waypoint
|
* If the entity has reached it last waypoint
|
||||||
@ -346,6 +347,11 @@ private:
|
|||||||
* Whether or not the current movement via pathing is paused.
|
* Whether or not the current movement via pathing is paused.
|
||||||
*/
|
*/
|
||||||
bool m_IsPaused;
|
bool m_IsPaused;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The optional path this component will follow.
|
||||||
|
*/
|
||||||
|
const Path* m_Path = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MOVEMENTAICOMPONENT_H
|
#endif // MOVEMENTAICOMPONENT_H
|
||||||
|
@ -347,8 +347,7 @@ int main(int argc, char** argv) {
|
|||||||
StartChatServer();
|
StartChatServer();
|
||||||
|
|
||||||
Game::im->GetInstance(0, false, 0);
|
Game::im->GetInstance(0, false, 0);
|
||||||
Game::im->GetInstance(1000, false, 0);
|
Game::im->GetInstance(1800, false, 0);
|
||||||
Game::im->GetInstance(1300, false, 0);
|
|
||||||
StartAuthServer();
|
StartAuthServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ dNavMesh::dNavMesh(uint32_t zoneId) {
|
|||||||
dNavMesh::~dNavMesh() {
|
dNavMesh::~dNavMesh() {
|
||||||
// Clean up Recast information
|
// Clean up Recast information
|
||||||
|
|
||||||
if(m_Solid) rcFreeHeightField(m_Solid);
|
if (m_Solid) rcFreeHeightField(m_Solid);
|
||||||
if (m_CHF) rcFreeCompactHeightfield(m_CHF);
|
if (m_CHF) rcFreeCompactHeightfield(m_CHF);
|
||||||
if (m_CSet) rcFreeContourSet(m_CSet);
|
if (m_CSet) rcFreeContourSet(m_CSet);
|
||||||
if (m_PMesh) rcFreePolyMesh(m_PMesh);
|
if (m_PMesh) rcFreePolyMesh(m_PMesh);
|
||||||
@ -135,17 +135,19 @@ float dNavMesh::GetHeightAtPoint(const NiPoint3& location, const float halfExten
|
|||||||
float nearestPoint[3] = { 0.0f, 0.0f, 0.0f };
|
float nearestPoint[3] = { 0.0f, 0.0f, 0.0f };
|
||||||
dtQueryFilter filter{};
|
dtQueryFilter filter{};
|
||||||
|
|
||||||
auto res = m_NavQuery->findNearestPoly(pos, polyPickExt, &filter, &nearestRef, nearestPoint);
|
auto hasPoly = m_NavQuery->findNearestPoly(pos, polyPickExt, &filter, &nearestRef, nearestPoint);
|
||||||
res = m_NavQuery->getPolyHeight(nearestRef, pos, &toReturn);
|
m_NavQuery->getPolyHeight(nearestRef, pos, &toReturn);
|
||||||
if (toReturn != 0.0f) {
|
if (toReturn != 0.0f) {
|
||||||
DluAssert(toReturn == nearestPoint[1]);
|
DluAssert(toReturn == nearestPoint[1]);
|
||||||
}
|
}
|
||||||
if (toReturn == 0.0f) {
|
if (toReturn == 0.0f) {
|
||||||
toReturn = location.y;
|
|
||||||
// If we were unable to get the poly height, but the query returned a success, just use the height of the nearest point.
|
// If we were unable to get the poly height, but the query returned a success, just use the height of the nearest point.
|
||||||
// This is what seems to happen anyways and it is better than returning zero.
|
// This is what seems to happen anyways and it is better than returning zero.
|
||||||
} else if (res == DT_SUCCESS) {
|
if (hasPoly == DT_SUCCESS) {
|
||||||
toReturn = nearestPoint[1];
|
toReturn = nearestPoint[1];
|
||||||
|
} else {
|
||||||
|
toReturn = location.y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// If we failed to even find a poly, do not change the height since we have no idea what it should be.
|
// If we failed to even find a poly, do not change the height since we have no idea what it should be.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user