diff options
Diffstat (limited to 'src/game/raycast.h')
| -rw-r--r-- | src/game/raycast.h | 65 |
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 +); |
