Luanti 5.17.0-dev
Loading...
Searching...
No Matches
player.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5#pragma once
6
8#include "inventory.h"
9#include "util/basic_macros.h"
10#include <memory>
11#include <string>
12#include <string_view>
13
14#define PLAYERNAME_SIZE 20
15
16#define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
17#define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'"
18
19bool is_valid_player_name(std::string_view name);
20
22{
23 f32 fov;
24
25 // Whether to multiply the client's FOV or to override it
27
28 // The time to be take to transition to the new FOV value.
29 // Transition is instantaneous if omitted. Omitted by default.
31
32 inline bool operator==(const PlayerFovSpec &other) const {
33 // transition_time is compared here since that could be relevant
34 // when aborting a running transition.
35 return fov == other.fov && is_multiplier == other.is_multiplier &&
37 }
38 inline bool operator!=(const PlayerFovSpec &other) const {
39 return !(*this == other);
40 }
41};
42
44{
45 PlayerControl() = default;
46
48 float a_up, float a_down, float a_left, float a_right,
49 bool a_jump, bool a_aux1, bool a_sneak,
50 bool a_zoom,
51 bool a_dig, bool a_place,
52 float a_pitch, float a_yaw
53 )
54 {
55 up = a_up;
56 down = a_down;
57 left = a_left;
58 right = a_right;
59 jump = a_jump;
60 aux1 = a_aux1;
61 sneak = a_sneak;
62 zoom = a_zoom;
63 dig = a_dig;
64 place = a_place;
65 pitch = a_pitch;
66 yaw = a_yaw;
67 }
68
69 // Sets movement_speed and movement_direction according to direction_keys
70 // if direction_keys != 0, otherwise leaves them unchanged to preserve
71 // joystick input.
73
74 // For client use
75 u32 getKeysPressed() const;
76 inline bool isMoving() const { return movement_speed > 0.001f; }
77
78 // For server use
79 void unpackKeysPressed(u32 keypress_bits);
80 v2f getMovement() const;
81
82 float up = 0;
83 float down = 0;
84 float left = 0;
85 float right = 0;
86 bool jump = false;
87 bool aux1 = false;
88 bool sneak = false;
89 bool zoom = false;
90 bool dig = false;
91 bool place = false;
92 // Note: These two are NOT available on the server
93 float pitch = 0.0f;
94 float yaw = 0.0f;
95 float movement_speed = 0.0f;
96 float movement_direction = 0.0f;
97};
98
100{
101 float speed = 1.f;
102 float jump = 1.f;
103 float gravity = 1.f;
104
105 bool sneak = true;
106 bool sneak_glitch = false;
107 // "Temporary" option for old move code
108 bool new_move = true;
109
110 float speed_climb = 1.f;
111 float speed_crouch = 1.f;
112 float liquid_fluidity = 1.f;
114 float liquid_sink = 1.f;
116 float acceleration_air = 1.f;
117 float speed_fast = 1.f;
118 float acceleration_fast = 1.f;
119 float speed_walk = 1.f;
120
121 bool operator==(const PlayerPhysicsOverride &other) const;
122 bool operator!=(const PlayerPhysicsOverride &other) const {
123 return !(*this == other);
124 }
125};
126
127struct HudElement;
128
130{
131 const auto &getElements() const { return m_elements; }
133 HudElement *get(u32 id);
135 u32 add(std::unique_ptr<HudElement> e);
137 bool remove(u32 id);
138 void clear();
139
140private:
141 u32 getFreeID();
142
143 std::vector<std::unique_ptr<HudElement>> m_elements;
144};
145
147enum CameraMode : int {
148 // not a mode. indicates that any may be used.
153
154 CameraMode_END // Dummy for validity check
155};
156
157extern const struct EnumString es_CameraMode[];
158
160{
161public:
162
163 Player(const std::string &name, IItemDefManager *idef);
164 virtual ~Player() = 0;
165
167
168 // in BS-space
169 inline void setSpeed(v3f speed)
170 {
171 m_speed = speed;
172 }
173
174 // in BS-space
175 v3f getSpeed() const { return m_speed; }
176
177 const std::string& getName() const { return m_name; }
178
180
184
186
199
202
204 std::string formspec_prepend;
205
208
210
211 // Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified
212 ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const;
213 void setWieldIndex(u16 index);
214 u16 getWieldIndex();
215
216 bool setFov(const PlayerFovSpec &spec)
217 {
218 if (m_fov_override_spec == spec)
219 return false;
220 m_fov_override_spec = spec;
221 return true;
222 }
223
224 const PlayerFovSpec &getFov() const
225 {
226 return m_fov_override_spec;
227 }
228
230
233
234 // Get actual usable number of hotbar items (clamped to size of "main" list)
236
237protected:
238 std::string m_name;
239 v3f m_speed; // velocity; in BS-space
241 PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f };
242};
Definition itemdef.h:146
Definition inventory.h:277
PlayerControl control
Definition player.h:206
u16 getWieldIndex()
Definition player.cpp:84
CameraMode allowed_camera_mode
Definition player.h:179
f32 movement_liquid_fluidity
Definition player.h:195
u16 m_wield_index
Definition player.h:240
Player(const std::string &name, IItemDefManager *idef)
Definition player.cpp:27
virtual ~Player()=0
Definition player.cpp:74
DISABLE_CLASS_COPY(Player)
std::string inventory_formspec
Definition player.h:203
f32 movement_acceleration_air
Definition player.h:188
f32 movement_speed_crouch
Definition player.h:191
const std::string & getName() const
Definition player.h:177
f32 movement_acceleration_fast
Definition player.h:189
v2f local_animations[4]
Definition player.h:200
ItemStack & getWieldedItem(ItemStack *selected, ItemStack *hand) const
Definition player.cpp:89
v3f m_speed
Definition player.h:239
void setWieldIndex(u16 index)
Definition player.cpp:78
s32 hud_hotbar_itemcount
Definition player.h:232
f32 movement_speed_jump
Definition player.h:194
bool setFov(const PlayerFovSpec &spec)
Definition player.h:216
u16 getMaxHotbarItemcount()
Definition player.cpp:153
PlayerFovSpec m_fov_override_spec
Definition player.h:241
std::string formspec_prepend
Definition player.h:204
v3f eye_offset_third
Definition player.h:182
v3f eye_offset_first
Definition player.h:181
u32 hud_flags
Definition player.h:231
const PlayerFovSpec & getFov() const
Definition player.h:224
Inventory inventory
Definition player.h:185
f32 movement_speed_climb
Definition player.h:193
PlayerPhysicsOverride physics_override
Definition player.h:209
const PlayerControl & getPlayerControl()
Definition player.h:207
float local_animation_speed
Definition player.h:201
v3f eye_offset_third_front
Definition player.h:183
std::string m_name
Definition player.h:238
f32 movement_speed_fast
Definition player.h:192
f32 movement_acceleration_default
Definition player.h:187
v3f getSpeed() const
Definition player.h:175
f32 movement_liquid_fluidity_smooth
Definition player.h:196
f32 movement_gravity
Definition player.h:198
void setSpeed(v3f speed)
Definition player.h:169
PlayerHud hud
Definition player.h:229
f32 movement_liquid_sink
Definition player.h:197
f32 movement_speed_walk
Definition player.h:190
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector3df v3f
Definition irr_v3d.h:11
const struct EnumString es_CameraMode[]
Definition player.cpp:14
bool is_valid_player_name(std::string_view name)
Definition player.cpp:22
CameraMode
Definition player.h:147
@ CameraMode_END
Definition player.h:154
@ CAMERA_MODE_THIRD
Definition player.h:151
@ CAMERA_MODE_THIRD_FRONT
Definition player.h:152
@ CAMERA_MODE_FIRST
Definition player.h:150
@ CAMERA_MODE_ANY
Definition player.h:149
Definition enum_string.h:11
Definition hud_element.h:85
Definition inventory.h:21
Definition player.h:44
PlayerControl()=default
bool place
Definition player.h:91
void unpackKeysPressed(u32 keypress_bits)
Definition player.cpp:189
void setMovementFromKeys()
Definition player.cpp:159
PlayerControl(float a_up, float a_down, float a_left, float a_right, bool a_jump, bool a_aux1, bool a_sneak, bool a_zoom, bool a_dig, bool a_place, float a_pitch, float a_yaw)
Definition player.h:47
float yaw
Definition player.h:94
bool dig
Definition player.h:90
bool isMoving() const
Definition player.h:76
float movement_direction
Definition player.h:96
float pitch
Definition player.h:93
float right
Definition player.h:85
bool zoom
Definition player.h:89
bool aux1
Definition player.h:87
bool sneak
Definition player.h:88
float movement_speed
Definition player.h:95
float left
Definition player.h:84
v2f getMovement() const
Definition player.cpp:203
u32 getKeysPressed() const
Definition player.cpp:170
bool jump
Definition player.h:86
float up
Definition player.h:82
float down
Definition player.h:83
Definition player.h:22
bool is_multiplier
Definition player.h:26
bool operator==(const PlayerFovSpec &other) const
Definition player.h:32
f32 transition_time
Definition player.h:30
f32 fov
Definition player.h:23
bool operator!=(const PlayerFovSpec &other) const
Definition player.h:38
Definition player.h:130
u32 add(std::unique_ptr< HudElement > e)
Returns the ID of the added element.
Definition player.cpp:116
std::vector< std::unique_ptr< HudElement > > m_elements
Definition player.h:143
const auto & getElements() const
Definition player.h:131
void clear()
Definition player.cpp:148
HudElement * get(u32 id)
Returns nullptr if not found.
Definition player.cpp:128
u32 getFreeID()
Definition player.cpp:106
bool remove(u32 id)
Returns whether removal succeeded.
Definition player.cpp:135
Definition player.h:100
float speed_fast
Definition player.h:117
float speed_walk
Definition player.h:119
float liquid_sink
Definition player.h:114
bool new_move
Definition player.h:108
float liquid_fluidity
Definition player.h:112
bool operator!=(const PlayerPhysicsOverride &other) const
Definition player.h:122
bool operator==(const PlayerPhysicsOverride &other) const
Definition player.cpp:219
float acceleration_air
Definition player.h:116
float jump
Definition player.h:102
bool sneak
Definition player.h:105
float acceleration_default
Definition player.h:115
bool sneak_glitch
Definition player.h:106
float liquid_fluidity_smooth
Definition player.h:113
float speed_crouch
Definition player.h:111
float speed
Definition player.h:101
float speed_climb
Definition player.h:110
float acceleration_fast
Definition player.h:118
float gravity
Definition player.h:103