X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclient.h;h=9146941e8263dbb02f3906d3eaac52f5401671db;hb=4e1f50035e860a00636ca5d804c267119df99601;hp=f751220f7c48f3c7ade5faf47f731b98abb00641;hpb=4cc98d7add7b697ac302a6136bbeb95ef78cec45;p=dragonfireclient.git diff --git a/src/client.h b/src/client.h index f751220f7..9146941e8 100644 --- a/src/client.h +++ b/src/client.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2010 celeron55, Perttu Ahola +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -25,20 +25,24 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_extrabloated.h" #include "jmutex.h" #include +#include #include #include #include "clientobject.h" #include "gamedef.h" #include "inventorymanager.h" -#include "filesys.h" #include "filecache.h" #include "localplayer.h" +#include "server.h" +#include "particles.h" #include "util/pointedthing.h" +#include struct MeshMakeData; class MapBlockMesh; class IGameDef; class IWritableTextureSource; +class IWritableShaderSource; class IWritableItemDefManager; class IWritableNodeDefManager; //class IWritableCraftDefManager; @@ -128,13 +132,38 @@ class MeshUpdateThread : public SimpleThread IGameDef *m_gamedef; }; +class MediaFetchThread : public SimpleThread +{ +public: + + MediaFetchThread(IGameDef *gamedef): + m_gamedef(gamedef) + { + } + + void * Thread(); + + std::list m_file_requests; + MutexedQueue > m_file_data; + std::list m_failed; + std::string m_remote_url; + IGameDef *m_gamedef; +}; + enum ClientEventType { CE_NONE, CE_PLAYER_DAMAGE, CE_PLAYER_FORCE_MOVE, CE_DEATHSCREEN, - CE_TEXTURES_UPDATED + CE_TEXTURES_UPDATED, + CE_SHOW_FORMSPEC, + CE_SPAWN_PARTICLE, + CE_ADD_PARTICLESPAWNER, + CE_DELETE_PARTICLESPAWNER, + CE_HUDADD, + CE_HUDRM, + CE_HUDCHANGE }; struct ClientEvent @@ -156,11 +185,118 @@ struct ClientEvent f32 camera_point_target_y; f32 camera_point_target_z; } deathscreen; + struct{ + std::string *formspec; + std::string *formname; + } show_formspec; struct{ } textures_updated; + struct{ + v3f *pos; + v3f *vel; + v3f *acc; + f32 expirationtime; + f32 size; + bool collisiondetection; + std::string *texture; + } spawn_particle; + struct{ + u16 amount; + f32 spawntime; + v3f *minpos; + v3f *maxpos; + v3f *minvel; + v3f *maxvel; + v3f *minacc; + v3f *maxacc; + f32 minexptime; + f32 maxexptime; + f32 minsize; + f32 maxsize; + bool collisiondetection; + std::string *texture; + u32 id; + } add_particlespawner; + struct{ + u32 id; + } delete_particlespawner; + struct{ + u32 id; + u8 type; + v2f *pos; + std::string *name; + v2f *scale; + std::string *text; + u32 number; + u32 item; + u32 dir; + v2f *align; + v2f *offset; + } hudadd; + struct{ + u32 id; + } hudrm; + struct{ + u32 id; + HudElementStat stat; + v2f *v2fdata; + std::string *sdata; + u32 data; + } hudchange; }; }; +/* + Packet counter +*/ + +class PacketCounter +{ +public: + PacketCounter() + { + } + + void add(u16 command) + { + std::map::iterator n = m_packets.find(command); + if(n == m_packets.end()) + { + m_packets[command] = 1; + } + else + { + n->second++; + } + } + + void clear() + { + for(std::map::iterator + i = m_packets.begin(); + i != m_packets.end(); ++i) + { + i->second = 0; + } + } + + void print(std::ostream &o) + { + for(std::map::iterator + i = m_packets.begin(); + i != m_packets.end(); ++i) + { + o<<"cmd "<first + <<" count "<second + < m_packets; +}; + class Client : public con::PeerHandler, public InventoryManager, public IGameDef { public: @@ -174,10 +310,12 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef std::string password, MapDrawControl &control, IWritableTextureSource *tsrc, + IWritableShaderSource *shsrc, IWritableItemDefManager *itemdef, IWritableNodeDefManager *nodedef, ISoundManager *sound, - MtEventManager *event + MtEventManager *event, + bool ipv6 ); ~Client(); @@ -219,6 +357,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void sendChangePassword(const std::wstring oldpassword, const std::wstring newpassword); void sendDamage(u8 damage); + void sendBreath(u16 breath); void sendRespawn(); ClientEnvironment& getEnv() @@ -255,7 +394,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Prints a line or two of info void printDebugInfo(std::ostream &os); - core::list getConnectedPlayerNames(); + std::list getConnectedPlayerNames(); float getAnimationTime(); @@ -263,6 +402,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void setCrack(int level, v3s16 pos); u16 getHP(); + u16 getBreath(); bool checkPrivilege(const std::string &priv) { return (m_privileges.count(priv) != 0); } @@ -287,16 +427,19 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef { return m_access_denied_reason; } float mediaReceiveProgress() - { return m_media_receive_progress; } + { + if (!m_media_receive_started) return 0; + return 1.0 * m_media_received_count / m_media_count; + } bool texturesReceived() - { return m_media_received; } + { return m_media_receive_started && m_media_received_count == m_media_count; } bool itemdefReceived() { return m_itemdef_received; } bool nodedefReceived() { return m_nodedef_received; } - void afterContentReceived(); + void afterContentReceived(IrrlichtDevice *device, gui::IGUIFont* font); float getRTT(void); @@ -305,6 +448,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef virtual INodeDefManager* getNodeDefManager(); virtual ICraftDefManager* getCraftDefManager(); virtual ITextureSource* getTextureSource(); + virtual IShaderSource* getShaderSource(); virtual u16 allocateUnknownNodeId(const std::string &name); virtual ISoundManager* getSoundManager(); virtual MtEventManager* getEventManager(); @@ -315,7 +459,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Insert a media file appropriately into the appropriate manager bool loadMedia(const std::string &data, const std::string &filename); - + + void request_media(const std::list &file_requests); + // Virtual methods from con::PeerHandler void peerAdded(con::Peer *peer); void deletingPeer(con::Peer *peer, bool timeout); @@ -324,8 +470,6 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef void Receive(); 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); @@ -337,12 +481,14 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef IntervalLimiter m_map_timer_and_unload_interval; IWritableTextureSource *m_tsrc; + IWritableShaderSource *m_shsrc; IWritableItemDefManager *m_itemdef; IWritableNodeDefManager *m_nodedef; ISoundManager *m_sound; MtEventManager *m_event; MeshUpdateThread m_mesh_update_thread; + std::list m_media_fetch_threads; ClientEnvironment m_env; con::Connection m_con; IrrlichtDevice *m_device; @@ -352,7 +498,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef bool m_inventory_updated; Inventory *m_inventory_from_server; float m_inventory_from_server_age; - core::map m_active_blocks; + std::set m_active_blocks; PacketCounter m_packetcounter; // Block mesh animation parameters float m_animation_time; @@ -370,18 +516,21 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef Queue m_client_event_queue; FileCache m_media_cache; // Mapping from media file name to SHA1 checksum - core::map m_media_name_sha1_map; - float m_media_receive_progress; - bool m_media_received; + std::map m_media_name_sha1_map; + bool m_media_receive_started; + u32 m_media_count; + u32 m_media_received_count; bool m_itemdef_received; bool m_nodedef_received; - friend class FarMesh; // time_of_day speed approximation for old protocol bool m_time_of_day_set; float m_last_time_of_day_f; float m_time_of_day_update_timer; + // An interval for generally sending object positions and stuff + float m_recommended_send_interval; + // Sounds float m_removed_sounds_check_timer; // Mapping from server sound ids to our sound ids @@ -393,6 +542,10 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef // Privileges std::set m_privileges; + + // Detached inventories + // key = name + std::map m_detached_inventories; }; #endif // !CLIENT_HEADER