]> git.lizzy.rs Git - minetest.git/blobdiff - src/clientenvironment.h
Conf.example generation: Remove quotation marks from noise flags (#7844)
[minetest.git] / src / clientenvironment.h
index c273ede54a278dff088f335d27f544b9ef85e016..606070e3aca5502d089198195dc3ea1374816b8a 100644 (file)
@@ -17,13 +17,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#ifndef CLIENT_ENVIRONMENT_HEADER
-#define CLIENT_ENVIRONMENT_HEADER
+#pragma once
 
-#include <IrrlichtDevice.h>
-#include <ISceneManager.h>
 #include "environment.h"
+#include <ISceneManager.h>
 #include "clientobject.h"
+#include "util/numeric.h"
 
 class ClientSimpleObject;
 class ClientMap;
@@ -31,7 +30,6 @@ class ClientScripting;
 class ClientActiveObject;
 class GenericCAO;
 class LocalPlayer;
-struct PointedThing;
 
 /*
        The client-side environment.
@@ -44,8 +42,7 @@ struct PointedThing;
 enum ClientEnvEventType
 {
        CEE_NONE,
-       CEE_PLAYER_DAMAGE,
-       CEE_PLAYER_BREATH
+       CEE_PLAYER_DAMAGE
 };
 
 struct ClientEnvEvent
@@ -58,18 +55,14 @@ struct ClientEnvEvent
                        u8 amount;
                        bool send_to_server;
                } player_damage;
-               struct{
-                       u16 amount;
-               } player_breath;
        };
 };
 
+typedef std::unordered_map<u16, ClientActiveObject*> ClientActiveObjectMap;
 class ClientEnvironment : public Environment
 {
 public:
-       ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr,
-               ITextureSource *texturesource, Client *client,
-               IrrlichtDevice *device);
+       ClientEnvironment(ClientMap *map, ITextureSource *texturesource, Client *client);
        ~ClientEnvironment();
 
        Map & getMap();
@@ -81,7 +74,7 @@ class ClientEnvironment : public Environment
        void step(f32 dtime);
 
        virtual void setLocalPlayer(LocalPlayer *player);
-       LocalPlayer *getLocalPlayer() { return m_local_player; }
+       LocalPlayer *getLocalPlayer() const { return m_local_player; }
 
        /*
                ClientSimpleObjects
@@ -116,7 +109,6 @@ class ClientEnvironment : public Environment
        */
 
        void damageLocalPlayer(u8 damage, bool handle_hp=true);
-       void updateLocalPlayerBreath(u16 breath);
 
        /*
                Client likes to call these
@@ -126,69 +118,34 @@ class ClientEnvironment : public Environment
        void getActiveObjects(v3f origin, f32 max_d,
                std::vector<DistanceSortedActiveObject> &dest);
 
-       // Get event from queue. CEE_NONE is returned if queue is empty.
-       ClientEnvEvent getClientEvent();
-
-       /*!
-        * Gets closest object pointed by the shootline.
-        * Returns NULL if not found.
-        *
-        * \param[in]  shootline_on_map    the shootline for
-        * the test in world coordinates
-        * \param[out] intersection_point  the first point where
-        * the shootline meets the object. Valid only if
-        * not NULL is returned.
-        * \param[out] intersection_normal the normal vector of
-        * the intersection, pointing outwards. Zero vector if
-        * the shootline starts in an active object.
-        * Valid only if not NULL is returned.
-        */
-       ClientActiveObject * getSelectedActiveObject(
+       bool hasClientEnvEvents() const { return !m_client_event_queue.empty(); }
+
+       // Get event from queue. If queue is empty, it triggers an assertion failure.
+       ClientEnvEvent getClientEnvEvent();
+
+       virtual void getSelectedActiveObjects(
                const core::line3d<f32> &shootline_on_map,
-               v3f *intersection_point,
-               v3s16 *intersection_normal
+               std::vector<PointedThing> &objects
        );
 
-       /*!
-        * Performs a raycast on the world.
-        * Returns the first thing the shootline meets.
-        *
-        * @param[in]  shootline         the shootline, starting from
-        * the camera position. This also gives the maximal distance
-        * of the search.
-        * @param[in]  liquids_pointable if false, liquids are ignored
-        * @param[in]  look_for_object   if false, objects are ignored
-        */
-       PointedThing getPointedThing(
-               core::line3d<f32> shootline,
-               bool liquids_pointable,
-               bool look_for_object);
-
        u16 attachement_parent_ids[USHRT_MAX + 1];
 
        const std::list<std::string> &getPlayerNames() { return m_player_names; }
        void addPlayerName(const std::string &name) { m_player_names.push_back(name); }
        void removePlayerName(const std::string &name) { m_player_names.remove(name); }
-       void updateCameraOffset(v3s16 camera_offset)
+       void updateCameraOffset(const v3s16 &camera_offset)
        { m_camera_offset = camera_offset; }
        v3s16 getCameraOffset() const { return m_camera_offset; }
 private:
        ClientMap *m_map;
-       LocalPlayer *m_local_player;
-       scene::ISceneManager *m_smgr;
+       LocalPlayer *m_local_player = nullptr;
        ITextureSource *m_texturesource;
        Client *m_client;
-       ClientScripting *m_script;
-       IrrlichtDevice *m_irr;
-       UNORDERED_MAP<u16, ClientActiveObject*> m_active_objects;
+       ClientScripting *m_script = nullptr;
+       ClientActiveObjectMap m_active_objects;
        std::vector<ClientSimpleObject*> m_simple_objects;
        std::queue<ClientEnvEvent> 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<std::string> m_player_names;
        v3s16 m_camera_offset;
 };
-
-#endif