X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fplayer.h;h=9a4a41fa6b52f8a9dbf2176b89167903193259fb;hb=fb4815c660d6d9cfc9df76a3ba763095b9701925;hp=1d9882775398beeaa5b846a7c053e1058e50e228;hpb=3eb9ff555f16110eccc38d06e6d9946f6f563f5c;p=dragonfireclient.git diff --git a/src/player.h b/src/player.h index 1d9882775..9a4a41fa6 100644 --- a/src/player.h +++ b/src/player.h @@ -17,12 +17,12 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef PLAYER_HEADER -#define PLAYER_HEADER +#pragma once #include "irrlichttypes_bloated.h" #include "inventory.h" #include "constants.h" +#include "network/networkprotocol.h" #include "util/basic_macros.h" #include #include @@ -32,9 +32,21 @@ with this program; if not, write to the Free Software Foundation, Inc., #define PLAYERNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_" #define PLAYERNAME_ALLOWED_CHARS_USER_EXPL "'a' to 'z', 'A' to 'Z', '0' to '9', '-', '_'" +struct PlayerFovSpec +{ + f32 fov; + + // Whether to multiply the client's FOV or to override it + bool is_multiplier; + + // The time to be take to trasition to the new FOV value. + // Transition is instantaneous if omitted. Omitted by default. + f32 transition_time; +}; + struct PlayerControl { - PlayerControl() {} + PlayerControl() = default; PlayerControl( bool a_up, @@ -45,8 +57,8 @@ struct PlayerControl bool a_aux1, bool a_sneak, bool a_zoom, - bool a_LMB, - bool a_RMB, + bool a_dig, + bool a_place, float a_pitch, float a_yaw, float a_sidew_move_joystick_axis, @@ -61,8 +73,8 @@ struct PlayerControl aux1 = a_aux1; sneak = a_sneak; zoom = a_zoom; - LMB = a_LMB; - RMB = a_RMB; + dig = a_dig; + place = a_place; pitch = a_pitch; yaw = a_yaw; sidew_move_joystick_axis = a_sidew_move_joystick_axis; @@ -76,14 +88,33 @@ struct PlayerControl bool aux1 = false; bool sneak = false; bool zoom = false; - bool LMB = false; - bool RMB = false; + bool dig = false; + bool place = false; float pitch = 0.0f; float yaw = 0.0f; float sidew_move_joystick_axis = 0.0f; float forw_move_joystick_axis = 0.0f; }; +struct PlayerSettings +{ + bool free_move = false; + bool pitch_move = false; + bool fast_move = false; + bool freecam = false; + bool continuous_forward = false; + bool always_fly_fast = false; + bool aux1_descends = false; + bool noclip = false; + bool autojump = false; + + const std::string setting_names[9] = { + "free_move", "pitch_move", "fast_move", "freecam", "continuous_forward", "always_fly_fast", + "aux1_descends", "noclip", "autojump" + }; + void readGlobalSettings(); +}; + class Map; struct CollisionInfo; struct HudElement; @@ -147,12 +178,28 @@ class Player v2s32 local_animations[4]; float local_animation_speed; - u16 peer_id = PEER_ID_INEXISTENT; - std::string inventory_formspec; + std::string formspec_prepend; PlayerControl control; const PlayerControl& getPlayerControl() { return control; } + PlayerSettings &getPlayerSettings() { return m_player_settings; } + static void settingsChangedCallback(const std::string &name, void *data); + + // Returns non-empty `selected` ItemStack. `hand` is a fallback, if specified + ItemStack &getWieldedItem(ItemStack *selected, ItemStack *hand) const; + void setWieldIndex(u16 index); + u16 getWieldIndex() const { return m_wield_index; } + + void setFov(const PlayerFovSpec &spec) + { + m_fov_override_spec = spec; + } + + const PlayerFovSpec &getFov() const + { + return m_fov_override_spec; + } u32 keyPressed = 0; @@ -163,9 +210,12 @@ class Player u32 hud_flags; s32 hud_hotbar_itemcount; + protected: char m_name[PLAYERNAME_SIZE]; v3f m_speed; + u16 m_wield_index = 0; + PlayerFovSpec m_fov_override_spec = { 0.0f, false, 0.0f }; std::vector hud; private: @@ -173,7 +223,5 @@ class Player // hud for example can be modified by EmergeThread // and ServerThread std::mutex m_mutex; + PlayerSettings m_player_settings; }; - -#endif -