summaryrefslogtreecommitdiff
path: root/src/client/clientmap.h
diff options
context:
space:
mode:
authorQuentin Bazin <quent42340@gmail.com>2018-11-28 20:01:49 +0100
committerSmallJoker <SmallJoker@users.noreply.github.com>2018-11-28 20:01:49 +0100
commit5f1cd555cd9d1c64426e173b30b5b792d211c835 (patch)
tree2c8508467d3bf28d549cce2d25144fa8ef42beae /src/client/clientmap.h
parentddd9317b733857630499972179caebc236b4d991 (diff)
downloadminetest-5f1cd555cd9d1c64426e173b30b5b792d211c835.tar.gz
minetest-5f1cd555cd9d1c64426e173b30b5b792d211c835.tar.bz2
minetest-5f1cd555cd9d1c64426e173b30b5b792d211c835.zip
Move client-specific files to 'src/client' (#7902)
Update Android.mk Remove 'src/client' from include_directories
Diffstat (limited to 'src/client/clientmap.h')
-rw-r--r--src/client/clientmap.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/client/clientmap.h b/src/client/clientmap.h
new file mode 100644
index 000000000..8402bb00d
--- /dev/null
+++ b/src/client/clientmap.h
@@ -0,0 +1,138 @@
+/*
+Minetest
+Copyright (C) 2010-2013 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 Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser 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.
+*/
+
+#pragma once
+
+#include "irrlichttypes_extrabloated.h"
+#include "map.h"
+#include "camera.h"
+#include <set>
+#include <map>
+
+struct MapDrawControl
+{
+ // Overrides limits by drawing everything
+ bool range_all = false;
+ // Wanted drawing range
+ float wanted_range = 0.0f;
+ // Maximum number of blocks to draw
+ u32 wanted_max_blocks = 0;
+ // show a wire frame for debugging
+ bool show_wireframe = false;
+};
+
+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,
+ MapDrawControl &control,
+ s32 id
+ );
+
+ virtual ~ClientMap() = default;
+
+ s32 mapType() const
+ {
+ return MAPTYPE_CLIENT;
+ }
+
+ void drop()
+ {
+ ISceneNode::drop();
+ }
+
+ void updateCamera(const v3f &pos, const v3f &dir, f32 fov, const v3s16 &offset)
+ {
+ m_camera_position = pos;
+ m_camera_direction = dir;
+ m_camera_fov = fov;
+ m_camera_offset = offset;
+ }
+
+ /*
+ 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 aabb3f &getBoundingBox() const
+ {
+ return m_box;
+ }
+
+ void getBlocksInViewRange(v3s16 cam_pos_nodes,
+ v3s16 *p_blocks_min, v3s16 *p_blocks_max);
+ void updateDrawList();
+ void renderMap(video::IVideoDriver* driver, s32 pass);
+
+ int getBackgroundBrightness(float max_d, u32 daylight_factor,
+ int oldvalue, bool *sunlight_seen_result);
+
+ void renderPostFx(CameraMode cam_mode);
+
+ // For debug printing
+ virtual void PrintInfo(std::ostream &out);
+
+ const MapDrawControl & getControl() const { return m_control; }
+ f32 getCameraFov() const { return m_camera_fov; }
+private:
+ Client *m_client;
+
+ aabb3f m_box = aabb3f(-BS * 1000000, -BS * 1000000, -BS * 1000000,
+ BS * 1000000, BS * 1000000, BS * 1000000);
+
+ MapDrawControl &m_control;
+
+ v3f m_camera_position = v3f(0,0,0);
+ v3f m_camera_direction = v3f(0,0,1);
+ f32 m_camera_fov = M_PI;
+ v3s16 m_camera_offset;
+
+ std::map<v3s16, MapBlock*> m_drawlist;
+
+ std::set<v2s16> m_last_drawn_sectors;
+
+ bool m_cache_trilinear_filter;
+ bool m_cache_bilinear_filter;
+ bool m_cache_anistropic_filter;
+};