X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient%2Fclient.h;h=44a0de719d7ae68b729cb1694db57bbe3edeb36d;hb=75e6cc190a9b1cc1c3aae059502801365c3a412b;hp=3b1095ac29af48709c4a5414ae8c1aaa63630e17;hpb=be38a44ffe2355d909774923a517d8b37f932dfe;p=minetest.git diff --git a/src/client/client.h b/src/client/client.h index 3b1095ac2..44a0de719 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -37,7 +37,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mesh_generator_thread.h" #include "network/address.h" #include "network/peerhandler.h" +#include "gameparams.h" #include +#include "util/numeric.h" #define CLIENT_CHAT_MESSAGE_LIMIT_PER_10S 10.0f @@ -45,6 +47,7 @@ struct ClientEvent; struct MeshMakeData; struct ChatMessage; class MapBlockMesh; +class RenderingEngine; class IWritableTextureSource; class IWritableShaderSource; class IWritableItemDefManager; @@ -52,6 +55,7 @@ class ISoundManager; class NodeDefManager; //class IWritableCraftDefManager; class ClientMediaDownloader; +class SingleMediaDownloader; struct MapDrawControl; class ModChannelMgr; class MtEventManager; @@ -123,8 +127,10 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef NodeDefManager *nodedef, ISoundManager *sound, MtEventManager *event, + RenderingEngine *rendering_engine, bool ipv6, - GameUI *game_ui + GameUI *game_ui, + ELoginRegister allow_login_or_register ); ~Client(); @@ -222,6 +228,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void handleCommand_FormspecPrepend(NetworkPacket *pkt); void handleCommand_CSMRestrictionFlags(NetworkPacket *pkt); void handleCommand_PlayerSpeed(NetworkPacket *pkt); + void handleCommand_MediaPush(NetworkPacket *pkt); + void handleCommand_MinimapModes(NetworkPacket *pkt); + void handleCommand_SetLighting(NetworkPacket *pkt); void ProcessData(NetworkPacket *pkt); @@ -241,6 +250,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void sendDamage(u16 damage); void sendRespawn(); void sendReady(); + void sendHaveMedia(const std::vector &tokens); ClientEnvironment& getEnv() { return m_env; } ITextureSource *tsrc() { return getTextureSource(); } @@ -304,7 +314,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server=false, bool urgent=false); void updateCameraOffset(v3s16 camera_offset) - { m_mesh_update_thread.m_camera_offset = camera_offset; } + { m_mesh_update_manager.m_camera_offset = camera_offset; } bool hasClientEvents() const { return !m_client_event_queue.empty(); } // Get event from queue. If queue is empty, it triggers an assertion failure. @@ -319,31 +329,33 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef m_access_denied = true; m_access_denied_reason = reason; } + inline void setFatalError(const LuaError &e) + { + setFatalError(std::string("Lua: ") + e.what()); + } // Renaming accessDeniedReason to better name could be good as it's used to // disconnect client when CSM failed. const std::string &accessDeniedReason() const { return m_access_denied_reason; } - const bool itemdefReceived() const + bool itemdefReceived() const { return m_itemdef_received; } - const bool nodedefReceived() const + bool nodedefReceived() const { return m_nodedef_received; } - const bool mediaReceived() const + bool mediaReceived() const { return !m_media_downloader; } - const bool activeObjectsReceived() const + bool activeObjectsReceived() const { return m_activeobjects_received; } u16 getProtoVersion() { return m_proto_ver; } - bool connectedToServer(); - void confirmRegistration(); - bool m_is_registration_confirmation_state = false; bool m_simple_singleplayer_mode; float mediaReceiveProgress(); void afterContentReceived(); + void showUpdateProgressTexture(void *args, u32 progress, u32 max_progress); float getRTT(); float getCurRate(); @@ -352,6 +364,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void setCamera(Camera* camera) { m_camera = camera; } Camera* getCamera () { return m_camera; } + scene::ISceneManager *getSceneManager(); bool shouldShowMinimap() const; @@ -369,14 +382,16 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef { return checkPrivilege(priv); } virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false); const std::string* getModFile(std::string filename); + ModStorageDatabase *getModStorageDatabase() override { return m_mod_storage_database; } - std::string getModStoragePath() const override; - bool registerModStorage(ModMetadata *meta) override; - void unregisterModStorage(const std::string &name) override; + // Migrates away old files-based mod storage if necessary + void migrateModStorage(); // The following set of functions is used by ClientMediaDownloader // Insert a media file appropriately into the appropriate manager - bool loadMedia(const std::string &data, const std::string &filename); + bool loadMedia(const std::string &data, const std::string &filename, + bool from_media_push = false); + // Send a request for conventional media transfer void request_media(const std::vector &file_requests); @@ -390,7 +405,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef } ClientScripting *getScript() { return m_script; } - const bool modsLoaded() const { return m_mods_loaded; } + bool modsLoaded() const { return m_mods_loaded; } void pushToEventQueue(ClientEvent *event); @@ -413,16 +428,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef return m_csm_restriction_flags & flag; } - u32 getCSMNodeRangeLimit() const - { - return m_csm_restriction_noderange; - } - - inline std::unordered_map &getHUDTranslationMap() - { - return m_hud_server_to_client; - } - bool joinModChannel(const std::string &channel) override; bool leaveModChannel(const std::string &channel) override; bool sendModChannelMessage(const std::string &channel, @@ -433,9 +438,13 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef { return m_env.getLocalPlayer()->formspec_prepend; } + inline MeshGrid getMeshGrid() + { + return m_mesh_grid; + } + private: void loadMods(); - bool checkBuiltinIntegrity(); // Virtual methods from con::PeerHandler void peerAdded(con::Peer *peer) override; @@ -454,7 +463,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef static AuthMechanism choseAuthMech(const u32 mechs); void sendInit(const std::string &playerName); - void promptConfirmRegistration(AuthMechanism chosen_auth_mechanism); void startAuth(AuthMechanism chosen_auth_mechanism); void sendDeletedBlocks(std::vector &blocks); void sendGotBlocks(const std::vector &blocks); @@ -478,16 +486,19 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef NodeDefManager *m_nodedef; ISoundManager *m_sound; MtEventManager *m_event; + RenderingEngine *m_rendering_engine; - MeshUpdateThread m_mesh_update_thread; + MeshUpdateManager m_mesh_update_manager; ClientEnvironment m_env; ParticleManager m_particle_manager; std::unique_ptr m_con; std::string m_address_name; + ELoginRegister m_allow_login_or_register = ELoginRegister::Any; Camera *m_camera = nullptr; Minimap *m_minimap = nullptr; bool m_minimap_disabled_by_server = false; + // Server serialization version u8 m_server_ser_ver; @@ -529,7 +540,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef AuthMechanism m_chosen_auth_mech; void *m_auth_data = nullptr; - bool m_access_denied = false; bool m_access_denied_reconnect = false; std::string m_access_denied_reason = ""; @@ -538,7 +548,12 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef bool m_nodedef_received = false; bool m_activeobjects_received = false; bool m_mods_loaded = false; + + std::vector m_remote_media_servers; + // Media downloader, only exists during init ClientMediaDownloader *m_media_downloader; + // Pending downloads of dynamic media (key: token) + std::vector>> m_pending_media_downloads; // time_of_day speed approximation for old protocol bool m_time_of_day_set = false; @@ -557,9 +572,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Relation of client id to object id std::unordered_map m_sounds_to_objects; - // Map server hud ids to client hud ids - std::unordered_map m_hud_server_to_client; - // Privileges std::unordered_set m_privileges; @@ -582,8 +594,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Client modding ClientScripting *m_script = nullptr; - bool m_modding_enabled; - std::unordered_map m_mod_storages; + ModStorageDatabase *m_mod_storage_database = nullptr; float m_mod_storage_save_timer = 10.0f; std::vector m_mods; StringMap m_mod_vfs; @@ -595,4 +606,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef u32 m_csm_restriction_noderange = 8; std::unique_ptr m_modchannel_mgr; + + // The number of blocks the client will combine for mesh generation. + MeshGrid m_mesh_grid; };