Merge remote-tracking branch 'origin'

This commit is contained in:
2025-10-05 00:30:33 +01:00
47 changed files with 1586 additions and 90 deletions

View File

@@ -1,5 +1,5 @@
#include "../aabb.h"
#include "../types.h"
#include "game/aabb.h"
#include "core/types.h"
bool AABB_Collide(AABB a, AABB b) {
bool collision_x = a.pos.x + a.size.x >= b.pos.x && b.pos.x + b.size.x >= a.pos.x;

View File

@@ -1,5 +1,6 @@
#include "../nav.h"
#include "../../core/types.h"
#include "game/nav.h"
#include "core/types.h"
#include <stdio.h>
#define MAX_UNFINISHED 128
@@ -14,16 +15,16 @@ struct navSearchNodeState{
typedef struct navSearchState navSearchState;
struct navSearchState{
navSearchNodeState nodeStates[NAV_MAX_NODES];
navSearchNodeState nodeStates[NAV_MAX_NODES];
};
navSearchState initState(U32 start, U32 meshSize) {
navSearchState state = {};
for(int i = 0; i < meshSize; i++) {
for(U32 i = 0; i < meshSize; i++) {
state.nodeStates[i].visited = false;
state.nodeStates[i].addedToUnvisited = false;
// underflow to the max :)
state.nodeStates[i].distance = -1;
// underflow to the max :)
state.nodeStates[i].distance = U64_MAX;
state.nodeStates[i].shortest = 0;
}
state.nodeStates[start].distance = 0;
@@ -31,10 +32,10 @@ navSearchState initState(U32 start, U32 meshSize) {
}
U32 getLowestState(U32 unfinishedIndexes[128], U32 unfinishedCount, navSearchState state, U32 *offset) {
U32 lowest = -1;
U32 lowestI = -1;
U32 lowest = U32_MAX;
U32 lowestI = U32_MAX;
bool startFound = false;
for(int i = *offset; i < unfinishedCount; i++) {
for(U32 i = *offset; i < unfinishedCount; i++) {
navSearchNodeState checkNode = state.nodeStates[unfinishedIndexes[i]];
if(checkNode.visited) {
if(!startFound) {
@@ -44,7 +45,7 @@ U32 getLowestState(U32 unfinishedIndexes[128], U32 unfinishedCount, navSearchSta
}
startFound = true;
if (lowest > checkNode.distance) {
lowest = checkNode.distance;
lowest = cast(U32) checkNode.distance;
lowestI = unfinishedIndexes[i];
}
}
@@ -60,7 +61,7 @@ NavPath Nav_Path(NavMesh mesh, U32 start, U32 end) {
// the unfinished nodes, so when checking for a lowest
// if I find the first N items have been checked, I'll mark
// an offset to skip the first N items.
U32 unfinishedOffset = 0;
U32 unfinishedOffset = 0;
U32 lowestNodeIndex = start;
bool found = false;
while(!found) {
@@ -68,11 +69,11 @@ NavPath Nav_Path(NavMesh mesh, U32 start, U32 end) {
NavConnection connection = mesh.nodes[lowestNodeIndex].connections[connectionI];
navSearchNodeState *testNode = &state.nodeStates[connection.NodeIndex];
if(testNode->visited) {continue;}
U32 distance = state.nodeStates[lowestNodeIndex].distance + connection.Cost;
distance += mesh.nodes[end].pos.x - mesh.nodes[connection.NodeIndex].pos.x;
distance += mesh.nodes[end].pos.y - mesh.nodes[connection.NodeIndex].pos.y;
U32 distance = cast(U32) (state.nodeStates[lowestNodeIndex].distance + connection.Cost);
distance += cast(U32) (mesh.nodes[end].pos.x - mesh.nodes[connection.NodeIndex].pos.x);
distance += cast(U32) (mesh.nodes[end].pos.y - mesh.nodes[connection.NodeIndex].pos.y);
if(testNode->distance > distance) {
testNode->distance = distance;
testNode->distance = distance;
testNode->shortest = lowestNodeIndex;
}
if(!testNode->addedToUnvisited) {

View File

@@ -1,7 +1,6 @@
#include "../npc.h"
#include "../world.h"
#include "../../core/types.h"
#include "nav.c"
#include <stdio.h>
void updateNPC(F32 delta, NPC *npc, World *world) {