aboutsummaryrefslogtreecommitdiff
path: root/src/script/scripting_client.cpp
Commit message (Expand)AuthorAge
* A few initialization cleanupssfan52020-04-11
* [CSM] Expose more env functionssfan52019-11-11
* CSM: Fix itemstack:get_meta() 'metadata' indexing errorSmallJoker2019-09-14
* Load CSM environment after the restrictions are knownSmallJoker2019-09-14
* Revert "Revert CSM particles commit to fix particle spawner bug for 5.0.0 (#8...Loïc Blot2019-02-26
* Revert CSM particles commit to fix particle spawner bug for 5.0.0 (#8288)Paramat2019-02-26
* Move client-specific files to 'src/client' (#7902)Quentin Bazin2018-11-28
* [CSM] Add functions to create particles and particlespawners. (#6072)red-0012018-01-20
* [CSM] Don't load the IO library. (#6087)red-0012018-01-04
* Implement mod communication channels (#6351)Loïc Blot2017-09-26
* Modernize source code: last part (#6285)Loïc Blot2017-08-20
* Create a filesystem abstraction layer for CSM and only allow accessing files ...red-0012017-06-30
* When minimap is disabled in configuration, really disable it (#5771)Loïc Blot2017-05-19
* Use a settings object for the main settingsShadowNinja2017-05-06
* [CSM] Add camera API (#5609)bigfoot5472017-05-05
* Rename Scripting API files for consistencyShadowNinja2017-04-25
> 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; };