#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_trace_list( VEC3 start, F32 ang, U32 max_iter = RAY_ITER_MAX ); extern LIST 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 );