cleanup
[waspsaliva.git] / src / player.h
blob9a4a41fa6b52f8a9dbf2176b89167903193259fb
1 /*
2 Minetest
3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #pragma once
22 #include "irrlichttypes_bloated.h"
23 #include "inventory.h"
24 #include "constants.h"
25 #include "network/networkprotocol.h"
26 #include "util/basic_macros.h"
27 #include <list>
28 #include <mutex>
30 #define PLAYERNAME_SIZE 20
32 #define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
33 #define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'"
35 struct PlayerFovSpec
37 f32 fov;
39 // Whether to multiply the client's FOV or to override it
40 bool is_multiplier;
42 // The time to be take to trasition to the new FOV value.
43 // Transition is instantaneous if omitted. Omitted by default.
44 f32 transition_time;
47 struct PlayerControl
49 PlayerControl() = default;
51 PlayerControl(
52 bool a_up,
53 bool a_down,
54 bool a_left,
55 bool a_right,
56 bool a_jump,
57 bool a_aux1,
58 bool a_sneak,
59 bool a_zoom,
60 bool a_dig,
61 bool a_place,
62 float a_pitch,
63 float a_yaw,
64 float a_sidew_move_joystick_axis,
65 float a_forw_move_joystick_axis
68 up = a_up;
69 down = a_down;
70 left = a_left;
71 right = a_right;
72 jump = a_jump;
73 aux1 = a_aux1;
74 sneak = a_sneak;
75 zoom = a_zoom;
76 dig = a_dig;
77 place = a_place;
78 pitch = a_pitch;
79 yaw = a_yaw;
80 sidew_move_joystick_axis = a_sidew_move_joystick_axis;
81 forw_move_joystick_axis = a_forw_move_joystick_axis;
83 bool up = false;
84 bool down = false;
85 bool left = false;
86 bool right = false;
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 float pitch = 0.0f;
94 float yaw = 0.0f;
95 float sidew_move_joystick_axis = 0.0f;
96 float forw_move_joystick_axis = 0.0f;
99 struct PlayerSettings
101 bool free_move = false;
102 bool pitch_move = false;
103 bool fast_move = false;
104 bool freecam = false;
105 bool continuous_forward = false;
106 bool always_fly_fast = false;
107 bool aux1_descends = false;
108 bool noclip = false;
109 bool autojump = false;
111 const std::string setting_names[9] = {
112 "free_move", "pitch_move", "fast_move", "freecam", "continuous_forward", "always_fly_fast",
113 "aux1_descends", "noclip", "autojump"
115 void readGlobalSettings();
118 class Map;
119 struct CollisionInfo;
120 struct HudElement;
121 class Environment;
123 class Player
125 public:
127 Player(const char *name, IItemDefManager *idef);
128 virtual ~Player() = 0;
130 DISABLE_CLASS_COPY(Player);
132 virtual void move(f32 dtime, Environment *env, f32 pos_max_d)
134 virtual void move(f32 dtime, Environment *env, f32 pos_max_d,
135 std::vector<CollisionInfo> *collision_info)
138 const v3f &getSpeed() const
140 return m_speed;
143 void setSpeed(const v3f &speed)
145 m_speed = speed;
148 const char *getName() const { return m_name; }
150 u32 getFreeHudID()
152 size_t size = hud.size();
153 for (size_t i = 0; i != size; i++) {
154 if (!hud[i])
155 return i;
157 return size;
160 v3f eye_offset_first;
161 v3f eye_offset_third;
163 Inventory inventory;
165 f32 movement_acceleration_default;
166 f32 movement_acceleration_air;
167 f32 movement_acceleration_fast;
168 f32 movement_speed_walk;
169 f32 movement_speed_crouch;
170 f32 movement_speed_fast;
171 f32 movement_speed_climb;
172 f32 movement_speed_jump;
173 f32 movement_liquid_fluidity;
174 f32 movement_liquid_fluidity_smooth;
175 f32 movement_liquid_sink;
176 f32 movement_gravity;
178 v2s32 local_animations[4];
179 float local_animation_speed;
181 std::string inventory_formspec;
182 std::string formspec_prepend;
184 PlayerControl control;
185 const PlayerControl& getPlayerControl() { return control; }
186 PlayerSettings &getPlayerSettings() { return m_player_settings; }
187 static void settingsChangedCallback(const std::string &name, void *data);
189 // Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified
190 ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const;
191 void setWieldIndex(u16 index);
192 u16 getWieldIndex() const { return m_wield_index; }
194 void setFov(const PlayerFovSpec &spec)
196 m_fov_override_spec = spec;
199 const PlayerFovSpec &getFov() const
201 return m_fov_override_spec;
204 u32 keyPressed = 0;
206 HudElement* getHud(u32 id);
207 u32 addHud(HudElement* hud);
208 HudElement* removeHud(u32 id);
209 void clearHud();
211 u32 hud_flags;
212 s32 hud_hotbar_itemcount;
214 protected:
215 char m_name[PLAYERNAME_SIZE];
216 v3f m_speed;
217 u16 m_wield_index = 0;
218 PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f };
220 std::vector<HudElement *> hud;
221 private:
222 // Protect some critical areas
223 // hud for example can be modified by EmergeThread
224 // and ServerThread
225 std::mutex m_mutex;
226 PlayerSettings m_player_settings;