X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient.h;h=2f212dad8d92ce9cf74bd7378df0462896956763;hb=392485aa454e871566a67afc61e11331f9d27397;hp=0150b687e9414dac1f19fa22ce8520ac852031b4;hpb=af05e4b2defde537f3b953a7dae0ef44fae225aa;p=minetest.git diff --git a/src/client.h b/src/client.h index 0150b687e..2f212dad8 100644 --- a/src/client.h +++ b/src/client.h @@ -29,8 +29,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "clientobject.h" #include "utility.h" // For IntervalLimiter +#include "gamedef.h" struct MeshMakeData; +class IGameDef; +class IWritableTextureSource; +class IWritableToolDefManager; +class IWritableNodeDefManager; +//class IWritableCraftDefManager; +class IWritableCraftItemDefManager; class ClientNotReadyException : public BaseException { @@ -98,7 +105,8 @@ class MeshUpdateThread : public SimpleThread { public: - MeshUpdateThread() + MeshUpdateThread(IGameDef *gamedef): + m_gamedef(gamedef) { } @@ -107,13 +115,17 @@ class MeshUpdateThread : public SimpleThread MeshUpdateQueue m_queue_in; MutexedQueue m_queue_out; + + IGameDef *m_gamedef; }; enum ClientEventType { CE_NONE, CE_PLAYER_DAMAGE, - CE_PLAYER_FORCE_MOVE + CE_PLAYER_FORCE_MOVE, + CE_DEATHSCREEN, + CE_TEXTURES_UPDATED }; struct ClientEvent @@ -129,10 +141,18 @@ struct ClientEvent f32 pitch; f32 yaw; } player_force_move; + struct{ + bool set_camera_point_target; + f32 camera_point_target_x; + f32 camera_point_target_y; + f32 camera_point_target_z; + } deathscreen; + struct{ + } textures_updated; }; }; -class Client : public con::PeerHandler, public InventoryManager +class Client : public con::PeerHandler, public InventoryManager, public IGameDef { public: /* @@ -143,8 +163,12 @@ class Client : public con::PeerHandler, public InventoryManager IrrlichtDevice *device, const char *playername, std::string password, - MapDrawControl &control - ); + MapDrawControl &control, + IWritableTextureSource *tsrc, + IWritableToolDefManager *tooldef, + IWritableNodeDefManager *nodedef, + IWritableCraftItemDefManager *craftitemdef + ); ~Client(); /* @@ -181,35 +205,38 @@ class Client : public con::PeerHandler, public InventoryManager // Pops out a packet from the packet queue //IncomingPacket getPacket(); - void groundAction(u8 action, v3s16 nodepos_undersurface, - v3s16 nodepos_oversurface, u16 item); - void clickObject(u8 button, v3s16 blockpos, s16 id, u16 item); - void clickActiveObject(u8 button, u16 id, u16 item); + void interact(u8 action, const PointedThing& pointed); - void sendSignText(v3s16 blockpos, s16 id, std::string text); void sendSignNodeText(v3s16 p, std::string text); void sendInventoryAction(InventoryAction *a); void sendChatMessage(const std::wstring &message); void sendChangePassword(const std::wstring oldpassword, const std::wstring newpassword); void sendDamage(u8 damage); + void sendRespawn(); // locks envlock void removeNode(v3s16 p); // locks envlock void addNode(v3s16 p, MapNode n); - void updateCamera(v3f pos, v3f dir); + void updateCamera(v3f pos, v3f dir, f32 fov); + + void renderPostFx(); // Returns InvalidPositionException if not found MapNode getNode(v3s16 p); // Wrapper to Map NodeMetadata* getNodeMetadata(v3s16 p); - v3f getPlayerPosition(); + LocalPlayer* getLocalPlayer(); void setPlayerControl(PlayerControl &control); - + + void selectPlayerItem(u16 item); + u16 getPlayerItem() const + { return m_playeritem; } + // Returns true if the inventory of the local player has been // updated from the server. If it is true, it is set to false. bool getLocalInventoryUpdated(); @@ -221,14 +248,6 @@ class Client : public con::PeerHandler, public InventoryManager Inventory* getInventory(InventoryContext *c, std::string id); void inventoryAction(InventoryAction *a); - // Gets closest object pointed by the shootline - // Returns NULL if not found - MapBlockObject * getSelectedObject( - f32 max_d, - v3f from_pos_f_on_map, - core::line3d shootline_on_map - ); - // Gets closest object pointed by the shootline // Returns NULL if not found ClientActiveObject * getSelectedActiveObject( @@ -249,11 +268,11 @@ class Client : public con::PeerHandler, public InventoryManager float getAvgRtt() { - //JMutexAutoLock lock(m_con_mutex); //bulk comment-out - con::Peer *peer = m_con.GetPeerNoEx(PEER_ID_SERVER); - if(peer == NULL) - return 0.0; - return peer->avg_rtt; + try{ + return m_con.GetPeerAvgRTT(PEER_ID_SERVER); + } catch(con::PeerNotFoundException){ + return 1337; + } } bool getChatMessage(std::wstring &message) @@ -266,6 +285,12 @@ class Client : public con::PeerHandler, public InventoryManager void addChatMessage(const std::wstring &message) { + if (message[0] == L'/') { + m_chat_queue.push_back( + (std::wstring)L"issued command: "+message); + return; + } + //JMutexAutoLock envlock(m_env_mutex); //bulk comment-out LocalPlayer *player = m_env.getLocalPlayer(); assert(player != NULL); @@ -283,24 +308,33 @@ class Client : public con::PeerHandler, public InventoryManager // Get event from queue. CE_NONE is returned if queue is empty. ClientEvent getClientEvent(); - inline bool accessDenied() - { - return m_access_denied; - } - - inline std::wstring accessDeniedReason() - { - return m_access_denied_reason; - } + bool accessDenied() + { return m_access_denied; } + + std::wstring accessDeniedReason() + { return m_access_denied_reason; } + + float textureReceiveProgress() + { return m_texture_receive_progress; } + + bool texturesReceived() + { return m_textures_received; } + bool tooldefReceived() + { return m_tooldef_received; } + bool nodedefReceived() + { return m_nodedef_received; } + bool craftitemdefReceived() + { return m_craftitemdef_received; } - /* - This should only be used for calling the special drawing stuff in - ClientEnvironment - */ - ClientEnvironment * getEnv() - { - return &m_env; - } + float getRTT(void); + + // IGameDef interface + virtual IToolDefManager* getToolDefManager(); + virtual INodeDefManager* getNodeDefManager(); + virtual ICraftDefManager* getCraftDefManager(); + virtual ICraftItemDefManager* getCraftItemDefManager(); + virtual ITextureSource* getTextureSource(); + virtual u16 allocateUnknownNodeId(const std::string &name); private: @@ -314,6 +348,8 @@ class Client : public con::PeerHandler, public InventoryManager void sendPlayerPos(); // This sends the player's current name etc to the server void sendPlayerInfo(); + // Send the item number 'item' as player item to the server + void sendPlayerItem(u16 item); float m_packetcounter_timer; float m_connection_reinit_timer; @@ -322,47 +358,38 @@ class Client : public con::PeerHandler, public InventoryManager float m_ignore_damage_timer; // Used after server moves player IntervalLimiter m_map_timer_and_unload_interval; + IWritableTextureSource *m_tsrc; + IWritableToolDefManager *m_tooldef; + IWritableNodeDefManager *m_nodedef; + IWritableCraftItemDefManager *m_craftitemdef; MeshUpdateThread m_mesh_update_thread; - ClientEnvironment m_env; - con::Connection m_con; - IrrlichtDevice *m_device; - - v3f camera_position; - v3f camera_direction; - // Server serialization version u8 m_server_ser_ver; - - // This is behind m_env_mutex. + u16 m_playeritem; bool m_inventory_updated; - core::map m_active_blocks; - PacketCounter m_packetcounter; - // Received from the server. 0-23999 u32 m_time_of_day; - // 0 <= m_daynight_i < DAYNIGHT_CACHE_COUNT //s32 m_daynight_i; //u32 m_daynight_ratio; - Queue m_chat_queue; - // The seed returned by the server in TOCLIENT_INIT is stored here u64 m_map_seed; - std::string m_password; bool m_access_denied; std::wstring m_access_denied_reason; - InventoryContext m_inventory_context; - Queue m_client_event_queue; - + float m_texture_receive_progress; + bool m_textures_received; + bool m_tooldef_received; + bool m_nodedef_received; + bool m_craftitemdef_received; friend class FarMesh; };