Luanti 5.16.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.
133
134 CameraMode_END // Dummy for validity check
135};
136
137extern const struct EnumString es_CameraMode[];
138
139struct HudElement;
140
142{
143public:
144
145 Player(const std::string &name, IItemDefManager *idef);
146 virtual ~Player() = 0;
147
149
150 // in BS-space
151 inline void setSpeed(v3f speed)
152 {
153 m_speed = speed;
154 }
155
156 // in BS-space
157 v3f getSpeed() const { return m_speed; }
158
159 const std::string& getName() const { return m_name; }
160
162 {
163 size_t size = hud.size();
164 for (size_t i = 0; i != size; i++) {
165 if (!hud[i])
166 return i;
167 }
168 return size;
169 }
170
172
176
178
191
194
196 std::string formspec_prepend;
197
200
202
203 // Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified
204 ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const;
205 void setWieldIndex(u16 index);
206 u16 getWieldIndex();
207
208 bool setFov(const PlayerFovSpec &spec)
209 {
210 if (m_fov_override_spec == spec)
211 return false;
212 m_fov_override_spec = spec;
213 return true;
214 }
215
216 const PlayerFovSpec &getFov() const
217 {
218 return m_fov_override_spec;
219 }
220
221 const auto &getHudElements() const { return hud; }
222 HudElement* getHud(u32 id);
223 u32 addHud(HudElement* hud);
224 HudElement* removeHud(u32 id);
225 void clearHud();
226
229
230 // Get actual usable number of hotbar items (clamped to size of "main" list)
232
233protected:
234 std::string m_name;
235 v3f m_speed; // velocity; in BS-space
237 PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f };
238
239private:
240 std::vector<HudElement *> hud;
241};
Definition itemdef.h:146
Definition inventory.h:277
PlayerControl control
Definition player.h:198
u16 getWieldIndex()
Definition player.cpp:84
CameraMode allowed_camera_mode
Definition player.h:171
f32 movement_liquid_fluidity
Definition player.h:187
u16 m_wield_index
Definition player.h:236
Player(const std::string &name, IItemDefManager *idef)
Definition player.cpp:26
std::vector< HudElement * > hud
Definition player.h:240
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:195
f32 movement_acceleration_air
Definition player.h:180
f32 movement_speed_crouch
Definition player.h:183
const std::string & getName() const
Definition player.h:159
f32 movement_acceleration_fast
Definition player.h:181
v2f local_animations[4]
Definition player.h:192
ItemStack & getWieldedItem(ItemStack *selected, ItemStack *hand) const
Definition player.cpp:89
v3f m_speed
Definition player.h:235
void setWieldIndex(u16 index)
Definition player.cpp:78
void clearHud()
Definition player.cpp:138
u32 getFreeHudID()
Definition player.h:161
s32 hud_hotbar_itemcount
Definition player.h:228
f32 movement_speed_jump
Definition player.h:186
HudElement * getHud(u32 id)
Definition player.cpp:118
bool setFov(const PlayerFovSpec &spec)
Definition player.h:208
u16 getMaxHotbarItemcount()
Definition player.cpp:146
PlayerFovSpec m_fov_override_spec
Definition player.h:237
std::string formspec_prepend
Definition player.h:196
v3f eye_offset_third
Definition player.h:174
v3f eye_offset_first
Definition player.h:173
u32 hud_flags
Definition player.h:227
const PlayerFovSpec & getFov() const
Definition player.h:216
Inventory inventory
Definition player.h:177
f32 movement_speed_climb
Definition player.h:185
HudElement * removeHud(u32 id)
Definition player.cpp:125
PlayerPhysicsOverride physics_override
Definition player.h:201
const auto & getHudElements() const
Definition player.h:221
const PlayerControl & getPlayerControl()
Definition player.h:199
float local_animation_speed
Definition player.h:193
v3f eye_offset_third_front
Definition player.h:175
std::string m_name
Definition player.h:234
f32 movement_speed_fast
Definition player.h:184
f32 movement_acceleration_default
Definition player.h:179
v3f getSpeed() const
Definition player.h:157
f32 movement_liquid_fluidity_smooth
Definition player.h:188
f32 movement_gravity
Definition player.h:190
void setSpeed(v3f speed)
Definition player.h:151
f32 movement_liquid_sink
Definition player.h:189
f32 movement_speed_walk
Definition player.h:182
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:13
bool is_valid_player_name(std::string_view name)
Definition player.cpp:21
CameraMode
Definition player.h:127
@ CameraMode_END
Definition player.h:134
@ 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
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