#ifndef PLAYERCONTROLLER_H #define PLAYERCONTROLLER_H #include #include namespace godot { class PlayerController : public RigidBody { GODOT_CLASS(PlayerController, RigidBody) private: String team; int health; Node *weapon; Spatial *world; float mouse_sensitivity; float FOV; Vector2 mouse_axis; Spatial *head; Spatial *neck; Vector3 velocity; Vector3 direction; Vector3 move_axis; Vector3 floorspeed; bool jumping; bool can_jump; NavigationAgent nav; float FLOOR_MAX_ANGLE; float jump_height; bool in_water; float swim_speed; float climb_speed; bool controlling_machine; RigidBody *machine; bool is_player; Spatial *ladder_m; PhysicsDirectBodyState *player_state; bool is_on_floor; Vector3 floor_normal; float acceleration; float walk_speed; float c_friction; float air_control; public: static void _register_methods(); PlayerController(); ~PlayerController(); void _init(); void _ready(); Dictionary get_init_info(); void mp_init(Dictionary init_info); void set_phys_transform(Transform trfrm, Vector3 lvel); void _process(float _delta); void initiate_use(); void set_net_owner(int owner_id); void deselect_character(); void take_control_of_machine(RigidBody slave_machine); void lose_machine(); void _physics_process(float delta); bool on_floor_test(); void _integrate_forces(PhysicsDirectBodyState *state); void walk(float _delta); void jump(); void swim(float _delta); void enter_water(); void exit_water(); void mount_ladder(Spatial target_ladder); void climb_ladder(float delta); void leave_ladder(); void damage(int dmg_amt, String _type, Array shooter, String extra); void remove_dead_character(); void net_apply_impulse(Vector3 impulse_v); }; } #endif