summaryrefslogtreecommitdiff
path: root/src/clientmap.h
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-03-16 00:25:18 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-03-16 00:25:18 +0200
commit58bed83d03bbe53f8286640fbc33043800e1c318 (patch)
treed46f290560c012d68200cc57898e6a7b3e0df2ae /src/clientmap.h
parent54917e306256d4d39b95335986fce93b8c56a6e3 (diff)
downloadminetest-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.h146
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
+