diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-03-16 00:25:18 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-03-16 00:25:18 +0200 |
commit | 58bed83d03bbe53f8286640fbc33043800e1c318 (patch) | |
tree | d46f290560c012d68200cc57898e6a7b3e0df2ae /src/clientmap.h | |
parent | 54917e306256d4d39b95335986fce93b8c56a6e3 (diff) | |
download | minetest-58bed83d03bbe53f8286640fbc33043800e1c318.tar.gz minetest-58bed83d03bbe53f8286640fbc33043800e1c318.tar.bz2 minetest-58bed83d03bbe53f8286640fbc33043800e1c318.zip |
Move ClientMap to clientmap.{h,cpp}
Diffstat (limited to 'src/clientmap.h')
-rw-r--r-- | src/clientmap.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/src/clientmap.h b/src/clientmap.h new file mode 100644 index 000000000..aead670c1 --- /dev/null +++ b/src/clientmap.h @@ -0,0 +1,146 @@ +/* +Minetest-c55 +Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef CLIENTMAP_HEADER +#define CLIENTMAP_HEADER + +#include "common_irrlicht.h" +#include "map.h" + +struct MapDrawControl +{ + MapDrawControl(): + range_all(false), + wanted_range(50), + wanted_max_blocks(0), + wanted_min_range(0), + blocks_drawn(0), + blocks_would_have_drawn(0) + { + } + // Overrides limits by drawing everything + bool range_all; + // Wanted drawing range + float wanted_range; + // Maximum number of blocks to draw + u32 wanted_max_blocks; + // Blocks in this range are drawn regardless of number of blocks drawn + float wanted_min_range; + // Number of blocks rendered is written here by the renderer + u32 blocks_drawn; + // Number of blocks that would have been drawn in wanted_range + u32 blocks_would_have_drawn; +}; + +class Client; +class ITextureSource; + +/* + ClientMap + + This is the only map class that is able to render itself on screen. +*/ + +class ClientMap : public Map, public scene::ISceneNode +{ +public: + ClientMap( + Client *client, + IGameDef *gamedef, + MapDrawControl &control, + scene::ISceneNode* parent, + scene::ISceneManager* mgr, + s32 id + ); + + ~ClientMap(); + + s32 mapType() const + { + return MAPTYPE_CLIENT; + } + + void drop() + { + ISceneNode::drop(); + } + + void updateCamera(v3f pos, v3f dir, f32 fov) + { + JMutexAutoLock lock(m_camera_mutex); + m_camera_position = pos; + m_camera_direction = dir; + m_camera_fov = fov; + } + + /* + Forcefully get a sector from somewhere + */ + MapSector * emergeSector(v2s16 p); + + //void deSerializeSector(v2s16 p2d, std::istream &is); + + /* + ISceneNode methods + */ + + virtual void OnRegisterSceneNode(); + + virtual void render() + { + video::IVideoDriver* driver = SceneManager->getVideoDriver(); + driver->setTransform(video::ETS_WORLD, AbsoluteTransformation); + renderMap(driver, SceneManager->getSceneNodeRenderPass()); + } + + virtual const core::aabbox3d<f32>& getBoundingBox() const + { + return m_box; + } + + void renderMap(video::IVideoDriver* driver, s32 pass); + + void renderPostFx(); + + // For debug printing + virtual void PrintInfo(std::ostream &out); + + // Check if sector was drawn on last render() + bool sectorWasDrawn(v2s16 p) + { + return (m_last_drawn_sectors.find(p) != NULL); + } + +private: + Client *m_client; + + core::aabbox3d<f32> m_box; + + MapDrawControl &m_control; + + v3f m_camera_position; + v3f m_camera_direction; + f32 m_camera_fov; + JMutex m_camera_mutex; + + core::map<v2s16, bool> m_last_drawn_sectors; +}; + +#endif + |