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