wip playerfit check
This commit is contained in:
parent
a10831ac99
commit
aff77d2d2c
@ -77,7 +77,11 @@ bool IsEntityVectorVisible(CachedEntity *entity, Vector endpos);
|
|||||||
bool VisCheckEntFromEnt(CachedEntity *startEnt, CachedEntity *endEnt);
|
bool VisCheckEntFromEnt(CachedEntity *startEnt, CachedEntity *endEnt);
|
||||||
bool VisCheckEntFromEntVector(Vector startVector, CachedEntity *startEnt,
|
bool VisCheckEntFromEntVector(Vector startVector, CachedEntity *startEnt,
|
||||||
CachedEntity *endEnt);
|
CachedEntity *endEnt);
|
||||||
Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist);
|
Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist,
|
||||||
|
bool checkWalkable = false);
|
||||||
|
float vectorMax(Vector i);
|
||||||
|
Vector vectorAbs(Vector i);
|
||||||
|
bool canReachVector(Vector loc);
|
||||||
|
|
||||||
bool LineIntersectsBox(Vector &bmin, Vector &bmax, Vector &lmin, Vector &lmax);
|
bool LineIntersectsBox(Vector &bmin, Vector &bmax, Vector &lmin, Vector &lmax);
|
||||||
|
|
||||||
|
@ -82,13 +82,6 @@ void checkAFK()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float vectormax(Vector i) // TODO: Move to helpers.cpp soon tm
|
|
||||||
{
|
|
||||||
float res = fmaxf(i.x, i.y);
|
|
||||||
return fmaxf(res, i.z);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void init()
|
void init()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < afkTicks.size(); i++)
|
for (int i = 0; i < afkTicks.size(); i++)
|
||||||
@ -100,19 +93,19 @@ void init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool canReachVector(Vector loc)
|
//bool canReachVector(Vector loc)
|
||||||
{
|
//{
|
||||||
trace_t trace;
|
// trace_t trace;
|
||||||
Ray_t ray;
|
// Ray_t ray;
|
||||||
Vector down = loc;
|
// Vector down = loc;
|
||||||
down.z = down.z - 5;
|
// down.z = down.z - 5;
|
||||||
ray.Init(loc, down);
|
// ray.Init(loc, down);
|
||||||
g_ITrace->TraceRay(ray, MASK_PLAYERSOLID, &trace::filter_no_player,
|
// g_ITrace->TraceRay(ray, 0x4200400B, &trace::filter_no_player,
|
||||||
&trace);
|
// &trace);
|
||||||
if (trace.startpos.z - trace.endpos.z <= 75) // higher as to avoid small false positives, player can jump 72 hu
|
// if (trace.startpos.z - trace.endpos.z <= 75) // higher as to avoid small false positives, player can jump 72 hu
|
||||||
return true;
|
// return true;
|
||||||
return false;
|
// return false;
|
||||||
}
|
//}
|
||||||
|
|
||||||
// auto add checked crumbs for the walbot to follow
|
// auto add checked crumbs for the walbot to follow
|
||||||
bool addCrumbs(CachedEntity *target, Vector corner = g_pLocalPlayer->v_Origin)
|
bool addCrumbs(CachedEntity *target, Vector corner = g_pLocalPlayer->v_Origin)
|
||||||
@ -120,14 +113,10 @@ bool addCrumbs(CachedEntity *target, Vector corner = g_pLocalPlayer->v_Origin)
|
|||||||
if (g_pLocalPlayer->v_Origin != corner)
|
if (g_pLocalPlayer->v_Origin != corner)
|
||||||
{
|
{
|
||||||
Vector dist = corner - g_pLocalPlayer->v_Origin;
|
Vector dist = corner - g_pLocalPlayer->v_Origin;
|
||||||
Vector distabs = dist;
|
|
||||||
distabs.x = fabsf(distabs.x);
|
|
||||||
distabs.y = fabsf(distabs.y);
|
|
||||||
distabs.z = fabsf(distabs.z);
|
|
||||||
int maxiterations = floor(corner.DistTo(g_pLocalPlayer->v_Origin)) / 40;
|
int maxiterations = floor(corner.DistTo(g_pLocalPlayer->v_Origin)) / 40;
|
||||||
for (int i = 0; i < maxiterations; i++)
|
for (int i = 0; i < maxiterations; i++)
|
||||||
{
|
{
|
||||||
Vector result = g_pLocalPlayer->v_Origin + dist / vectormax(distabs) * 40.0f * (i + 1);
|
Vector result = g_pLocalPlayer->v_Origin + dist / vectorMax(vectorAbs(dist)) * 40.0f * (i + 1);
|
||||||
if (!canReachVector(result))
|
if (!canReachVector(result))
|
||||||
return false;
|
return false;
|
||||||
breadcrumbs.push_back(result);
|
breadcrumbs.push_back(result);
|
||||||
@ -135,14 +124,10 @@ bool addCrumbs(CachedEntity *target, Vector corner = g_pLocalPlayer->v_Origin)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vector dist = target->m_vecOrigin() - corner;
|
Vector dist = target->m_vecOrigin() - corner;
|
||||||
Vector distabs = dist;
|
|
||||||
distabs.x = fabsf(distabs.x);
|
|
||||||
distabs.y = fabsf(distabs.y);
|
|
||||||
distabs.z = fabsf(distabs.z);
|
|
||||||
int maxiterations = floor(corner.DistTo(target->m_vecOrigin())) / 40;
|
int maxiterations = floor(corner.DistTo(target->m_vecOrigin())) / 40;
|
||||||
for (int i = 0; i < maxiterations; i++)
|
for (int i = 0; i < maxiterations; i++)
|
||||||
{
|
{
|
||||||
Vector result = corner + dist / vectormax(distabs) * 40.0f * (i + 1);
|
Vector result = corner + dist / vectorMax(vectorAbs(dist)) * 40.0f * (i + 1);
|
||||||
if (!canReachVector(result))
|
if (!canReachVector(result))
|
||||||
return false;
|
return false;
|
||||||
breadcrumbs.push_back(result);
|
breadcrumbs.push_back(result);
|
||||||
|
@ -108,7 +108,8 @@ void WalkTo(const Vector &vector)
|
|||||||
|
|
||||||
// Function to get the corner location that a vischeck to an entity is possible
|
// Function to get the corner location that a vischeck to an entity is possible
|
||||||
// from
|
// from
|
||||||
Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist)
|
Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist,
|
||||||
|
bool checkWalkable)
|
||||||
{
|
{
|
||||||
int maxiterations = maxdist / 40;
|
int maxiterations = maxdist / 40;
|
||||||
Vector origin = player->m_vecOrigin();
|
Vector origin = player->m_vecOrigin();
|
||||||
@ -141,9 +142,13 @@ Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist)
|
|||||||
virtualOrigin)) // check if player can see the
|
virtualOrigin)) // check if player can see the
|
||||||
// players virtualOrigin
|
// players virtualOrigin
|
||||||
continue;
|
continue;
|
||||||
if (VisCheckEntFromEntVector(
|
if (!VisCheckEntFromEntVector(
|
||||||
virtualOrigin, player,
|
virtualOrigin, player,
|
||||||
target)) // check if the virtualOrigin can see the target
|
target)) // check if the virtualOrigin can see the target
|
||||||
|
continue;
|
||||||
|
if (!checkWalkable)
|
||||||
|
return virtualOrigin;
|
||||||
|
if (canReachVector(virtualOrigin))
|
||||||
return virtualOrigin; // return the corner position that we know
|
return virtualOrigin; // return the corner position that we know
|
||||||
// can see the target
|
// can see the target
|
||||||
}
|
}
|
||||||
@ -151,6 +156,66 @@ Vector VischeckWall(CachedEntity *player, CachedEntity *target, float maxdist)
|
|||||||
return { 0, 0, 0 };
|
return { 0, 0, 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float vectorMax(Vector i) // Returns a vectors max value. For example: {123,
|
||||||
|
// -150, 125} = 125
|
||||||
|
{
|
||||||
|
float res = fmaxf(i.x, i.y);
|
||||||
|
return fmaxf(res, i.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector vectorABS(Vector i)
|
||||||
|
{
|
||||||
|
Vector result = i;
|
||||||
|
result.x = fabsf(i.x);
|
||||||
|
result.y = fabsf(i.y);
|
||||||
|
result.z = fabsf(i.z);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if we can reach a vector or if it is too high / doesn't leave
|
||||||
|
// enough space for the player
|
||||||
|
bool canReachVector(Vector loc)
|
||||||
|
{
|
||||||
|
// check if the vector is too high above ground
|
||||||
|
{
|
||||||
|
trace_t trace;
|
||||||
|
Ray_t ray;
|
||||||
|
Vector down = loc;
|
||||||
|
down.z = down.z - 5;
|
||||||
|
ray.Init(loc, down);
|
||||||
|
g_ITrace->TraceRay(ray, 0x4200400B, &trace::filter_no_player, &trace);
|
||||||
|
if (!(trace.startpos.z - trace.endpos.z <=
|
||||||
|
75)) // higher as to avoid small false positives, player can jump
|
||||||
|
// 72 hu
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 4; i++) // for loop for all 4 directions
|
||||||
|
{
|
||||||
|
Vector directionalLoc = loc;
|
||||||
|
switch (i) // what to check
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
directionalLoc.x = directionalLoc.x + 40;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
directionalLoc.x = directionalLoc.x - 40;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
directionalLoc.y = directionalLoc.y + 40;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
directionalLoc.y = directionalLoc.y - 40;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
trace_t trace;
|
||||||
|
Ray_t ray;
|
||||||
|
g_ITrace->TraceRay(ray, 0x4200400B, &trace::filter_no_player, &trace);
|
||||||
|
if (trace.startpos.DistTo(trace.endpos) < 26.0f)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::string GetLevelName()
|
std::string GetLevelName()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user