LCOV - code coverage report
Current view: top level - src - camera.h (source / functions) Hit Total Coverage
Test: report Lines: 12 19 63.2 %
Date: 2015-07-11 18:23:49 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /*
       2             : Minetest
       3             : Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
       4             : 
       5             : This program is free software; you can redistribute it and/or modify
       6             : it under the terms of the GNU Lesser General Public License as published by
       7             : the Free Software Foundation; either version 2.1 of the License, or
       8             : (at your option) any later version.
       9             : 
      10             : This program is distributed in the hope that it will be useful,
      11             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             : GNU Lesser General Public License for more details.
      14             : 
      15             : You should have received a copy of the GNU Lesser General Public License along
      16             : with this program; if not, write to the Free Software Foundation, Inc.,
      17             : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             : */
      19             : 
      20             : #ifndef CAMERA_HEADER
      21             : #define CAMERA_HEADER
      22             : 
      23             : #include "irrlichttypes_extrabloated.h"
      24             : #include "inventory.h"
      25             : #include "mesh.h"
      26             : #include "client/tile.h"
      27             : #include "util/numeric.h"
      28             : #include <ICameraSceneNode.h>
      29             : 
      30             : #include "client.h"
      31             : 
      32             : class LocalPlayer;
      33             : struct MapDrawControl;
      34             : class IGameDef;
      35             : class WieldMeshSceneNode;
      36             : 
      37             : enum CameraMode {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT};
      38             : 
      39             : /*
      40             :         Client camera class, manages the player and camera scene nodes, the viewing distance
      41             :         and performs view bobbing etc. It also displays the wielded tool in front of the
      42             :         first-person camera.
      43             : */
      44             : class Camera
      45             : {
      46             : public:
      47             :         Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control,
      48             :                         IGameDef *gamedef);
      49             :         ~Camera();
      50             : 
      51             :         // Get player scene node.
      52             :         // This node is positioned at the player's torso (without any view bobbing),
      53             :         // as given by Player::m_position. Yaw is applied but not pitch.
      54             :         inline scene::ISceneNode* getPlayerNode() const
      55             :         {
      56             :                 return m_playernode;
      57             :         }
      58             : 
      59             :         // Get head scene node.
      60             :         // It has the eye transformation and pitch applied,
      61             :         // but no view bobbing.
      62             :         inline scene::ISceneNode* getHeadNode() const
      63             :         {
      64             :                 return m_headnode;
      65             :         }
      66             : 
      67             :         // Get camera scene node.
      68             :         // It has the eye transformation, pitch and view bobbing applied.
      69        2332 :         inline scene::ICameraSceneNode* getCameraNode() const
      70             :         {
      71        2332 :                 return m_cameranode;
      72             :         }
      73             : 
      74             :         // Get the camera position (in absolute scene coordinates).
      75             :         // This has view bobbing applied.
      76        2332 :         inline v3f getPosition() const
      77             :         {
      78        2332 :                 return m_camera_position;
      79             :         }
      80             : 
      81             :         // Get the camera direction (in absolute camera coordinates).
      82             :         // This has view bobbing applied.
      83        4664 :         inline v3f getDirection() const
      84             :         {
      85        4664 :                 return m_camera_direction;
      86             :         }
      87             :         
      88             :         // Get the camera offset
      89        5830 :         inline v3s16 getOffset() const
      90             :         {
      91        5830 :                 return m_camera_offset;
      92             :         }
      93             : 
      94             :         // Horizontal field of view
      95             :         inline f32 getFovX() const
      96             :         {
      97             :                 return m_fov_x;
      98             :         }
      99             : 
     100             :         // Vertical field of view
     101             :         inline f32 getFovY() const
     102             :         {
     103             :                 return m_fov_y;
     104             :         }
     105             : 
     106             :         // Get maximum of getFovX() and getFovY()
     107        1166 :         inline f32 getFovMax() const
     108             :         {
     109        1166 :                 return MYMAX(m_fov_x, m_fov_y);
     110             :         }
     111             : 
     112             :         // Checks if the constructor was able to create the scene nodes
     113             :         bool successfullyCreated(std::string &error_message);
     114             : 
     115             :         // Step the camera: updates the viewing range and view bobbing.
     116             :         void step(f32 dtime);
     117             : 
     118             :         // Update the camera from the local player's position.
     119             :         // busytime is used to adjust the viewing range.
     120             :         void update(LocalPlayer* player, f32 frametime, f32 busytime,
     121             :                         f32 tool_reload_ratio, ClientEnvironment &c_env);
     122             : 
     123             :         // Render distance feedback loop
     124             :         void updateViewingRange(f32 frametime_in, f32 busytime_in);
     125             : 
     126             :         // Start digging animation
     127             :         // Pass 0 for left click, 1 for right click
     128             :         void setDigging(s32 button);
     129             : 
     130             :         // Replace the wielded item mesh
     131             :         void wield(const ItemStack &item);
     132             : 
     133             :         // Draw the wielded tool.
     134             :         // This has to happen *after* the main scene is drawn.
     135             :         // Warning: This clears the Z buffer.
     136             :         void drawWieldedTool(irr::core::matrix4* translation=NULL);
     137             : 
     138             :         // Toggle the current camera mode
     139           0 :         void toggleCameraMode() {
     140           0 :                 if (m_camera_mode == CAMERA_MODE_FIRST)
     141           0 :                         m_camera_mode = CAMERA_MODE_THIRD;
     142           0 :                 else if (m_camera_mode == CAMERA_MODE_THIRD)
     143           0 :                         m_camera_mode = CAMERA_MODE_THIRD_FRONT;
     144             :                 else
     145           0 :                         m_camera_mode = CAMERA_MODE_FIRST;
     146           0 :         }
     147             : 
     148             :         //read the current camera mode
     149        6975 :         inline CameraMode getCameraMode()
     150             :         {
     151        6975 :                 return m_camera_mode;
     152             :         }
     153             : 
     154             : private:
     155             :         // Nodes
     156             :         scene::ISceneNode* m_playernode;
     157             :         scene::ISceneNode* m_headnode;
     158             :         scene::ICameraSceneNode* m_cameranode;
     159             : 
     160             :         scene::ISceneManager* m_wieldmgr;
     161             :         WieldMeshSceneNode* m_wieldnode;
     162             :         scene::ILightSceneNode* m_wieldlightnode;
     163             : 
     164             :         // draw control
     165             :         MapDrawControl& m_draw_control;
     166             :         
     167             :         IGameDef *m_gamedef;
     168             : 
     169             :         // Absolute camera position
     170             :         v3f m_camera_position;
     171             :         // Absolute camera direction
     172             :         v3f m_camera_direction;
     173             :         // Camera offset
     174             :         v3s16 m_camera_offset;
     175             : 
     176             :         // Field of view and aspect ratio stuff
     177             :         f32 m_aspect;
     178             :         f32 m_fov_x;
     179             :         f32 m_fov_y;
     180             : 
     181             :         // Stuff for viewing range calculations
     182             :         f32 m_added_busytime;
     183             :         s16 m_added_frames;
     184             :         f32 m_range_old;
     185             :         f32 m_busytime_old;
     186             :         f32 m_frametime_counter;
     187             :         f32 m_time_per_range;
     188             : 
     189             :         // View bobbing animation frame (0 <= m_view_bobbing_anim < 1)
     190             :         f32 m_view_bobbing_anim;
     191             :         // If 0, view bobbing is off (e.g. player is standing).
     192             :         // If 1, view bobbing is on (player is walking).
     193             :         // If 2, view bobbing is getting switched off.
     194             :         s32 m_view_bobbing_state;
     195             :         // Speed of view bobbing animation
     196             :         f32 m_view_bobbing_speed;
     197             :         // Fall view bobbing
     198             :         f32 m_view_bobbing_fall;
     199             : 
     200             :         // Digging animation frame (0 <= m_digging_anim < 1)
     201             :         f32 m_digging_anim;
     202             :         // If -1, no digging animation
     203             :         // If 0, left-click digging animation
     204             :         // If 1, right-click digging animation
     205             :         s32 m_digging_button;
     206             : 
     207             :         // Animation when changing wielded item
     208             :         f32 m_wield_change_timer;
     209             :         ItemStack m_wield_item_next;
     210             : 
     211             :         CameraMode m_camera_mode;
     212             : 
     213             :         f32 m_cache_fall_bobbing_amount;
     214             :         f32 m_cache_view_bobbing_amount;
     215             :         f32 m_cache_wanted_fps;
     216             :         f32 m_cache_fov;
     217             :         bool m_cache_view_bobbing;
     218             : };
     219             : 
     220             : #endif

Generated by: LCOV version 1.11