1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: gfx_ResParticleInitializer.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 19592 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_GFX_RESPARTICLEINITIALIZER_H_ 17 #define NW_GFX_RESPARTICLEINITIALIZER_H_ 18 19 #include <nw/ut/ut_ResUtil.h> 20 #include <nw/ut/ut_ResDictionary.h> 21 #include <nw/ut/ut_Color.h> 22 #include <nw/gfx/res/gfx_ResParticleUpdater.h> 23 #include <nw/gfx/res/gfx_ResTypeInfo.h> 24 25 namespace nw { 26 namespace gfx { 27 namespace res { 28 29 //! @details :private 30 struct ResParticleInitializerData 31 { 32 nw::ut::ResTypeInfo typeInfo; 33 nw::ut::ResBool m_IsResourceCopyEnabled; 34 nw::ut::ResBool m_InitializerEnabled; 35 u8 padding_0[2]; 36 nw::ut::ResS32 m_TargetStream; 37 }; 38 39 40 //-------------------------------------------------------------------------- 41 //! @brief パーティクルイニシャライザを表すバイナリリソースクラスです(基底クラス)。 42 //--------------------------------------------------------------------------- 43 class ResParticleInitializer : public nw::ut::ResCommon< ResParticleInitializerData > 44 { 45 public: 46 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleInitializer) }; 47 enum { SIGNATURE = NW_RES_SIGNATURE32('INIT') }; 48 49 NW_RES_CTOR( ResParticleInitializer ) 50 NW_RES_FIELD_PRIMITIVE_DECL(bool,IsResourceCopyEnabled)51 NW_RES_FIELD_PRIMITIVE_DECL( bool, IsResourceCopyEnabled ) 52 NW_RES_FIELD_PRIMITIVE_DECL( bool, InitializerEnabled ) 53 NW_RES_FIELD_PRIMITIVE_DECL( ParticleUsage, TargetStream ) 54 55 //--------------------------------------------------------------------------- 56 //! @brief インスタンスの型情報を取得します。 57 //! 58 //! @return 型情報です。 59 //--------------------------------------------------------------------------- 60 nw::ut::ResTypeInfo GetTypeInfo() const { return ref().typeInfo; } 61 }; 62 63 //! @details :private 64 struct ResParticleDirectionalVelocityInitializerData : public ResParticleInitializerData 65 { 66 nw::ut::ResF32 m_Power; 67 nw::ut::ResVec3 m_Direction; 68 }; 69 70 71 //-------------------------------------------------------------------------- 72 //! @brief パーティクル放出方向と速度を表すバイナリリソースクラスです。 73 //--------------------------------------------------------------------------- 74 class ResParticleDirectionalVelocityInitializer : public ResParticleInitializer 75 { 76 public: 77 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleDirectionalVelocityInitializer) }; 78 enum { SIGNATURE = NW_RES_SIGNATURE32('DIRV') }; 79 80 NW_RES_CTOR_INHERIT( ResParticleDirectionalVelocityInitializer, ResParticleInitializer ) 81 82 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 83 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, Direction ) // GetDirection() 84 }; 85 86 87 //! @details :private 88 struct ResParticleRandomDirectionalVelocityInitializerData : public ResParticleInitializerData 89 { 90 nw::ut::ResF32 m_Power; 91 nw::ut::ResVec3 m_Direction; 92 nw::ut::ResF32 m_Angle; 93 }; 94 95 96 97 //-------------------------------------------------------------------------- 98 //! @brief ランダムなパーティクル放出方向と速度を表すバイナリリソースクラスです。 99 //--------------------------------------------------------------------------- 100 class ResParticleRandomDirectionalVelocityInitializer : public ResParticleInitializer 101 { 102 public: 103 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleRandomDirectionalVelocityInitializer) }; 104 enum { SIGNATURE = NW_RES_SIGNATURE32('RDRV') }; 105 106 NW_RES_CTOR_INHERIT( ResParticleRandomDirectionalVelocityInitializer, ResParticleInitializer ) 107 108 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 109 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, Direction ) // GetDirection() 110 NW_RES_FIELD_PRIMITIVE_DECL( f32, Angle ) // GetAngle(), SetAngle() 111 }; 112 113 114 //! @details :private 115 struct ResParticleOriginVelocityInitializerData : public ResParticleInitializerData 116 { 117 nw::ut::ResF32 m_Power; 118 }; 119 120 121 //-------------------------------------------------------------------------- 122 //! @brief パーティクルの原点から拡散する速度を表すバイナリリソースクラスです。 123 //--------------------------------------------------------------------------- 124 class ResParticleOriginVelocityInitializer : public ResParticleInitializer 125 { 126 public: 127 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleOriginVelocityInitializer) }; 128 enum { SIGNATURE = NW_RES_SIGNATURE32('ORIV') }; 129 130 NW_RES_CTOR_INHERIT( ResParticleOriginVelocityInitializer, ResParticleInitializer ) 131 132 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 133 }; 134 135 //! @details :private 136 struct ResParticleRandomVelocityInitializerData : public ResParticleInitializerData 137 { 138 nw::ut::ResF32 m_Power; 139 }; 140 141 142 //-------------------------------------------------------------------------- 143 //! @brief パーティクルのランダムな速度を表すバイナリリソースクラスです。 144 //--------------------------------------------------------------------------- 145 class ResParticleRandomVelocityInitializer : public ResParticleInitializer 146 { 147 public: 148 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleRandomVelocityInitializer) }; 149 enum { SIGNATURE = NW_RES_SIGNATURE32('RNDV') }; 150 151 NW_RES_CTOR_INHERIT( ResParticleRandomVelocityInitializer, ResParticleInitializer ) 152 153 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 154 }; 155 156 //! @details :private 157 struct ResParticleYAxisVelocityInitializerData : public ResParticleInitializerData 158 { 159 nw::ut::ResF32 m_Power; 160 }; 161 162 163 //-------------------------------------------------------------------------- 164 //! @brief パーティクルのY軸から拡散する速度を表すバイナリリソースクラスです。 165 //--------------------------------------------------------------------------- 166 class ResParticleYAxisVelocityInitializer : public ResParticleInitializer 167 { 168 public: 169 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleYAxisVelocityInitializer) }; 170 enum { SIGNATURE = NW_RES_SIGNATURE32('YAXV') }; 171 172 NW_RES_CTOR_INHERIT( ResParticleYAxisVelocityInitializer, ResParticleInitializer ) 173 174 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 175 }; 176 177 //! @details :private 178 struct ResParticleFloatRandomInitializerData : public ResParticleInitializerData 179 { 180 nw::ut::ResF32 m_BaseValue; 181 nw::ut::ResF32 m_Random; 182 }; 183 184 185 //-------------------------------------------------------------------------- 186 //! @brief f32を乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 187 //--------------------------------------------------------------------------- 188 class ResParticleFloatRandomInitializer : public ResParticleInitializer 189 { 190 public: 191 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleFloatRandomInitializer) }; 192 enum { SIGNATURE = NW_RES_SIGNATURE32('FRND') }; 193 194 NW_RES_CTOR_INHERIT( ResParticleFloatRandomInitializer, ResParticleInitializer ) 195 196 NW_RES_FIELD_PRIMITIVE_DECL( f32, BaseValue ) 197 NW_RES_FIELD_PRIMITIVE_DECL( f32, Random ) 198 }; 199 200 //! @details :private 201 struct ResParticleFloatRangeRandomInitializerData : public ResParticleInitializerData 202 { 203 nw::ut::ResF32 m_MaxValue; 204 nw::ut::ResF32 m_MinValue; 205 }; 206 207 208 209 //-------------------------------------------------------------------------- 210 //! @brief f32を範囲指定の乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 211 //--------------------------------------------------------------------------- 212 class ResParticleFloatRangeRandomInitializer : public ResParticleInitializer 213 { 214 public: 215 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleFloatRangeRandomInitializer) }; 216 enum { SIGNATURE = NW_RES_SIGNATURE32('URRA') }; 217 218 NW_RES_CTOR_INHERIT( ResParticleFloatRangeRandomInitializer, ResParticleInitializer ) 219 220 NW_RES_FIELD_PRIMITIVE_DECL( f32, MaxValue ) 221 NW_RES_FIELD_PRIMITIVE_DECL( f32, MinValue ) 222 }; 223 224 //! @details :private 225 struct ResParticleFloatImmediateInitializerData : public ResParticleInitializerData 226 { 227 nw::ut::ResF32 m_ImmediateValue; 228 }; 229 230 //-------------------------------------------------------------------------- 231 //! @brief f32を即値で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 232 //--------------------------------------------------------------------------- 233 class ResParticleFloatImmediateInitializer : public ResParticleInitializer 234 { 235 public: 236 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleFloatImmediateInitializer) }; 237 enum { SIGNATURE = NW_RES_SIGNATURE32('SFIM') }; 238 239 NW_RES_CTOR_INHERIT( ResParticleFloatImmediateInitializer, ResParticleInitializer ) 240 241 NW_RES_FIELD_PRIMITIVE_DECL( f32, ImmediateValue ) 242 }; 243 244 //! @details :private 245 struct ResParticleVector2ImmediateInitializerData : public ResParticleInitializerData 246 { 247 nw::ut::ResVec2 m_ImmediateValue; 248 }; 249 250 251 //-------------------------------------------------------------------------- 252 //! @brief Vector2を即値で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 253 //--------------------------------------------------------------------------- 254 class ResParticleVector2ImmediateInitializer : public ResParticleInitializer 255 { 256 public: 257 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector2ImmediateInitializer) }; 258 enum { SIGNATURE = NW_RES_SIGNATURE32('V2IM') }; 259 260 NW_RES_CTOR_INHERIT( ResParticleVector2ImmediateInitializer, ResParticleInitializer ) 261 262 NW_RES_FIELD_VECTOR2_DECL( nw::math::VEC2, ImmediateValue ) 263 }; 264 265 //! @details :private 266 struct ResParticleVector3ImmediateInitializerData : public ResParticleInitializerData 267 { 268 nw::ut::ResVec3 m_ImmediateValue; 269 }; 270 271 272 //-------------------------------------------------------------------------- 273 //! @brief Vectro3を即値で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 274 //--------------------------------------------------------------------------- 275 class ResParticleVector3ImmediateInitializer : public ResParticleInitializer 276 { 277 public: 278 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3ImmediateInitializer) }; 279 enum { SIGNATURE = NW_RES_SIGNATURE32('V3IM') }; 280 281 NW_RES_CTOR_INHERIT( ResParticleVector3ImmediateInitializer, ResParticleInitializer ) 282 283 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, ImmediateValue ) 284 }; 285 286 //! @details :private 287 struct ResParticleVector3Random1InitializerData : public ResParticleInitializerData 288 { 289 nw::ut::ResVec3 m_BaseValue; 290 nw::ut::ResF32 m_Random; 291 }; 292 293 294 //-------------------------------------------------------------------------- 295 //! @brief Vector3をひとつの乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 296 //--------------------------------------------------------------------------- 297 class ResParticleVector3Random1Initializer : public ResParticleInitializer 298 { 299 public: 300 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3Random1Initializer) }; 301 enum { SIGNATURE = NW_RES_SIGNATURE32('V3R1') }; 302 303 NW_RES_CTOR_INHERIT( ResParticleVector3Random1Initializer, ResParticleInitializer ) 304 305 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, BaseValue ) 306 NW_RES_FIELD_PRIMITIVE_DECL( f32, Random ) 307 }; 308 309 //! @details :private 310 struct ResParticleVector3Random3InitializerData : public ResParticleInitializerData 311 { 312 nw::ut::ResVec3 m_BaseValue; 313 nw::ut::ResVec3 m_Random; 314 }; 315 316 317 //-------------------------------------------------------------------------- 318 //! @brief Vector3を3個の乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 319 //--------------------------------------------------------------------------- 320 class ResParticleVector3Random3Initializer : public ResParticleInitializer 321 { 322 public: 323 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3Random3Initializer) }; 324 enum { SIGNATURE = NW_RES_SIGNATURE32('V3R3') }; 325 326 NW_RES_CTOR_INHERIT( ResParticleVector3Random3Initializer, ResParticleInitializer ) 327 328 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, BaseValue ) 329 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, Random ) 330 }; 331 332 //! @details :private 333 struct ResParticleVector3MultRandomInitializerData : public ResParticleInitializerData 334 { 335 nw::ut::ResF32 m_Random; 336 }; 337 338 339 //-------------------------------------------------------------------------- 340 //! @brief Vector3に乱数を乗算するパーティクルイニシャライザを表すバイナリリソースクラスです。 341 //--------------------------------------------------------------------------- 342 class ResParticleVector3MultRandomInitializer : public ResParticleInitializer 343 { 344 public: 345 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3MultRandomInitializer) }; 346 enum { SIGNATURE = NW_RES_SIGNATURE32('V3MR') }; 347 348 NW_RES_CTOR_INHERIT( ResParticleVector3MultRandomInitializer, ResParticleInitializer ) 349 350 NW_RES_FIELD_PRIMITIVE_DECL( f32, Random ) 351 }; 352 353 } // namespace res 354 } // namespace gfx 355 } // namespace nw 356 357 #endif // NW_GFX_RESPARTICLEINITIALIZER_H_ 358