summaryrefslogtreecommitdiff
path: root/src/game/raycast.h
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2025-09-03 20:10:09 +0200
committernavewindre <boneyaard@gmail.com>2025-09-03 20:10:09 +0200
commitf8b92ce3aa08b1445c9f956d8166830946562d12 (patch)
tree94e63a5aec9f8f52b577f56799e0c9201fd976a5 /src/game/raycast.h
a
Diffstat (limited to 'src/game/raycast.h')
-rw-r--r--src/game/raycast.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/game/raycast.h b/src/game/raycast.h
new file mode 100644
index 0000000..5920e09
--- /dev/null
+++ b/src/game/raycast.h
@@ -0,0 +1,65 @@
+#pragma once
+
+#include "../util.h"
+
+const static U32 RAY_ITER_MAX = 10;
+const static U32 TRACE_HIT_NONE = (U32)-1;
+
+enum TraceHitType_t {
+ TH_NONE,
+ TH_WALL,
+ TH_CEILING,
+ TH_FLOOR
+};
+
+enum TraceFilter_t {
+ TF_NONE = 0x0,
+ TF_WALLS = 0x1,
+ TF_SPRITES = 0x2,
+ TF_ENTITIES = 0x4,
+
+ TF_WORLD = TF_WALLS | TF_SPRITES,
+ TF_ALL = TF_WALLS | TF_SPRITES | TF_ENTITIES,
+};
+
+struct TRACE {
+ /* input */
+ VEC3 startpos;
+ /* output*/
+ VEC3 endpos;
+ /* output */
+ F32 fract;
+ /* output */
+ F32 hitang;
+ /* output */
+ U32 hitwall;
+ /* input */
+ U32 filter;
+};
+
+struct RAY_HITDATA {
+ VEC3 point;
+ F32 dist;
+ F32 ang;
+
+ U8 type;
+ U32 obj_idx;
+};
+
+extern LIST<RAY_HITDATA> ray_trace_list( VEC3 start, F32 ang, U32 max_iter = RAY_ITER_MAX );
+extern LIST<RAY_HITDATA> ray_trace_list( VEC3 start, VEC3 end, U32 max_iter = RAY_ITER_MAX );
+
+extern U32 ray_trace( TRACE* tr, F32 ang );
+extern U32 ray_trace( TRACE* tr, VEC3 end );
+extern U32 ray_trace( TRACE* tr, VEC3 start, F32 ang );
+extern U32 ray_trace( TRACE* tr, VEC3 start, VEC3 end );
+
+extern VEC2 project_vertex(
+ VEC3 vertex_pos,
+ VEC3 player_pos,
+ F32 player_angle_deg,
+ F32 fov_deg,
+ VEC2 window,
+ VEC2 winsize,
+ U8* in_view = 0
+);