3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 #include "irrlichttypes_extrabloated.h"
24 #include "constants.h"
25 #include "cloudparams.h"
29 extern Clouds
*g_menuclouds
;
31 // Scene manager used for menu clouds
32 namespace irr
{namespace scene
{class ISceneManager
;}}
33 extern irr::scene::ISceneManager
*g_menucloudsmgr
;
35 class Clouds
: public scene::ISceneNode
38 Clouds(scene::ISceneManager
* mgr
,
49 virtual void OnRegisterSceneNode();
51 virtual void render();
53 virtual const aabb3f
&getBoundingBox() const
58 virtual u32
getMaterialCount() const
63 virtual video::SMaterial
& getMaterial(u32 i
)
72 void step(float dtime
);
74 void update(const v3f
&camera_p
, const video::SColorf
&color
);
76 void updateCameraOffset(const v3s16
&camera_offset
)
78 m_camera_offset
= camera_offset
;
84 void setDensity(float density
)
86 m_params
.density
= density
;
87 // currently does not need bounding
90 void setColorBright(const video::SColor
&color_bright
)
92 m_params
.color_bright
= color_bright
;
95 void setColorAmbient(const video::SColor
&color_ambient
)
97 m_params
.color_ambient
= color_ambient
;
100 void setHeight(float height
)
102 m_params
.height
= height
; // add bounding when necessary
106 void setSpeed(v2f speed
)
108 m_params
.speed
= speed
;
111 void setThickness(float thickness
)
113 m_params
.thickness
= thickness
;
117 bool isCameraInsideCloud() const { return m_camera_inside_cloud
; }
119 const video::SColor
getColor() const { return m_color
.toSColor(); }
124 float height_bs
= m_params
.height
* BS
;
125 float thickness_bs
= m_params
.thickness
* BS
;
126 m_box
= aabb3f(-BS
* 1000000.0f
, height_bs
- BS
* m_camera_offset
.Y
, -BS
* 1000000.0f
,
127 BS
* 1000000.0f
, height_bs
+ thickness_bs
- BS
* m_camera_offset
.Y
, BS
* 1000000.0f
);
130 bool gridFilled(int x
, int y
) const;
132 video::SMaterial m_material
;
134 u16 m_cloud_radius_i
;
139 v3s16 m_camera_offset
;
140 video::SColorf m_color
= video::SColorf(1.0f
, 1.0f
, 1.0f
, 1.0f
);
141 CloudParams m_params
;
142 bool m_camera_inside_cloud
= false;