diff options
Diffstat (limited to 'APEX_1.4/include/emitter/GroundEmitterActor.h')
| -rw-r--r-- | APEX_1.4/include/emitter/GroundEmitterActor.h | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/APEX_1.4/include/emitter/GroundEmitterActor.h b/APEX_1.4/include/emitter/GroundEmitterActor.h new file mode 100644 index 00000000..c0c3c685 --- /dev/null +++ b/APEX_1.4/include/emitter/GroundEmitterActor.h @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved. + * + * NVIDIA CORPORATION and its licensors retain all intellectual property + * and proprietary rights in and to this software, related documentation + * and any modifications thereto. Any use, reproduction, disclosure or + * distribution of this software and related documentation without an express + * license agreement from NVIDIA CORPORATION is strictly prohibited. + */ + + +#ifndef GROUND_EMITTER_ACTOR_H +#define GROUND_EMITTER_ACTOR_H + +#include "Apex.h" + +namespace nvidia +{ +namespace apex +{ + + +PX_PUSH_PACK_DEFAULT + +class GroundEmitterAsset; +class RenderVolume; + +/** + \brief a user calback interface used to map raycast hitpoints to material ID + * If an instance of this class is registered with a ground emitter actor, the actor will call + * requestMaterialLookups() in lieu of doing raycasts. The call will occur from within the scope + * of the ApexScene thread, so the callback must be thread safe. + */ +class MaterialLookupCallback +{ +public: + /// Material request structure. + struct MaterialRequest + { + PxVec3 samplePosition; ///< test point position. This is filled by the emitter + uint32_t outMaterialID; ///< ID of the material at the hitpoint. This must be filled by the user + }; + + /** + \brief Submit the meterial lookup request. This method is called by the emitter and implemented by the user + \param requestCount [IN] number of requests + \param reqList [IN/OUT] the pointer to the requests. samplePosition is read and materialID is written to by the user. + */ + virtual void requestMaterialLookups(uint32_t requestCount, MaterialRequest* reqList) = 0; + + virtual ~MaterialLookupCallback() {} +}; + +///Ground Emitter actor. Uses raycasts against ground to spawn particles +class GroundEmitterActor : public Actor +{ +protected: + virtual ~GroundEmitterActor() {} + +public: + /** + \brief Returns the asset the instance has been created from. + */ + virtual GroundEmitterAsset* getEmitterAsset() const = 0; + + /** + \brief Returns the pose of the emitter + */ + virtual const PxMat44 getPose() const = 0; + /** + \brief Sets the pose of the emitter + */ + virtual void setPose(const PxMat44& pos) = 0; + + /** \brief Set the material lookup callback method that replaces raycasts */ + virtual void setMaterialLookupCallback(MaterialLookupCallback*) = 0; + + /** \brief Get the material lookup callback method that replaces raycasts */ + virtual MaterialLookupCallback* getMaterialLookupCallback() const = 0; + + /** + \brief Attaches the emitter to an actor + PxActor pointer can be NULL to detach existing actor + */ + virtual void setAttachActor(PxActor*) = 0; + + /** + \brief sets the relative position of the emitter in the space of the actor to which it is attached + */ + virtual void setAttachRelativePosition(const PxVec3& pos) = 0; + + /**\brief PhysX SDK 3.X. Retrieves the actor, to which the emitter is attached. NULL is returned for an unattached emitter. */ + virtual const PxActor* getAttachActor() const = 0; + + /** \brief Retrieves the relative position of the emitter in the space of the actor to which it is attached. */ + virtual const PxVec3& getAttachRelativePosition() const = 0; + + /* Override some asset settings at run time */ + + ///Sets the range from which the density of particles within the volume is randomly chosen + virtual void setDensity(const float&) = 0; + + ///Sets the radius. The ground emitter actor will create objects within a circle of size 'radius'. + virtual void setRadius(float) = 0; + + ///Sets The maximum raycasts number per frame. + virtual void setMaxRaycastsPerFrame(uint32_t) = 0; + + ///Sets the height from which the ground emitter will cast rays at terrain/objects opposite of the 'upDirection'. + virtual void setRaycastHeight(float) = 0; + + /** + \brief Sets the height above the ground to emit particles. + If greater than 0, the ground emitter will refresh a disc above the player's position rather than + refreshing a circle around the player's position. + + */ + virtual void setSpawnHeight(float) = 0; + + ///Gets the range from which the density of particles within the volume is randomly chosen + virtual const float & getDensity() const = 0; + + ///Gets the radius. The ground emitter actor will create objects within a circle of size 'radius'. + virtual float getRadius() const = 0; + + ///Gets The maximum raycasts number per frame. + virtual uint32_t getMaxRaycastsPerFrame() const = 0; + + ///Gets the height from which the ground emitter will cast rays at terrain/objects opposite of the 'upDirection'. + virtual float getRaycastHeight() const = 0; + + /** + \brief Gets the height above the ground to emit particles. + If greater than 0, the ground emitter will refresh a disc above the player's position rather than + refreshing a circle around the player's position. + */ + virtual float getSpawnHeight() const = 0; + + ///Sets collision groups used to cast rays + virtual void setRaycastCollisionGroups(uint32_t) = 0; + + ///PHYSX SDK 3.X. Sets collision groups mask. + virtual void setRaycastCollisionGroupsMask(physx::PxFilterData*) = 0; + + + ///Gets collision groups used to cast rays + virtual uint32_t getRaycastCollisionGroups() const = 0; + + ///Emitted particles are injected to specified render volume on initial frame. + ///Set to NULL to clear the preferred volume. + virtual void setPreferredRenderVolume(RenderVolume* volume) = 0; +}; + + +PX_POP_PACK + +} +} // end namespace nvidia + +#endif // GROUND_EMITTER_ACTOR_H |