#include "environment.h"
#include "constants.h"
#include "settings.h"
+#include "lighting.h"
#include <list>
class Client;
LocalPlayer(Client *client, const char *name);
virtual ~LocalPlayer() = default;
- ClientActiveObject *parent = nullptr;
-
// Initialize hp to 0, so that no hearts will be shown if server
// doesn't support health points
u16 hp = 0;
- bool isAttached = false;
bool touching_ground = false;
// This oscillates so that the player jumps a bit above the surface
bool in_liquid = false;
// This is more stable and defines the maximum speed of the player
bool in_liquid_stable = false;
- // Gets the viscosity of water to calculate friction
- u8 liquid_viscosity = 0;
+ // Slows down the player when moving through
+ u8 move_resistance = 0;
bool is_climbing = false;
bool swimming_vertical = false;
bool swimming_pitch = false;
// Temporary option for old move code
bool physics_override_new_move = true;
- v3f overridePosition;
-
void move(f32 dtime, Environment *env, f32 pos_max_d);
void move(f32 dtime, Environment *env, f32 pos_max_d,
std::vector<CollisionInfo> *collision_info);
v3f last_speed;
float last_pitch = 0.0f;
float last_yaw = 0.0f;
- unsigned int last_keyPressed = 0;
+ u32 last_keyPressed = 0;
u8 last_camera_fov = 0;
u8 last_wanted_range = 0;
bool makes_footstep_sound = true;
int last_animation = NO_ANIM;
- float last_animation_speed;
+ float last_animation_speed = 0.0f;
std::string hotbar_image = "";
std::string hotbar_selected_image = "";
GenericCAO *getCAO() const { return m_cao; }
+ ClientActiveObject *getParent() const;
+
void setCAO(GenericCAO *toset)
{
assert(!m_cao); // Pre-condition
}
v3f getPosition() const { return m_position; }
+
+ // Non-transformed eye offset getters
+ // For accurate positions, use the Camera functions
v3f getEyePosition() const { return m_position + getEyeOffset(); }
v3f getEyeOffset() const;
void setEyeHeight(float eye_height) { m_eye_height = eye_height; }
void setCollisionbox(const aabb3f &box) { m_collisionbox = box; }
+ const aabb3f& getCollisionbox() const { return m_collisionbox; }
+
float getZoomFOV() const { return m_zoom_fov; }
void setZoomFOV(float zoom_fov) { m_zoom_fov = zoom_fov; }
bool getAutojump() const { return m_autojump; }
+ bool isDead() const;
+
inline void addVelocity(const v3f &vel)
{
added_velocity += vel;
}
+ inline Lighting& getLighting() { return m_lighting; }
+
private:
void accelerate(const v3f &target_speed, const f32 max_increase_H,
- const f32 max_increase_V, const bool use_pitch);
+ const f32 max_increase_V, const bool use_pitch);
bool updateSneakNode(Map *map, const v3f &position, const v3f &sneak_max);
float getSlipFactor(Environment *env, const v3f &speedH);
void handleAutojump(f32 dtime, Environment *env,
- const collisionMoveResult &result,
- const v3f &position_before_move, const v3f &speed_before_move,
- f32 pos_max_d);
+ const collisionMoveResult &result,
+ const v3f &position_before_move, const v3f &speed_before_move,
+ f32 pos_max_d);
v3f m_position;
v3s16 m_standing_node;
f32 m_pitch = 0.0f;
bool camera_barely_in_ceiling = false;
aabb3f m_collisionbox = aabb3f(-BS * 0.30f, 0.0f, -BS * 0.30f, BS * 0.30f,
- BS * 1.75f, BS * 0.30f);
+ BS * 1.75f, BS * 0.30f);
float m_eye_height = 1.625f;
float m_zoom_fov = 0.0f;
bool m_autojump = false;
float m_autojump_time = 0.0f;
- v3f added_velocity = v3f(0.0f, 0.0f, 0.0f); // cleared on each move()
+
+ v3f added_velocity = v3f(0.0f); // cleared on each move()
+ // TODO: Rename to adhere to convention: added_velocity --> m_added_velocity
GenericCAO *m_cao = nullptr;
Client *m_client;
+ Lighting m_lighting;
};