X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fclouds.h;h=a4d810faad3e1b6803860b2d8485c7ebeae4a5b5;hb=1105a14bccefb48a0e264fe19190c39629259338;hp=70f12239ebc8c02280be62171125e074846e8048;hpb=9345ba7b6a6cd19e0af0f51be1154ae571332f04;p=minetest.git diff --git a/src/clouds.h b/src/clouds.h index 70f12239e..a4d810faa 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -17,12 +17,12 @@ 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; @@ -35,12 +35,9 @@ 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, - s16 cloudheight=0 + u32 seed ); ~Clouds(); @@ -52,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; } @@ -67,35 +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 updateCameraOffset(v3s16 camera_offset) + void update(const v3f &camera_p, const video::SColorf &color); + + void updateCameraOffset(const v3s16 &camera_offset) { m_camera_offset = camera_offset; - m_box = core::aabbox3d(-BS * 1000000, m_cloud_y - BS - BS * camera_offset.Y, -BS * 1000000, - BS * 1000000, m_cloud_y + BS - BS * camera_offset.Y, BS * 1000000); + updateBox(); } + void readSettings(); + + void setDensity(float density) + { + m_params.density = density; + // currently does not need bounding + } + + 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; - core::aabbox3d m_box; - float m_cloud_y; + aabb3f m_box; u16 m_cloud_radius_i; - video::SColorf m_color; + bool m_enable_3d; u32 m_seed; - v2f m_camera_pos; - float m_time; + v3f m_camera_pos; + v2f m_origin; v3s16 m_camera_offset; -}; - - - -#endif + video::SColorf m_color = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f); + CloudParams m_params; + bool m_camera_inside_cloud = false; +};