00001 // 00002 // Redistribution and use in source and binary forms, with or without 00003 // modification, are permitted provided that the following conditions 00004 // are met: 00005 // * Redistributions of source code must retain the above copyright 00006 // notice, this list of conditions and the following disclaimer. 00007 // * Redistributions in binary form must reproduce the above copyright 00008 // notice, this list of conditions and the following disclaimer in the 00009 // documentation and/or other materials provided with the distribution. 00010 // * Neither the name of NVIDIA CORPORATION nor the names of its 00011 // contributors may be used to endorse or promote products derived 00012 // from this software without specific prior written permission. 00013 // 00014 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 00015 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00016 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00017 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 00018 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00019 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00020 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00021 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 00022 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00023 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00024 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00025 // 00026 // Copyright (c) 2018 NVIDIA Corporation. All rights reserved. 00027 00028 00029 00030 #ifndef EMITTER_ACTOR_H 00031 #define EMITTER_ACTOR_H 00032 00033 #include "Apex.h" 00034 00035 namespace nvidia 00036 { 00037 namespace apex 00038 { 00039 00040 PX_PUSH_PACK_DEFAULT 00041 00042 class EmitterAsset; 00043 class EmitterGeomExplicit; 00044 class EmitterLodParamDesc; 00045 class RenderVolume; 00046 00048 class EmitterActor : public Actor 00049 { 00050 protected: 00051 virtual ~EmitterActor() {} 00052 00053 public: 00054 00058 class EmitterValidateCallback 00059 { 00060 public: 00069 virtual bool validateEmitterPosition(const PxVec3 &emitterOrigin,PxVec3 &position) = 0; 00070 }; 00071 00073 virtual EmitterAsset* getEmitterAsset() const = 0; 00074 00076 virtual EmitterGeomExplicit* isExplicitGeom() = 0; 00077 00079 virtual PxMat44 getGlobalPose() const = 0; 00080 00082 virtual void setCurrentPose(const PxTransform& pose) = 0; 00083 00085 virtual void setCurrentPosition(const PxVec3& pos) = 0; 00086 00092 virtual void setAttachActor(PxActor*) = 0; 00093 00095 virtual void setAttachRelativePose(const PxTransform& pose) = 0; 00096 00098 virtual const PxActor* getAttachActor() const = 0; 00099 00101 virtual const PxMat44 getAttachRelativePose() const = 0; 00102 00104 virtual float getObjectRadius() const = 0; 00105 00107 virtual void setOverlapTestCollisionGroups(uint32_t) = 0; 00108 00115 virtual void startEmit(bool persistent = true) = 0; 00116 00118 virtual void stopEmit() = 0; 00119 00121 virtual bool isEmitting() const = 0; 00122 00124 virtual const EmitterLodParamDesc& getLodParamDesc() const = 0; 00126 virtual void setLodParamDesc(const EmitterLodParamDesc&) = 0; 00127 00129 00130 virtual void setDensity(const float&) = 0; 00131 00133 virtual void setRate(const float&) = 0; 00134 00136 virtual void setVelocityLow(const PxVec3&) = 0; 00137 00139 virtual void setVelocityHigh(const PxVec3&) = 0; 00140 00142 virtual void setLifetimeLow(const float&) = 0; 00143 00145 virtual void setLifetimeHigh(const float&) = 0; 00146 00148 virtual void emitAssetParticles(bool enable) = 0; 00149 00151 virtual bool getEmitAssetParticles() const = 0; 00152 00159 virtual void setPreferredRenderVolume(RenderVolume* volume) = 0; 00160 00162 virtual void getRate(float&) const = 0; 00163 00165 virtual uint32_t getSimParticlesCount() const = 0; 00166 00168 virtual uint32_t getActiveParticleCount() const = 0; 00169 00171 virtual void setDensityGridPosition(const PxVec3 &pos) = 0; 00172 00174 virtual void setApexEmitterValidateCallback(EmitterValidateCallback *callback) = 0; 00175 00177 PX_DEPRECATED virtual void setObjectScale(float scale) = 0; 00178 00180 PX_DEPRECATED virtual float getObjectScale(void) const = 0; 00181 00183 virtual void setCurrentScale(float scale) = 0; 00184 00186 virtual float getCurrentScale(void) const = 0; 00187 00188 00189 }; 00190 00191 PX_POP_PACK 00192 00193 } 00194 } // end namespace nvidia 00195 00196 #endif // EMITTER_ACTOR_H