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 NW_DEPRECATED_FUNCTION(s32 GetTargetStreamsCount ()const)62 NW_DEPRECATED_FUNCTION(s32 GetTargetStreamsCount() const) 63 { 64 if (this->GetTargetStream() < 0) 65 { 66 return 0; 67 } 68 69 return 1; 70 } 71 NW_DEPRECATED_FUNCTION(ParticleUsage * GetTargetStreams ())72 NW_DEPRECATED_FUNCTION(ParticleUsage* GetTargetStreams()) 73 { 74 return (ParticleUsage*)&ref().m_TargetStream; 75 } 76 NW_DEPRECATED_FUNCTION(const ParticleUsage * GetTargetStreams ()const)77 NW_DEPRECATED_FUNCTION(const ParticleUsage* GetTargetStreams() const) 78 { 79 return (const ParticleUsage*)&ref().m_TargetStream; 80 } 81 }; 82 83 //! @details :private 84 struct ResParticleDirectionalVelocityInitializerData : public ResParticleInitializerData 85 { 86 nw::ut::ResF32 m_Power; 87 nw::ut::ResVec3 m_Direction; 88 }; 89 90 91 //-------------------------------------------------------------------------- 92 //! @brief パーティクル放出方向と速度を表すバイナリリソースクラスです。 93 //--------------------------------------------------------------------------- 94 class ResParticleDirectionalVelocityInitializer : public ResParticleInitializer 95 { 96 public: 97 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleDirectionalVelocityInitializer) }; 98 enum { SIGNATURE = NW_RES_SIGNATURE32('DIRV') }; 99 100 NW_RES_CTOR_INHERIT( ResParticleDirectionalVelocityInitializer, ResParticleInitializer ) 101 102 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 103 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, Direction ) // GetDirection() 104 }; 105 106 107 //! @details :private 108 struct ResParticleRandomDirectionalVelocityInitializerData : public ResParticleInitializerData 109 { 110 nw::ut::ResF32 m_Power; 111 nw::ut::ResVec3 m_Direction; 112 nw::ut::ResF32 m_Angle; 113 }; 114 115 116 117 //-------------------------------------------------------------------------- 118 //! @brief ランダムなパーティクル放出方向と速度を表すバイナリリソースクラスです。 119 //--------------------------------------------------------------------------- 120 class ResParticleRandomDirectionalVelocityInitializer : public ResParticleInitializer 121 { 122 public: 123 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleRandomDirectionalVelocityInitializer) }; 124 enum { SIGNATURE = NW_RES_SIGNATURE32('RDRV') }; 125 126 NW_RES_CTOR_INHERIT( ResParticleRandomDirectionalVelocityInitializer, ResParticleInitializer ) 127 128 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 129 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, Direction ) // GetDirection() 130 NW_RES_FIELD_PRIMITIVE_DECL( f32, Angle ) // GetAngle(), SetAngle() 131 }; 132 133 134 //! @details :private 135 struct ResParticleOriginVelocityInitializerData : public ResParticleInitializerData 136 { 137 nw::ut::ResF32 m_Power; 138 }; 139 140 141 //-------------------------------------------------------------------------- 142 //! @brief パーティクルの原点から拡散する速度を表すバイナリリソースクラスです。 143 //--------------------------------------------------------------------------- 144 class ResParticleOriginVelocityInitializer : public ResParticleInitializer 145 { 146 public: 147 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleOriginVelocityInitializer) }; 148 enum { SIGNATURE = NW_RES_SIGNATURE32('ORIV') }; 149 150 NW_RES_CTOR_INHERIT( ResParticleOriginVelocityInitializer, ResParticleInitializer ) 151 152 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 153 }; 154 155 //! @details :private 156 struct ResParticleRandomVelocityInitializerData : public ResParticleInitializerData 157 { 158 nw::ut::ResF32 m_Power; 159 }; 160 161 162 //-------------------------------------------------------------------------- 163 //! @brief パーティクルのランダムな速度を表すバイナリリソースクラスです。 164 //--------------------------------------------------------------------------- 165 class ResParticleRandomVelocityInitializer : public ResParticleInitializer 166 { 167 public: 168 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleRandomVelocityInitializer) }; 169 enum { SIGNATURE = NW_RES_SIGNATURE32('RNDV') }; 170 171 NW_RES_CTOR_INHERIT( ResParticleRandomVelocityInitializer, ResParticleInitializer ) 172 173 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 174 }; 175 176 //! @details :private 177 struct ResParticleYAxisVelocityInitializerData : public ResParticleInitializerData 178 { 179 nw::ut::ResF32 m_Power; 180 }; 181 182 183 //-------------------------------------------------------------------------- 184 //! @brief パーティクルのY軸から拡散する速度を表すバイナリリソースクラスです。 185 //--------------------------------------------------------------------------- 186 class ResParticleYAxisVelocityInitializer : public ResParticleInitializer 187 { 188 public: 189 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleYAxisVelocityInitializer) }; 190 enum { SIGNATURE = NW_RES_SIGNATURE32('YAXV') }; 191 192 NW_RES_CTOR_INHERIT( ResParticleYAxisVelocityInitializer, ResParticleInitializer ) 193 194 NW_RES_FIELD_PRIMITIVE_DECL( f32, Power ) // GetPower(), SetPower() 195 }; 196 197 //! @details :private 198 struct ResParticleFloatRandomInitializerData : public ResParticleInitializerData 199 { 200 nw::ut::ResF32 m_BaseValue; 201 nw::ut::ResF32 m_Random; 202 }; 203 204 205 //-------------------------------------------------------------------------- 206 //! @brief f32を乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 207 //--------------------------------------------------------------------------- 208 class ResParticleFloatRandomInitializer : public ResParticleInitializer 209 { 210 public: 211 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleFloatRandomInitializer) }; 212 enum { SIGNATURE = NW_RES_SIGNATURE32('FRND') }; 213 214 NW_RES_CTOR_INHERIT( ResParticleFloatRandomInitializer, ResParticleInitializer ) 215 216 NW_RES_FIELD_PRIMITIVE_DECL( f32, BaseValue ) 217 NW_RES_FIELD_PRIMITIVE_DECL( f32, Random ) 218 }; 219 220 //! @details :private 221 struct ResParticleFloatRangeRandomInitializerData : public ResParticleInitializerData 222 { 223 nw::ut::ResF32 m_MaxValue; 224 nw::ut::ResF32 m_MinValue; 225 }; 226 227 228 229 //-------------------------------------------------------------------------- 230 //! @brief f32を範囲指定の乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 231 //--------------------------------------------------------------------------- 232 class ResParticleFloatRangeRandomInitializer : public ResParticleInitializer 233 { 234 public: 235 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleFloatRangeRandomInitializer) }; 236 enum { SIGNATURE = NW_RES_SIGNATURE32('URRA') }; 237 238 NW_RES_CTOR_INHERIT( ResParticleFloatRangeRandomInitializer, ResParticleInitializer ) 239 240 NW_RES_FIELD_PRIMITIVE_DECL( f32, MaxValue ) 241 NW_RES_FIELD_PRIMITIVE_DECL( f32, MinValue ) 242 }; 243 244 //! @details :private 245 struct ResParticleFloatImmediateInitializerData : public ResParticleInitializerData 246 { 247 nw::ut::ResF32 m_ImmediateValue; 248 }; 249 250 //-------------------------------------------------------------------------- 251 //! @brief f32を即値で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 252 //--------------------------------------------------------------------------- 253 class ResParticleFloatImmediateInitializer : public ResParticleInitializer 254 { 255 public: 256 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleFloatImmediateInitializer) }; 257 enum { SIGNATURE = NW_RES_SIGNATURE32('SFIM') }; 258 259 NW_RES_CTOR_INHERIT( ResParticleFloatImmediateInitializer, ResParticleInitializer ) 260 261 NW_RES_FIELD_PRIMITIVE_DECL( f32, ImmediateValue ) 262 }; 263 264 //! @details :private 265 struct ResParticleVector2ImmediateInitializerData : public ResParticleInitializerData 266 { 267 nw::ut::ResVec2 m_ImmediateValue; 268 }; 269 270 271 //-------------------------------------------------------------------------- 272 //! @brief Vector2を即値で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 273 //--------------------------------------------------------------------------- 274 class ResParticleVector2ImmediateInitializer : public ResParticleInitializer 275 { 276 public: 277 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector2ImmediateInitializer) }; 278 enum { SIGNATURE = NW_RES_SIGNATURE32('V2IM') }; 279 280 NW_RES_CTOR_INHERIT( ResParticleVector2ImmediateInitializer, ResParticleInitializer ) 281 282 NW_RES_FIELD_VECTOR2_DECL( nw::math::VEC2, ImmediateValue ) 283 }; 284 285 //! @details :private 286 struct ResParticleVector3ImmediateInitializerData : public ResParticleInitializerData 287 { 288 nw::ut::ResVec3 m_ImmediateValue; 289 }; 290 291 292 //-------------------------------------------------------------------------- 293 //! @brief Vectro3を即値で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 294 //--------------------------------------------------------------------------- 295 class ResParticleVector3ImmediateInitializer : public ResParticleInitializer 296 { 297 public: 298 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3ImmediateInitializer) }; 299 enum { SIGNATURE = NW_RES_SIGNATURE32('V3IM') }; 300 301 NW_RES_CTOR_INHERIT( ResParticleVector3ImmediateInitializer, ResParticleInitializer ) 302 303 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, ImmediateValue ) 304 }; 305 306 //! @details :private 307 struct ResParticleVector3Random1InitializerData : public ResParticleInitializerData 308 { 309 nw::ut::ResVec3 m_BaseValue; 310 nw::ut::ResF32 m_Random; 311 }; 312 313 314 //-------------------------------------------------------------------------- 315 //! @brief Vector3をひとつの乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 316 //--------------------------------------------------------------------------- 317 class ResParticleVector3Random1Initializer : public ResParticleInitializer 318 { 319 public: 320 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3Random1Initializer) }; 321 enum { SIGNATURE = NW_RES_SIGNATURE32('V3R1') }; 322 323 NW_RES_CTOR_INHERIT( ResParticleVector3Random1Initializer, ResParticleInitializer ) 324 325 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, BaseValue ) 326 NW_RES_FIELD_PRIMITIVE_DECL( f32, Random ) 327 }; 328 329 //! @details :private 330 struct ResParticleVector3Random3InitializerData : public ResParticleInitializerData 331 { 332 nw::ut::ResVec3 m_BaseValue; 333 nw::ut::ResVec3 m_Random; 334 }; 335 336 337 //-------------------------------------------------------------------------- 338 //! @brief Vector3を3個の乱数で初期化するパーティクルイニシャライザを表すバイナリリソースクラスです。 339 //--------------------------------------------------------------------------- 340 class ResParticleVector3Random3Initializer : public ResParticleInitializer 341 { 342 public: 343 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3Random3Initializer) }; 344 enum { SIGNATURE = NW_RES_SIGNATURE32('V3R3') }; 345 346 NW_RES_CTOR_INHERIT( ResParticleVector3Random3Initializer, ResParticleInitializer ) 347 348 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, BaseValue ) 349 NW_RES_FIELD_VECTOR3_DECL( nw::math::VEC3, Random ) 350 }; 351 352 //! @details :private 353 struct ResParticleVector3MultRandomInitializerData : public ResParticleInitializerData 354 { 355 nw::ut::ResF32 m_Random; 356 }; 357 358 359 //-------------------------------------------------------------------------- 360 //! @brief Vector3に乱数を乗算するパーティクルイニシャライザを表すバイナリリソースクラスです。 361 //--------------------------------------------------------------------------- 362 class ResParticleVector3MultRandomInitializer : public ResParticleInitializer 363 { 364 public: 365 enum { TYPE_INFO = NW_GFX_RES_TYPE_INFO(ResParticleVector3MultRandomInitializer) }; 366 enum { SIGNATURE = NW_RES_SIGNATURE32('V3MR') }; 367 368 NW_RES_CTOR_INHERIT( ResParticleVector3MultRandomInitializer, ResParticleInitializer ) 369 370 NW_RES_FIELD_PRIMITIVE_DECL( f32, Random ) 371 }; 372 373 } // namespace res 374 } // namespace gfx 375 } // namespace nw 376 377 #endif // NW_GFX_RESPARTICLEINITIALIZER_H_ 378