]> git.lizzy.rs Git - minetest.git/blobdiff - src/camera.h
Implement WieldMeshSceneNode which improves wield mesh rendering
[minetest.git] / src / camera.h
index d1c3b59d4d177ba373b9d26ad74eaf703498c808..996be79b27e8a054911fa3470b28f880cb6b5ce5 100644 (file)
@@ -32,8 +32,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 class LocalPlayer;
 struct MapDrawControl;
 class IGameDef;
+class WieldMeshSceneNode;
 
-enum CameraModes {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT};
+enum CameraMode {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT};
 
 /*
        Client camera class, manages the player and camera scene nodes, the viewing distance
@@ -117,8 +118,7 @@ class Camera
        // Update the camera from the local player's position.
        // busytime is used to adjust the viewing range.
        void update(LocalPlayer* player, f32 frametime, f32 busytime,
-                       v2u32 screensize, f32 tool_reload_ratio,
-                       int current_camera_mode, ClientEnvironment &c_env);
+                       f32 tool_reload_ratio, ClientEnvironment &c_env);
 
        // Render distance feedback loop
        void updateViewingRange(f32 frametime_in, f32 busytime_in);
@@ -128,12 +128,28 @@ class Camera
        void setDigging(s32 button);
 
        // Replace the wielded item mesh
-       void wield(const ItemStack &item, u16 playeritem);
+       void wield(const ItemStack &item);
 
        // Draw the wielded tool.
        // This has to happen *after* the main scene is drawn.
        // Warning: This clears the Z buffer.
-       void drawWieldedTool();
+       void drawWieldedTool(irr::core::matrix4* translation=NULL);
+
+       // Toggle the current camera mode
+       void toggleCameraMode() {
+               if (m_camera_mode == CAMERA_MODE_FIRST)
+                       m_camera_mode = CAMERA_MODE_THIRD;
+               else if (m_camera_mode == CAMERA_MODE_THIRD)
+                       m_camera_mode = CAMERA_MODE_THIRD_FRONT;
+               else
+                       m_camera_mode = CAMERA_MODE_FIRST;
+       }
+
+       //read the current camera mode
+       inline CameraMode getCameraMode()
+       {
+               return m_camera_mode;
+       }
 
 private:
        // Nodes
@@ -142,8 +158,8 @@ class Camera
        scene::ICameraSceneNode* m_cameranode;
 
        scene::ISceneManager* m_wieldmgr;
-       scene::IMeshSceneNode* m_wieldnode;
-       u8 m_wieldlight;
+       WieldMeshSceneNode* m_wieldnode;
+       scene::ILightSceneNode* m_wieldlightnode;
 
        // draw control
        MapDrawControl& m_draw_control;
@@ -188,14 +204,11 @@ class Camera
        // If 1, right-click digging animation
        s32 m_digging_button;
 
-       //dummymesh for camera
-       irr::scene::IAnimatedMesh* m_dummymesh;
-
        // Animation when changing wielded item
        f32 m_wield_change_timer;
-       scene::IMesh *m_wield_mesh_next;
-       u16 m_previous_playeritem;
-       std::string m_previous_itemname;
+       ItemStack m_wield_item_next;
+
+       CameraMode m_camera_mode;
 };
 
 #endif