1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
);
|