X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclouds.h;h=a4d810faad3e1b6803860b2d8485c7ebeae4a5b5;hb=1105a14bccefb48a0e264fe19190c39629259338;hp=72923c2c5e9e19e3f0967039c4a984bbd2f31c03;hpb=979ca23f1eae1adeb8b0083dffe7203c54d87395;p=minetest.git diff --git a/src/clouds.h b/src/clouds.h index 72923c2c5..a4d810faa 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -17,18 +17,25 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef CLOUDS_HEADER -#define CLOUDS_HEADER +#pragma once #include "irrlichttypes_extrabloated.h" #include +#include "constants.h" +#include "cloudparams.h" + +// Menu clouds +class Clouds; +extern Clouds *g_menuclouds; + +// Scene manager used for menu clouds +namespace irr{namespace scene{class ISceneManager;}} +extern irr::scene::ISceneManager *g_menucloudsmgr; class Clouds : public scene::ISceneNode { public: - Clouds( - scene::ISceneNode* parent, - scene::ISceneManager* mgr, + Clouds(scene::ISceneManager* mgr, s32 id, u32 seed ); @@ -42,8 +49,8 @@ class Clouds : public scene::ISceneNode virtual void OnRegisterSceneNode(); virtual void render(); - - virtual const core::aabbox3d& getBoundingBox() const + + virtual const aabb3f &getBoundingBox() const { return m_box; } @@ -57,27 +64,81 @@ class Clouds : public scene::ISceneNode { return m_material; } - + /* Other stuff */ void step(float dtime); - void update(v2f camera_p, video::SColorf color); + void update(const v3f &camera_p, const video::SColorf &color); -private: - video::SMaterial m_material; - core::aabbox3d m_box; - float m_cloud_y; - float m_brightness; - video::SColorf m_color; - u32 m_seed; - v2f m_camera_pos; - float m_time; -}; + void updateCameraOffset(const v3s16 &camera_offset) + { + m_camera_offset = camera_offset; + updateBox(); + } + void readSettings(); + void setDensity(float density) + { + m_params.density = density; + // currently does not need bounding + } -#endif + void setColorBright(const video::SColor &color_bright) + { + m_params.color_bright = color_bright; + } + void setColorAmbient(const video::SColor &color_ambient) + { + m_params.color_ambient = color_ambient; + } + + void setHeight(float height) + { + m_params.height = height; // add bounding when necessary + updateBox(); + } + + void setSpeed(v2f speed) + { + m_params.speed = speed; + } + + void setThickness(float thickness) + { + m_params.thickness = thickness; + updateBox(); + } + + bool isCameraInsideCloud() const { return m_camera_inside_cloud; } + + const video::SColor getColor() const { return m_color.toSColor(); } + +private: + void updateBox() + { + float height_bs = m_params.height * BS; + float thickness_bs = m_params.thickness * BS; + m_box = aabb3f(-BS * 1000000.0f, height_bs - BS * m_camera_offset.Y, -BS * 1000000.0f, + BS * 1000000.0f, height_bs + thickness_bs - BS * m_camera_offset.Y, BS * 1000000.0f); + } + + bool gridFilled(int x, int y) const; + + video::SMaterial m_material; + aabb3f m_box; + u16 m_cloud_radius_i; + bool m_enable_3d; + u32 m_seed; + v3f m_camera_pos; + v2f m_origin; + v3s16 m_camera_offset; + video::SColorf m_color = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); + CloudParams m_params; + bool m_camera_inside_cloud = false; + +};