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
1
.gitignore
vendored
1
.gitignore
vendored
@ -9,3 +9,4 @@ x86
|
||||
gameenv/imgui.ini
|
||||
docs/game/build
|
||||
docs/internal/client
|
||||
gameenv/data/cache
|
@ -15,6 +15,8 @@
|
||||
#include <mutex>
|
||||
#include "MPFW_Physics.h"
|
||||
|
||||
#define DISTANCE_FROM_FLOOR 15
|
||||
|
||||
// turn quake miptex into rl texture
|
||||
Texture2D RLMT_QUAKE(MPFW::Quake::Maps::rlMipTex rlmt) {
|
||||
Texture2D retval;
|
||||
@ -196,7 +198,7 @@ int main() {
|
||||
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
||||
|
||||
InitWindow(1280, 720, TextFormat("mpfw"));
|
||||
SetTargetFPS(60);
|
||||
// SetTargetFPS(60);
|
||||
SetExitKey(0);
|
||||
DisableCursor();
|
||||
|
||||
@ -266,6 +268,36 @@ int main() {
|
||||
ClearBackground(BLACK);
|
||||
|
||||
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();
|
||||
Vector3 wishVel = { 0,0,0 };
|
||||
wishSpeed = 320;
|
||||
@ -302,28 +334,7 @@ int main() {
|
||||
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()};
|
||||
|
Loading…
x
Reference in New Issue
Block a user