Modifier.h
Go to the documentation of this file.
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 Tue Aug 1 2017 22:44:29

Copyright © 2012-2017 NVIDIA Corporation, 2701 San Tomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved.