X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=src%2Fenvironment.h;h=597ad5ff0187698bdc6c4338f0e3c7e07cea714f;hb=4e1f50035e860a00636ca5d804c267119df99601;hp=02301e5d3027b07f74997b5cbf91170e2b22ba1f;hpb=a0566270d9fa075afa36a7e3e68c690b1b23ba90;p=dragonfireclient.git diff --git a/src/environment.h b/src/environment.h index 02301e5d3..597ad5ff0 100644 --- a/src/environment.h +++ b/src/environment.h @@ -32,11 +32,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "irrlichttypes_extrabloated.h" -#include "player.h" -#include +#include +#include "irr_v3d.h" #include "activeobject.h" -#include "util/container.h" #include "util/numeric.h" #include "mapnode.h" #include "mapblock.h" @@ -44,12 +42,14 @@ with this program; if not, write to the Free Software Foundation, Inc., class ServerEnvironment; class ActiveBlockModifier; class ServerActiveObject; -typedef struct lua_State lua_State; class ITextureSource; class IGameDef; +class IBackgroundBlockEmerger; class Map; class ServerMap; class ClientMap; +class GameScripting; +class Player; class Environment { @@ -76,7 +76,6 @@ class Environment Player * getNearestConnectedPlayer(v3f pos); std::list getPlayers(); std::list getPlayers(bool ignore_disconnected); - void printPlayers(std::ostream &o); u32 getDayNightRatio(); @@ -175,12 +174,6 @@ class ActiveBlockList private: }; -class IBackgroundBlockEmerger -{ -public: - virtual void queueBlockEmerge(v3s16 blockpos, bool allow_generate)=0; -}; - /* The server-side environment. @@ -190,7 +183,8 @@ class IBackgroundBlockEmerger class ServerEnvironment : public Environment { public: - ServerEnvironment(ServerMap *map, lua_State *L, IGameDef *gamedef, + ServerEnvironment(ServerMap *map, GameScripting *scriptIface, + IGameDef *gamedef, IBackgroundBlockEmerger *emerger); ~ServerEnvironment(); @@ -198,8 +192,9 @@ class ServerEnvironment : public Environment ServerMap & getServerMap(); - lua_State* getLua() - { return m_lua; } + //TODO find way to remove this fct! + GameScripting* getScriptIface() + { return m_script; } IGameDef *getGameDef() { return m_gamedef; } @@ -298,6 +293,13 @@ class ServerEnvironment : public Environment // This makes stuff happen void step(f32 dtime); + //check if there's a line of sight between two positions + bool line_of_sight(v3f pos1, v3f pos2, float stepsize=1.0); + + u32 getGameTime() { return m_game_time; } + + void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; } + float getMaxLagEstimate() { return m_max_lag_estimate; } private: /* @@ -345,15 +347,15 @@ class ServerEnvironment : public Environment // The map ServerMap *m_map; // Lua state - lua_State *m_lua; + GameScripting* m_script; // Game definition IGameDef *m_gamedef; - // Background block emerger (the server, in practice) + // Background block emerger (the EmergeManager, in practice) IBackgroundBlockEmerger *m_emerger; // Active object list std::map m_active_objects; // Outgoing network message buffer for active objects - Queue m_active_object_messages; + std::list m_active_object_messages; // Some timers float m_random_spawn_timer; // used for experimental code float m_send_recommended_timer; @@ -372,6 +374,9 @@ class ServerEnvironment : public Environment std::list m_abms; // An interval for generally sending object positions and stuff float m_recommended_send_interval; + // Estimate for general maximum lag as determined by server. + // Can raise to high values like 15s with eg. map generation mods. + float m_max_lag_estimate; }; #ifndef SERVER @@ -390,7 +395,8 @@ class ClientSimpleObject; enum ClientEnvEventType { CEE_NONE, - CEE_PLAYER_DAMAGE + CEE_PLAYER_DAMAGE, + CEE_PLAYER_BREATH }; struct ClientEnvEvent @@ -403,6 +409,9 @@ struct ClientEnvEvent u8 amount; bool send_to_server; } player_damage; + struct{ + u16 amount; + } player_breath; }; }; @@ -457,6 +466,7 @@ class ClientEnvironment : public Environment */ void damageLocalPlayer(u8 damage, bool handle_hp=true); + void updateLocalPlayerBreath(u16 breath); /* Client likes to call these @@ -470,6 +480,13 @@ class ClientEnvironment : public Environment ClientEnvEvent getClientEvent(); std::vector > attachment_list; // X is child ID, Y is parent ID + + std::list getPlayerNames() + { return m_player_names; } + void addPlayerName(std::string name) + { m_player_names.push_back(name); } + void removePlayerName(std::string name) + { m_player_names.remove(name); } private: ClientMap *m_map; @@ -479,9 +496,12 @@ class ClientEnvironment : public Environment IrrlichtDevice *m_irr; std::map m_active_objects; std::list m_simple_objects; - Queue m_client_event_queue; + std::list m_client_event_queue; IntervalLimiter m_active_object_light_update_interval; IntervalLimiter m_lava_hurt_interval; + IntervalLimiter m_drowning_interval; + IntervalLimiter m_breathing_interval; + std::list m_player_names; }; #endif