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
|
#pragma once
#include "object.h"
#include "camera.h"
enum PlayerFlags_t {
PFL_NONE = 0,
PFL_ONGROUND = 1 << 0,
PFL_INVULNERABLE = 1 << 1,
PFL_NOCLIP = 1 << 2,
PFL_DUCK = 1 << 3,
};
enum PlayerMoveType_t {
PMT_NONE = 0,
PMT_WALK = 1,
PMT_FLY = 2,
PMT_LADDER = 3,
PMT_NOCLIP = 4
};
struct PLAYER_INPUT {
PLAYER_CAMERA cam;
struct PLAYER* pobj;
// for nulls
U8 fwd_held{}, bk_held{}, left_held{}, right_held{};
U8 jump{};
VEC2 move;
};
struct PLAYER : OBJECT {
static const U32 CLASSID = OBJCLASS_PLAYER;
OBJVAR( U32, health );
OBJVARV( F32, fov, 72.f );
OBJVARV( F32, eyeoffset, 40.f );
OBJVAR( I32, flags );
PLAYER_INPUT input;
OBJVARV( F32, gravity, 1.f );
F32 maxspeed{250.f};
F32 walkspeed{250.f};
F32 stepsize{16.f};
OBJVARV( U8, movetype, PMT_WALK );
OBJECT* ground_ent;
F32 surf_friction{};
};
extern PLAYER* player_create( VEC3 origin, F32 yaw );
extern void player_input( struct GAME_DATA* game, PLAYER* player );
extern void player_move( struct GAME_DATA* game, PLAYER* player );
extern VEC3 player_get_view_pos( PLAYER* player );
|