aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/include/emitter/GroundEmitterActor.h
diff options
context:
space:
mode:
Diffstat (limited to 'APEX_1.4/include/emitter/GroundEmitterActor.h')
-rw-r--r--APEX_1.4/include/emitter/GroundEmitterActor.h160
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