mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-09 15:28:21 -04:00
Stop relying on positive infinity for a 'very large distance' value
This commit is contained in:
parent
d9b01a0a11
commit
bb5ca6a957
12
src/Entity.c
12
src/Entity.c
@ -499,20 +499,22 @@ void Entities_Remove(EntityID id) {
|
|||||||
|
|
||||||
EntityID Entities_GetClosest(struct Entity* src) {
|
EntityID Entities_GetClosest(struct Entity* src) {
|
||||||
Vec3 eyePos = Entity_GetEyePosition(src);
|
Vec3 eyePos = Entity_GetEyePosition(src);
|
||||||
Vec3 dir = Vec3_GetDirVector(src->Yaw * MATH_DEG2RAD, src->Pitch * MATH_DEG2RAD);
|
Vec3 dir = Vec3_GetDirVector(src->Yaw * MATH_DEG2RAD, src->Pitch * MATH_DEG2RAD);
|
||||||
float closestDist = MATH_POS_INF;
|
float closestDist = -200.5f; /* NOTE: was previously positive infinity */
|
||||||
EntityID targetId = ENTITIES_SELF_ID;
|
EntityID targetId = ENTITIES_SELF_ID;
|
||||||
|
|
||||||
float t0, t1;
|
float t0, t1;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < ENTITIES_SELF_ID; i++) { /* because we don't want to pick against local player */
|
for (i = 0; i < ENTITIES_SELF_ID; i++) /* because we don't want to pick against local player */
|
||||||
|
{
|
||||||
struct Entity* entity = Entities.List[i];
|
struct Entity* entity = Entities.List[i];
|
||||||
if (!entity) continue;
|
if (!entity) continue;
|
||||||
|
if (!Intersection_RayIntersectsRotatedBox(eyePos, dir, entity, &t0, &t1)) continue;
|
||||||
|
|
||||||
if (Intersection_RayIntersectsRotatedBox(eyePos, dir, entity, &t0, &t1) && t0 < closestDist) {
|
if (closestDist < -200 || t0 < closestDist) {
|
||||||
closestDist = t0;
|
closestDist = t0;
|
||||||
targetId = (EntityID)i;
|
targetId = (EntityID)i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return targetId;
|
return targetId;
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#define MATH_DEG2RAD (MATH_PI / 180.0f)
|
#define MATH_DEG2RAD (MATH_PI / 180.0f)
|
||||||
#define MATH_RAD2DEG (180.0f / MATH_PI)
|
#define MATH_RAD2DEG (180.0f / MATH_PI)
|
||||||
#define MATH_LARGENUM 1000000000.0f
|
#define MATH_LARGENUM 1000000000.0f
|
||||||
#define MATH_POS_INF ((float)(1e+300 * 1e+300))
|
|
||||||
|
|
||||||
#define Math_Deg2Packed(x) ((cc_uint8)((x) * 256.0f / 360.0f))
|
#define Math_Deg2Packed(x) ((cc_uint8)((x) * 256.0f / 360.0f))
|
||||||
#define Math_Packed2Deg(x) ((x) * 360.0f / 256.0f)
|
#define Math_Packed2Deg(x) ((x) * 360.0f / 256.0f)
|
||||||
|
@ -218,9 +218,9 @@ void Searcher_CalcTime(Vec3* vel, struct AABB *entityBB, struct AABB* blockBB, f
|
|||||||
float dy = vel->y > 0.0f ? blockBB->Min.y - entityBB->Max.y : entityBB->Min.y - blockBB->Max.y;
|
float dy = vel->y > 0.0f ? blockBB->Min.y - entityBB->Max.y : entityBB->Min.y - blockBB->Max.y;
|
||||||
float dz = vel->z > 0.0f ? blockBB->Min.z - entityBB->Max.z : entityBB->Min.z - blockBB->Max.z;
|
float dz = vel->z > 0.0f ? blockBB->Min.z - entityBB->Max.z : entityBB->Min.z - blockBB->Max.z;
|
||||||
|
|
||||||
*tx = vel->x == 0.0f ? MATH_POS_INF : Math_AbsF(dx / vel->x);
|
*tx = vel->x == 0.0f ? MATH_LARGENUM : Math_AbsF(dx / vel->x);
|
||||||
*ty = vel->y == 0.0f ? MATH_POS_INF : Math_AbsF(dy / vel->y);
|
*ty = vel->y == 0.0f ? MATH_LARGENUM : Math_AbsF(dy / vel->y);
|
||||||
*tz = vel->z == 0.0f ? MATH_POS_INF : Math_AbsF(dz / vel->z);
|
*tz = vel->z == 0.0f ? MATH_LARGENUM : Math_AbsF(dz / vel->z);
|
||||||
|
|
||||||
if (entityBB->Max.x >= blockBB->Min.x && entityBB->Min.x <= blockBB->Max.x) *tx = 0.0f; /* Inlined XIntersects */
|
if (entityBB->Max.x >= blockBB->Min.x && entityBB->Min.x <= blockBB->Max.x) *tx = 0.0f; /* Inlined XIntersects */
|
||||||
if (entityBB->Max.y >= blockBB->Min.y && entityBB->Min.y <= blockBB->Max.y) *ty = 0.0f; /* Inlined YIntersects */
|
if (entityBB->Max.y >= blockBB->Min.y && entityBB->Min.y <= blockBB->Max.y) *ty = 0.0f; /* Inlined YIntersects */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user