Floor collisions working great with runtime-calculated collision maps, moving on to caching collision maps for future runtime
This commit is contained in:
parent
65031d57f3
commit
89f31a7184
3
.gitignore
vendored
3
.gitignore
vendored
@ -8,4 +8,5 @@ x86
|
|||||||
*/x86
|
*/x86
|
||||||
gameenv/imgui.ini
|
gameenv/imgui.ini
|
||||||
docs/game/build
|
docs/game/build
|
||||||
docs/internal/client
|
docs/internal/client
|
||||||
|
gameenv/data/cache
|
@ -15,6 +15,8 @@
|
|||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include "MPFW_Physics.h"
|
#include "MPFW_Physics.h"
|
||||||
|
|
||||||
|
#define DISTANCE_FROM_FLOOR 15
|
||||||
|
|
||||||
// turn quake miptex into rl texture
|
// turn quake miptex into rl texture
|
||||||
Texture2D RLMT_QUAKE(MPFW::Quake::Maps::rlMipTex rlmt) {
|
Texture2D RLMT_QUAKE(MPFW::Quake::Maps::rlMipTex rlmt) {
|
||||||
Texture2D retval;
|
Texture2D retval;
|
||||||
@ -196,7 +198,7 @@ int main() {
|
|||||||
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
||||||
|
|
||||||
InitWindow(1280, 720, TextFormat("mpfw"));
|
InitWindow(1280, 720, TextFormat("mpfw"));
|
||||||
SetTargetFPS(60);
|
// SetTargetFPS(60);
|
||||||
SetExitKey(0);
|
SetExitKey(0);
|
||||||
DisableCursor();
|
DisableCursor();
|
||||||
|
|
||||||
@ -266,6 +268,36 @@ int main() {
|
|||||||
ClearBackground(BLACK);
|
ClearBackground(BLACK);
|
||||||
|
|
||||||
if(IsCursorHidden() && !consoleOn){
|
if(IsCursorHidden() && !consoleOn){
|
||||||
|
|
||||||
|
if (chr.cvars["math_3d_floor_collision_work"] == "true") {
|
||||||
|
float potentialNewFloor = -FLT_MAX;
|
||||||
|
for (int b = 0; b < collisionMap.collisionSets.size(); b++) {
|
||||||
|
BoundingBox bb;
|
||||||
|
bb.min = collisionMap.collisionSets[b].size.min;
|
||||||
|
bb.max = collisionMap.collisionSets[b].size.max;
|
||||||
|
if (CheckCollisionBoxSphere(bb, camera.position, 10)) {
|
||||||
|
MPFW::Physics::CollisionSet cs = collisionMap.collisionSets[b];
|
||||||
|
for (int i = 0; i < cs.collisionFaces.size(); i++) {
|
||||||
|
for (int t = 2; t < cs.collisionFaces[i].polygon.size(); t++) {
|
||||||
|
Vector3 a = cs.collisionFaces[i].polygon[0];
|
||||||
|
Vector3 b = cs.collisionFaces[i].polygon[t];
|
||||||
|
Vector3 c = cs.collisionFaces[i].polygon[t - 1];
|
||||||
|
Ray r;
|
||||||
|
r.position = camera.position;
|
||||||
|
r.direction = { 0,-1,0 };
|
||||||
|
RayCollision coll = GetRayCollisionTriangle(r, a, b, c);
|
||||||
|
if (coll.hit) {
|
||||||
|
if (coll.point.y > potentialNewFloor) potentialNewFloor = coll.point.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if (potentialNewFloor != -FLT_MAX) collisionFloor = potentialNewFloor + DISTANCE_FROM_FLOOR;
|
||||||
|
else collisionFloor = camera.position.y - DISTANCE_FROM_FLOOR;
|
||||||
|
}
|
||||||
|
|
||||||
Look();
|
Look();
|
||||||
Vector3 wishVel = { 0,0,0 };
|
Vector3 wishVel = { 0,0,0 };
|
||||||
wishSpeed = 320;
|
wishSpeed = 320;
|
||||||
@ -302,28 +334,7 @@ int main() {
|
|||||||
velocity.y -= 10 * GetFrameTime();
|
velocity.y -= 10 * GetFrameTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(chr.cvars["math_3d_floor_collision_work"] == "true"){
|
|
||||||
for (int b = 0; b < collisionMap.collisionSets.size(); b++) {
|
|
||||||
BoundingBox bb;
|
|
||||||
bb.min = collisionMap.collisionSets[b].size.min;
|
|
||||||
bb.max = collisionMap.collisionSets[b].size.max;
|
|
||||||
if (CheckCollisionBoxSphere(bb, camera.position, 10)) {
|
|
||||||
MPFW::Physics::CollisionSet cs = collisionMap.collisionSets[b];
|
|
||||||
for (int i = 0; i < cs.collisionFaces.size(); i++) {
|
|
||||||
for (int t = 2; t < cs.collisionFaces[i].polygon.size(); t++) {
|
|
||||||
Vector3 a = cs.collisionFaces[i].polygon[0];
|
|
||||||
Vector3 b = cs.collisionFaces[i].polygon[t];
|
|
||||||
Vector3 c = cs.collisionFaces[i].polygon[t - 1];
|
|
||||||
Ray r;
|
|
||||||
r.position = camera.position;
|
|
||||||
r.direction = { 0,-1,0 };
|
|
||||||
RayCollision coll = GetRayCollisionTriangle(r, a, b, c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
velocity *= {GetFrameTime(), 1, GetFrameTime()};
|
velocity *= {GetFrameTime(), 1, GetFrameTime()};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user