WIP: Pathfinding Nr. 6: Add caching support
This commit is contained in:
parent
c1797dfdfa
commit
0e78958bcc
@ -12,6 +12,7 @@ bool init = false;
|
|||||||
bool pathfinding = true;
|
bool pathfinding = true;
|
||||||
static settings::Bool enabled{ "misc.pathing", "true" };
|
static settings::Bool enabled{ "misc.pathing", "true" };
|
||||||
|
|
||||||
|
|
||||||
// Todo fix
|
// Todo fix
|
||||||
int FindInVector(int id)
|
int FindInVector(int id)
|
||||||
{
|
{
|
||||||
@ -105,6 +106,9 @@ struct MAP : public micropather::Graph
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<MAP> TF2MAP;
|
||||||
|
std::unique_ptr<micropather::MicroPather> pather;
|
||||||
|
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
// TODO: Improve performance
|
// TODO: Improve performance
|
||||||
@ -118,17 +122,23 @@ void Init()
|
|||||||
lvldir.append("/.steam/steam/steamapps/common/Team Fortress 2/tf/");
|
lvldir.append("/.steam/steam/steamapps/common/Team Fortress 2/tf/");
|
||||||
lvldir.append(lvlname);
|
lvldir.append(lvlname);
|
||||||
lvldir.append(".nav");
|
lvldir.append(".nav");
|
||||||
logging::Info(lvldir.c_str());
|
logging::Info(format("Pathing: Nav File location: ",lvldir).c_str());
|
||||||
|
|
||||||
areas.empty();
|
areas.empty();
|
||||||
navfile = CNavFile(lvldir.c_str());
|
navfile = CNavFile(lvldir.c_str());
|
||||||
if (!navfile.m_isOK)
|
if (!navfile.m_isOK)
|
||||||
logging::Info("Invalid Nav File");
|
logging::Info("Pathing: Invalid Nav File");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
areas.reserve(navfile.m_areas.size());
|
int size = navfile.m_areas.size();
|
||||||
|
logging::Info(format("Pathing: Number of areas to index:", size).c_str());
|
||||||
|
areas.reserve(size);
|
||||||
for (auto i : navfile.m_areas)
|
for (auto i : navfile.m_areas)
|
||||||
areas.push_back(i);
|
areas.push_back(i);
|
||||||
|
if (size > 7000)
|
||||||
|
size = 7000;
|
||||||
|
TF2MAP = std::make_unique<MAP>();
|
||||||
|
pather = std::make_unique<micropather::MicroPather>(TF2MAP.get(), size, 6, true);
|
||||||
}
|
}
|
||||||
pathfinding = true;
|
pathfinding = true;
|
||||||
}
|
}
|
||||||
@ -166,12 +176,14 @@ std::vector<Vector> findPath(Vector loc, Vector dest)
|
|||||||
if (id_loc == -1 || id_dest == -1)
|
if (id_loc == -1 || id_dest == -1)
|
||||||
return std::vector<Vector>(0);
|
return std::vector<Vector>(0);
|
||||||
micropather::MPVector<void *> pathNodes;
|
micropather::MPVector<void *> pathNodes;
|
||||||
MAP TF2MAP;
|
//MAP TF2MAP;
|
||||||
micropather::MicroPather pather(&TF2MAP, areas.size(), 8, true);
|
//micropather::MicroPather pather(&TF2MAP, areas.size(), 8, true);
|
||||||
float cost;
|
float cost;
|
||||||
int result = pather.Solve(static_cast<void *>(&areas.at(id_loc)),
|
int result = pather->Solve(static_cast<void *>(&areas.at(id_loc)),
|
||||||
static_cast<void *>(&areas.at(id_dest)),
|
static_cast<void *>(&areas.at(id_dest)),
|
||||||
&pathNodes, &cost);
|
&pathNodes, &cost);
|
||||||
|
if (result)
|
||||||
|
return std::vector<Vector>(0);
|
||||||
logging::Info(format(result).c_str());
|
logging::Info(format(result).c_str());
|
||||||
std::vector<Vector> path;
|
std::vector<Vector> path;
|
||||||
for (int i = 0; i < pathNodes.size(); i++)
|
for (int i = 0; i < pathNodes.size(); i++)
|
||||||
@ -206,7 +218,7 @@ void CreateMove()
|
|||||||
return;
|
return;
|
||||||
if (CE_BAD(LOCAL_E))
|
if (CE_BAD(LOCAL_E))
|
||||||
return;
|
return;
|
||||||
if (!crumbs.empty() && g_pLocalPlayer->v_Origin.DistTo(crumbs.at(0)) < 40.0f)
|
if (!crumbs.empty() && g_pLocalPlayer->v_Origin.DistTo(crumbs.at(0)) < 20.0f)
|
||||||
{
|
{
|
||||||
crumbs.erase(crumbs.begin());
|
crumbs.erase(crumbs.begin());
|
||||||
inactivity.update();
|
inactivity.update();
|
||||||
|
Reference in New Issue
Block a user