]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/environment.h
Tune smooth lighting a bit
[dragonfireclient.git] / src / environment.h
index beb49885c558bed51858189a5daba427fbb089a3..04df9be48b8a4d08f30fc1d96638094332d6f80f 100644 (file)
@@ -39,11 +39,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "activeobject.h"
 
 class Server;
+class ServerEnvironment;
 class ActiveBlockModifier;
 class ServerActiveObject;
 typedef struct lua_State lua_State;
 class ITextureSource;
 class IGameDef;
+class ClientMap;
 
 class Environment
 {
@@ -72,27 +74,39 @@ class Environment
        core::list<Player*> getPlayers(bool ignore_disconnected);
        void printPlayers(std::ostream &o);
        
-       //void setDayNightRatio(u32 r);
        u32 getDayNightRatio();
        
        // 0-23999
        virtual void setTimeOfDay(u32 time)
        {
                m_time_of_day = time;
+               m_time_of_day_f = (float)time / 24000.0;
        }
 
        u32 getTimeOfDay()
-       {
-               return m_time_of_day;
-       }
+       { return m_time_of_day; }
+
+       float getTimeOfDayF()
+       { return m_time_of_day_f; }
+
+       void stepTimeOfDay(float dtime);
+
+       void setTimeOfDaySpeed(float speed)
+       { m_time_of_day_speed = speed; }
+       
+       float getTimeOfDaySpeed()
+       { return m_time_of_day_speed; }
 
 protected:
        // peer_ids in here should be unique, except that there may be many 0s
        core::list<Player*> m_players;
-       // Brightness
-       //u32 m_daynight_ratio;
        // Time of day in milli-hours (0-23999); determines day and night
        u32 m_time_of_day;
+       // Time of day in 0...1
+       float m_time_of_day_f;
+       float m_time_of_day_speed;
+       // Used to buffer dtime for adding to m_time_of_day
+       float m_time_counter;
 };
 
 /*
@@ -355,6 +369,7 @@ class ServerEnvironment : public Environment
 #ifndef SERVER
 
 #include "clientobject.h"
+class ClientSimpleObject;
 
 /*
        The client-side environment.
@@ -391,11 +406,8 @@ class ClientEnvironment : public Environment
                        IrrlichtDevice *device);
        ~ClientEnvironment();
 
-       Map & getMap()
-       { return *m_map; }
-
-       ClientMap & getClientMap()
-       { return *m_map; }
+       Map & getMap();
+       ClientMap & getClientMap();
 
        IGameDef *getGameDef()
        { return m_gamedef; }
@@ -405,23 +417,11 @@ class ClientEnvironment : public Environment
        virtual void addPlayer(Player *player);
        LocalPlayer * getLocalPlayer();
        
-       // Slightly deprecated
-       void updateMeshes(v3s16 blockpos);
-       void expireMeshes(bool only_daynight_diffed);
-
-       void setTimeOfDay(u32 time)
-       {
-               u32 old_dr = getDayNightRatio();
-
-               Environment::setTimeOfDay(time);
+       /*
+               ClientSimpleObjects
+       */
 
-               if(getDayNightRatio() != old_dr)
-               {
-                       /*infostream<<"ClientEnvironment: DayNightRatio changed"
-                                       <<" -> expiring meshes"<<std::endl;*/
-                       expireMeshes(true);
-               }
-       }
+       void addSimpleObject(ClientSimpleObject *simple);
 
        /*
                ActiveObjects
@@ -468,6 +468,7 @@ class ClientEnvironment : public Environment
        IGameDef *m_gamedef;
        IrrlichtDevice *m_irr;
        core::map<u16, ClientActiveObject*> m_active_objects;
+       core::list<ClientSimpleObject*> m_simple_objects;
        Queue<ClientEnvEvent> m_client_event_queue;
        IntervalLimiter m_active_object_light_update_interval;
        IntervalLimiter m_lava_hurt_interval;