Luanti 5.15.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 <string>
11#include <string_view>
12
13#define PLAYERNAME_SIZE 20
14
15#define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
16#define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'"
17
18bool is_valid_player_name(std::string_view name);
19
21{
22 f32 fov;
23
24 // Whether to multiply the client's FOV or to override it
26
27 // The time to be take to trasition to the new FOV value.
28 // Transition is instantaneous if omitted. Omitted by default.
30
31 inline bool operator==(const PlayerFovSpec &other) const {
32 // transition_time is compared here since that could be relevant
33 // when aborting a running transition.
34 return fov == other.fov && is_multiplier == other.is_multiplier &&
36 }
37 inline bool operator!=(const PlayerFovSpec &other) const {
38 return !(*this == other);
39 }
40};
41
43{
44 PlayerControl() = default;
45
47 bool a_up, bool a_down, bool a_left, bool a_right,
48 bool a_jump, bool a_aux1, bool a_sneak,
49 bool a_zoom,
50 bool a_dig, bool a_place,
51 float a_pitch, float a_yaw,
52 float a_movement_speed, float a_movement_direction
53 )
54 {
55 // Encode direction keys into a single value so nobody uses it accidentally
56 // as movement_{speed,direction} is supposed to be the source of truth.
57 direction_keys = (a_up&1) | ((a_down&1) << 1) |
58 ((a_left&1) << 2) | ((a_right&1) << 3);
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 movement_speed = a_movement_speed;
68 movement_direction = a_movement_direction;
69 }
70
71 // Sets movement_speed and movement_direction according to direction_keys
72 // if direction_keys != 0, otherwise leaves them unchanged to preserve
73 // joystick input.
75
76 // For client use
77 u32 getKeysPressed() const;
78 inline bool isMoving() const { return movement_speed > 0.001f; }
79
80 // For server use
81 void unpackKeysPressed(u32 keypress_bits);
82 v2f getMovement() const;
83
85 bool jump = false;
86 bool aux1 = false;
87 bool sneak = false;
88 bool zoom = false;
89 bool dig = false;
90 bool place = false;
91 // Note: These two are NOT available on the server
92 float pitch = 0.0f;
93 float yaw = 0.0f;
94 float movement_speed = 0.0f;
95 float movement_direction = 0.0f;
96};
97
99{
100 float speed = 1.f;
101 float jump = 1.f;
102 float gravity = 1.f;
103
104 bool sneak = true;
105 bool sneak_glitch = false;
106 // "Temporary" option for old move code
107 bool new_move = true;
108
109 float speed_climb = 1.f;
110 float speed_crouch = 1.f;
111 float liquid_fluidity = 1.f;
113 float liquid_sink = 1.f;
115 float acceleration_air = 1.f;
116 float speed_fast = 1.f;
117 float acceleration_fast = 1.f;
118 float speed_walk = 1.f;
119
120 bool operator==(const PlayerPhysicsOverride &other) const;
121 bool operator!=(const PlayerPhysicsOverride &other) const {
122 return !(*this == other);
123 }
124};
125
127enum CameraMode : int {
128 // not a mode. indicates that any may be used.
134
135extern const struct EnumString es_CameraMode[];
136
137struct HudElement;
138
140{
141public:
142
143 Player(const std::string &name, IItemDefManager *idef);
144 virtual ~Player() = 0;
145
147
148 // in BS-space
149 inline void setSpeed(v3f speed)
150 {
151 m_speed = speed;
152 }
153
154 // in BS-space
155 v3f getSpeed() const { return m_speed; }
156
157 const std::string& getName() const { return m_name; }
158
160 {
161 size_t size = hud.size();
162 for (size_t i = 0; i != size; i++) {
163 if (!hud[i])
164 return i;
165 }
166 return size;
167 }
168
170
174
176
189
192
194 std::string formspec_prepend;
195
198
200
201 // Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified
202 ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const;
203 void setWieldIndex(u16 index);
204 u16 getWieldIndex();
205
206 bool setFov(const PlayerFovSpec &spec)
207 {
208 if (m_fov_override_spec == spec)
209 return false;
210 m_fov_override_spec = spec;
211 return true;
212 }
213
214 const PlayerFovSpec &getFov() const
215 {
216 return m_fov_override_spec;
217 }
218
219 const auto &getHudElements() const { return hud; }
220 HudElement* getHud(u32 id);
221 u32 addHud(HudElement* hud);
222 HudElement* removeHud(u32 id);
223 void clearHud();
224
227
228 // Get actual usable number of hotbar items (clamped to size of "main" list)
230
231protected:
232 std::string m_name;
233 v3f m_speed; // velocity; in BS-space
235 PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f };
236
237private:
238 std::vector<HudElement *> hud;
239};
Definition itemdef.h:146
Definition inventory.h:277
Definition player.h:140
PlayerControl control
Definition player.h:196
u16 getWieldIndex()
Definition player.cpp:84
CameraMode allowed_camera_mode
Definition player.h:169
f32 movement_liquid_fluidity
Definition player.h:185
u16 m_wield_index
Definition player.h:234
Player(const std::string &name, IItemDefManager *idef)
Definition player.cpp:26
std::vector< HudElement * > hud
Definition player.h:238
virtual ~Player()=0
Definition player.cpp:73
u32 addHud(HudElement *hud)
Definition player.cpp:106
DISABLE_CLASS_COPY(Player)
std::string inventory_formspec
Definition player.h:193
f32 movement_acceleration_air
Definition player.h:178
f32 movement_speed_crouch
Definition player.h:181
const std::string & getName() const
Definition player.h:157
f32 movement_acceleration_fast
Definition player.h:179
v2f local_animations[4]
Definition player.h:190
ItemStack & getWieldedItem(ItemStack *selected, ItemStack *hand) const
Definition player.cpp:89
v3f m_speed
Definition player.h:233
void setWieldIndex(u16 index)
Definition player.cpp:78
void clearHud()
Definition player.cpp:138
u32 getFreeHudID()
Definition player.h:159
s32 hud_hotbar_itemcount
Definition player.h:226
f32 movement_speed_jump
Definition player.h:184
HudElement * getHud(u32 id)
Definition player.cpp:118
bool setFov(const PlayerFovSpec &spec)
Definition player.h:206
u16 getMaxHotbarItemcount()
Definition player.cpp:146
PlayerFovSpec m_fov_override_spec
Definition player.h:235
std::string formspec_prepend
Definition player.h:194
v3f eye_offset_third
Definition player.h:172
v3f eye_offset_first
Definition player.h:171
u32 hud_flags
Definition player.h:225
const PlayerFovSpec & getFov() const
Definition player.h:214
Inventory inventory
Definition player.h:175
f32 movement_speed_climb
Definition player.h:183
HudElement * removeHud(u32 id)
Definition player.cpp:125
PlayerPhysicsOverride physics_override
Definition player.h:199
const auto & getHudElements() const
Definition player.h:219
const PlayerControl & getPlayerControl()
Definition player.h:197
float local_animation_speed
Definition player.h:191
v3f eye_offset_third_front
Definition player.h:173
std::string m_name
Definition player.h:232
f32 movement_speed_fast
Definition player.h:182
f32 movement_acceleration_default
Definition player.h:177
v3f getSpeed() const
Definition player.h:155
f32 movement_liquid_fluidity_smooth
Definition player.h:186
f32 movement_gravity
Definition player.h:188
void setSpeed(v3f speed)
Definition player.h:149
f32 movement_liquid_sink
Definition player.h:187
f32 movement_speed_walk
Definition player.h:180
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector3df v3f
Definition irr_v3d.h:11
bool is_valid_player_name(std::string_view name)
Definition player.cpp:21
CameraMode
Definition player.h:127
@ CAMERA_MODE_THIRD
Definition player.h:131
@ CAMERA_MODE_THIRD_FRONT
Definition player.h:132
@ CAMERA_MODE_FIRST
Definition player.h:130
@ CAMERA_MODE_ANY
Definition player.h:129
const struct EnumString es_CameraMode[]
Definition player.cpp:13
Definition enum_string.h:11
Definition hud_element.h:84
Definition inventory.h:21
Definition player.h:43
PlayerControl()=default
bool place
Definition player.h:90
void unpackKeysPressed(u32 keypress_bits)
Definition player.cpp:232
void setMovementFromKeys()
Definition player.cpp:152
float yaw
Definition player.h:93
bool dig
Definition player.h:89
bool isMoving() const
Definition player.h:78
float movement_direction
Definition player.h:95
float pitch
Definition player.h:92
bool zoom
Definition player.h:88
bool aux1
Definition player.h:86
u8 direction_keys
Definition player.h:84
bool sneak
Definition player.h:87
float movement_speed
Definition player.h:94
PlayerControl(bool a_up, bool a_down, bool a_left, bool 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, float a_movement_speed, float a_movement_direction)
Definition player.h:46
v2f getMovement() const
Definition player.cpp:243
u32 getKeysPressed() const
Definition player.cpp:188
bool jump
Definition player.h:85
Definition player.h:21
bool is_multiplier
Definition player.h:25
bool operator==(const PlayerFovSpec &other) const
Definition player.h:31
f32 transition_time
Definition player.h:29
f32 fov
Definition player.h:22
bool operator!=(const PlayerFovSpec &other) const
Definition player.h:37
Definition player.h:99
float speed_fast
Definition player.h:116
float speed_walk
Definition player.h:118
float liquid_sink
Definition player.h:113
bool new_move
Definition player.h:107
float liquid_fluidity
Definition player.h:111
bool operator!=(const PlayerPhysicsOverride &other) const
Definition player.h:121
bool operator==(const PlayerPhysicsOverride &other) const
Definition player.cpp:259
float acceleration_air
Definition player.h:115
float jump
Definition player.h:101
bool sneak
Definition player.h:104
float acceleration_default
Definition player.h:114
bool sneak_glitch
Definition player.h:105
float liquid_fluidity_smooth
Definition player.h:112
float speed_crouch
Definition player.h:110
float speed
Definition player.h:100
float speed_climb
Definition player.h:109
float acceleration_fast
Definition player.h:117
float gravity
Definition player.h:102