#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 );