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