Modifier.h
00001 /* 00002 * Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved. 00003 * 00004 * NVIDIA CORPORATION and its licensors retain all intellectual property 00005 * and proprietary rights in and to this software, related documentation 00006 * and any modifications thereto. Any use, reproduction, disclosure or 00007 * distribution of this software and related documentation without an express 00008 * license agreement from NVIDIA CORPORATION is strictly prohibited. 00009 */ 00010 00011 00012 #ifndef MODIFIER_H 00013 #define MODIFIER_H 00014 00015 #include "Apex.h" 00016 #include "Curve.h" 00017 #include "IofxAsset.h" 00018 #include "IofxRenderCallback.h" 00019 00020 #include "ModifierDefs.h" 00021 00022 namespace nvidia 00023 { 00024 namespace apex 00025 { 00026 00027 PX_PUSH_PACK_DEFAULT 00028 00030 inline uint32_t ModifierUsageFromStage(ModifierStage stage) 00031 { 00032 return 1u << stage; 00033 } 00034 00035 // Disable the unused arguments warning for this header. 00036 #pragma warning( disable: 4100 ) 00037 00044 class Modifier 00045 { 00046 public: 00047 00049 virtual ModifierTypeEnum getModifierType() const = 0; 00050 00052 virtual uint32_t getModifierUsage() const = 0; 00053 00055 virtual uint32_t getModifierSpriteSemantics() 00056 { 00057 return 0; 00058 } 00059 00061 virtual uint32_t getModifierMeshSemantics() 00062 { 00063 return 0; 00064 } 00065 00066 virtual ~Modifier() { } 00067 00068 }; 00069 00076 template <typename T> 00077 class ModifierT : public Modifier 00078 { 00079 public: 00080 00082 virtual ModifierTypeEnum getModifierType() const 00083 { 00084 return T::ModifierType; 00085 } 00086 00088 virtual uint32_t getModifierUsage() const 00089 { 00090 return T::ModifierUsage; 00091 } 00092 }; 00093 00094 00098 class RotationModifier : public ModifierT<RotationModifier> 00099 { 00100 public: 00101 00103 static const ModifierTypeEnum ModifierType = ModifierType_Rotation; 00104 00106 static const uint32_t ModifierUsage = ModifierUsage_Spawn | ModifierUsage_Continuous 00107 | ModifierUsage_Mesh; 00108 00109 00111 virtual ApexMeshParticleRollType::Enum getRollType() const = 0; 00112 00114 virtual void setRollType(ApexMeshParticleRollType::Enum rollType) = 0; 00115 00117 virtual float getMaxSettleRate() const = 0; 00118 00120 virtual void setMaxSettleRate(float settleRate) = 0; 00121 00123 virtual float getMaxRotationRate() const = 0; 00124 00126 virtual void setMaxRotationRate(float rotationRate) = 0; 00127 00128 }; 00129 00134 class SimpleScaleModifier : public ModifierT<SimpleScaleModifier> 00135 { 00136 public: 00137 00139 static const ModifierTypeEnum ModifierType = ModifierType_SimpleScale; 00140 00142 static const uint32_t ModifierUsage = ModifierUsage_Spawn | ModifierUsage_Continuous 00143 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00144 00145 00147 virtual PxVec3 getScaleFactor() const = 0; 00148 00150 virtual void setScaleFactor(const PxVec3& s) = 0; 00151 }; 00152 00156 class ScaleByMassModifier : public ModifierT<ScaleByMassModifier> 00157 { 00158 public: 00159 00161 static const ModifierTypeEnum ModifierType = ModifierType_ScaleByMass; 00162 00164 static const uint32_t ModifierUsage = ModifierUsage_Spawn | ModifierUsage_Continuous 00165 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00166 }; 00167 00172 class RandomScaleModifier : public ModifierT<RandomScaleModifier> 00173 { 00174 public: 00175 00177 static const ModifierTypeEnum ModifierType = ModifierType_RandomScale; 00178 00180 static const uint32_t ModifierUsage = ModifierUsage_Spawn 00181 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00182 00183 00185 virtual Range<float> getScaleFactor() const = 0; 00186 00188 virtual void setScaleFactor(const Range<float>& s) = 0; 00189 }; 00190 00195 class ColorVsLifeModifier : public ModifierT<ColorVsLifeModifier> 00196 { 00197 public: 00198 00200 static const ModifierTypeEnum ModifierType = ModifierType_ColorVsLife; 00201 00203 static const uint32_t ModifierUsage = ModifierUsage_Spawn | ModifierUsage_Continuous 00204 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00205 00206 00208 virtual ColorChannel getColorChannel() const = 0; 00209 00211 virtual void setColorChannel(ColorChannel colorChannel) = 0; 00212 00214 virtual const Curve* getFunction() const = 0; 00215 00217 virtual void setFunction(const Curve* f) = 0; 00218 }; 00219 00224 class ColorVsDensityModifier : public ModifierT<ColorVsDensityModifier> 00225 { 00226 public: 00227 00229 static const ModifierTypeEnum ModifierType = ModifierType_ColorVsDensity; 00230 00232 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00233 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00234 00235 00237 virtual ColorChannel getColorChannel() const = 0; 00238 00240 virtual void setColorChannel(ColorChannel colorChannel) = 0; 00241 00243 virtual const Curve* getFunction() const = 0; 00244 00246 virtual void setFunction(const Curve* f) = 0; 00247 }; 00248 00254 class SubtextureVsLifeModifier : public ModifierT<SubtextureVsLifeModifier> 00255 { 00256 public: 00257 00259 static const ModifierTypeEnum ModifierType = ModifierType_SubtextureVsLife; 00260 00262 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00263 | ModifierUsage_Sprite; 00264 00265 00267 virtual const Curve* getFunction() const = 0; 00268 00270 virtual void setFunction(const Curve* f) = 0; 00271 }; 00272 00276 class OrientAlongVelocityModifier : public ModifierT<OrientAlongVelocityModifier> 00277 { 00278 public: 00279 00281 static const ModifierTypeEnum ModifierType = ModifierType_OrientAlongVelocity; 00282 00284 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00285 | ModifierUsage_Mesh; 00286 00287 00289 virtual PxVec3 getModelForward() const = 0; 00290 00292 virtual void setModelForward(const PxVec3& s) = 0; 00293 }; 00294 00295 00301 class ScaleAlongVelocityModifier : public ModifierT<ScaleAlongVelocityModifier> 00302 { 00303 public: 00304 00306 static const ModifierTypeEnum ModifierType = ModifierType_ScaleAlongVelocity; 00307 00309 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00310 | ModifierUsage_Mesh; 00311 00312 00314 virtual float getScaleFactor() const = 0; 00315 00317 virtual void setScaleFactor(const float& s) = 0; 00318 }; 00319 00323 class RandomSubtextureModifier : public ModifierT<RandomSubtextureModifier> 00324 { 00325 public: 00326 00328 static const ModifierTypeEnum ModifierType = ModifierType_RandomSubtexture; 00329 00331 static const uint32_t ModifierUsage = ModifierUsage_Spawn 00332 | ModifierUsage_Sprite; 00333 00334 00336 virtual Range<float> getSubtextureRange() const = 0; 00337 00339 virtual void setSubtextureRange(const Range<float>& s) = 0; 00340 }; 00341 00347 class RandomRotationModifier : public ModifierT<RandomRotationModifier> 00348 { 00349 public: 00350 00352 static const ModifierTypeEnum ModifierType = ModifierType_RandomRotation; 00353 00355 static const uint32_t ModifierUsage = ModifierUsage_Spawn 00356 | ModifierUsage_Sprite; 00357 00358 00360 virtual Range<float> getRotationRange() const = 0; 00361 00363 virtual void setRotationRange(const Range<float>& s) = 0; 00364 }; 00365 00369 class ScaleVsLifeModifier : public ModifierT<ScaleVsLifeModifier> 00370 { 00371 public: 00372 00374 static const ModifierTypeEnum ModifierType = ModifierType_ScaleVsLife; 00375 00377 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00378 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00379 00380 00382 virtual ScaleAxis getScaleAxis() const = 0; 00383 00385 virtual void setScaleAxis(ScaleAxis a) = 0; 00386 00388 virtual const Curve* getFunction() const = 0; 00389 00391 virtual void setFunction(const Curve* f) = 0; 00392 }; 00393 00397 class ScaleVsDensityModifier : public ModifierT<ScaleVsDensityModifier> 00398 { 00399 public: 00400 00402 static const ModifierTypeEnum ModifierType = ModifierType_ScaleVsDensity; 00403 00405 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00406 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00407 00408 00410 virtual ScaleAxis getScaleAxis() const = 0; 00411 00413 virtual void setScaleAxis(ScaleAxis a) = 0; 00414 00416 virtual const Curve* getFunction() const = 0; 00417 00419 virtual void setFunction(const Curve* f) = 0; 00420 }; 00421 00425 class ScaleVsCameraDistanceModifier : public ModifierT<ScaleVsCameraDistanceModifier> 00426 { 00427 public: 00428 00430 static const ModifierTypeEnum ModifierType = ModifierType_ScaleVsCameraDistance; 00431 00433 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00434 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00435 00436 00438 virtual ScaleAxis getScaleAxis() const = 0; 00439 00441 virtual void setScaleAxis(ScaleAxis a) = 0; 00442 00444 virtual const Curve* getFunction() const = 0; 00445 00447 virtual void setFunction(const Curve* f) = 0; 00448 }; 00449 00453 class ViewDirectionSortingModifier : public ModifierT<ViewDirectionSortingModifier> 00454 { 00455 public: 00456 00458 static const ModifierTypeEnum ModifierType = ModifierType_ViewDirectionSorting; 00459 00461 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00462 | ModifierUsage_Sprite; 00463 00464 }; 00465 00469 class RotationRateModifier : public ModifierT<RotationRateModifier> 00470 { 00471 public: 00472 00474 static const ModifierTypeEnum ModifierType = ModifierType_RotationRate; 00475 00477 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00478 | ModifierUsage_Sprite; 00479 00480 00482 virtual float getRotationRate() const = 0; 00483 00485 virtual void setRotationRate(const float& rate) = 0; 00486 }; 00487 00491 class RotationRateVsLifeModifier : public ModifierT<RotationRateVsLifeModifier> 00492 { 00493 public: 00494 00496 static const ModifierTypeEnum ModifierType = ModifierType_RotationRateVsLife; 00497 00499 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00500 | ModifierUsage_Sprite; 00501 00502 00504 virtual const Curve* getFunction() const = 0; 00505 00507 virtual void setFunction(const Curve* f) = 0; 00508 }; 00509 00513 class OrientScaleAlongScreenVelocityModifier : public ModifierT<OrientScaleAlongScreenVelocityModifier> 00514 { 00515 public: 00516 00518 static const ModifierTypeEnum ModifierType = ModifierType_OrientScaleAlongScreenVelocity; 00519 00521 static const uint32_t ModifierUsage = ModifierUsage_Continuous 00522 | ModifierUsage_Sprite; 00523 00524 00526 virtual float getScalePerVelocity() const = 0; 00527 00529 virtual void setScalePerVelocity(const float& s) = 0; 00530 00532 virtual float getScaleChangeLimit() const = 0; 00533 00535 virtual void setScaleChangeLimit(const float& s) = 0; 00536 00538 virtual float getScaleChangeDelay() const = 0; 00539 00541 virtual void setScaleChangeDelay(const float& s) = 0; 00542 }; 00543 00548 class ColorVsVelocityModifier : public ModifierT<ColorVsVelocityModifier> 00549 { 00550 public: 00551 00553 static const ModifierTypeEnum ModifierType = ModifierType_ColorVsVelocity; 00554 00556 static const uint32_t ModifierUsage = ModifierUsage_Spawn | ModifierUsage_Continuous 00557 | ModifierUsage_Sprite | ModifierUsage_Mesh; 00558 00559 00561 virtual ColorChannel getColorChannel() const = 0; 00562 00564 virtual void setColorChannel(ColorChannel colorChannel) = 0; 00565 00567 virtual const Curve* getFunction() const = 0; 00568 00570 virtual void setFunction(const Curve* f) = 0; 00571 00573 virtual float getVelocity0() const = 0; 00574 00576 virtual void setVelocity0(float value) = 0; 00577 00579 virtual float getVelocity1() const = 0; 00580 00582 virtual void setVelocity1(float value) = 0; 00583 }; 00584 00585 #pragma warning( default: 4100 ) 00586 00587 PX_POP_PACK 00588 00589 } 00590 } // namespace nvidia 00591 00592 #endif // MODIFIER_H
Generated on Fri Dec 15 2017 13:58:35 Copyright © 2012-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved.