aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/include/Actor.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/include/Actor.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/include/Actor.h')
-rw-r--r--APEX_1.4/include/Actor.h236
1 files changed, 236 insertions, 0 deletions
diff --git a/APEX_1.4/include/Actor.h b/APEX_1.4/include/Actor.h
new file mode 100644
index 00000000..482756e3
--- /dev/null
+++ b/APEX_1.4/include/Actor.h
@@ -0,0 +1,236 @@
+/*
+ * 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 ACTOR_H
+#define ACTOR_H
+
+/*!
+\file
+\brief classes ApexActor, ApexActorSource
+*/
+
+#include "ApexInterface.h"
+
+#if PX_PHYSICS_VERSION_MAJOR == 3
+#include "PxActor.h"
+#include "PxShape.h"
+#include "PxFiltering.h"
+namespace nvidia { namespace apex
+{
+
+/** Corresponds to 20 frames for a time step of 0.02, PhysX 3.3 took PX_SLEEP_INTERVAL away */
+#define APEX_DEFAULT_WAKE_UP_COUNTER 0.4f
+
+/** Used to define generic get/set methods for 1-parameter values in PhysX3DescTemplate. */
+#define APEX_ACTOR_TEMPLATE_PARAM(_type, _name, _valid, _default) \
+bool is##_name##Valid(_type x) const { PX_UNUSED(x); return _valid; } \
+_type getDefault##_name() const { return _default; } \
+virtual _type get##_name() const = 0; \
+virtual bool set##_name(_type) = 0
+
+/**
+ Template for PhysX3.x actor, body and shape. Used by the Destruction module when creating PhysX objects.
+
+ See ApexActorSource::setPhysX3Template and ActorSource::getPhysX3Template.
+*/
+class PhysX3DescTemplate
+{
+public:
+ /*
+ For each Name below, there are functions: getName(), setName(), isNameValid(), and getDefaultName(). For example:
+
+ PxDominanceGroup getDominanceGroup() const;
+ bool setDominanceGroup(PxDominanceGroup); // Returns true iff the passed-in value is valid. (Note, will set the internal values even if they are not valid.)
+ bool isDominanceGroupValid() const;
+ PxDominanceGroup getDefaultDominanceGroup() const;
+ */
+
+ /* Type Name Validity Condition Default Value */
+ // Actor
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=DominanceGroup (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(physx::PxDominanceGroup, DominanceGroup, (1), 0);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ActorFlags (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint8_t, ActorFlags, (1), physx::PxActorFlag::eSEND_SLEEP_NOTIFIES);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=OwnerClient (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(physx::PxClientID, OwnerClient, (1), 0);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ClientBehaviorBits (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint32_t, ClientBehaviorBits, (1), 0);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ContactReportFlags (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint16_t, ContactReportFlags, (1), 0);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=UserData (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(void*, UserData, (1), NULL);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=Name (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(const char*, Name, (1), NULL);
+
+ // Body
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=Density (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, Density, (x >= 0.0f), 1.0f);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=BodyFlags (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint8_t, BodyFlags, (1), 0);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=WakeUpCounter (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, WakeUpCounter, (x >= 0.0f), APEX_DEFAULT_WAKE_UP_COUNTER);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=LinearDamping (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, LinearDamping, (x >= 0.0f), 0.0f);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=AngularDamping (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, AngularDamping, (x >= 0.0f), 0.05f);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=MaxAngularVelocity (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, MaxAngularVelocity, (1), 7.0f);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=SleepLinearVelocity (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, SleepLinearVelocity, (1), 0.0f);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=SolverIterationCount (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint32_t, SolverIterationCount, (x >= 1 && x <= 255), 4);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=VelocityIterationCount (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint32_t, VelocityIterationCount, (x >= 1 && x <= 255), 1);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ContactReportThreshold (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, ContactReportThreshold, (1), PX_MAX_F32);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=SleepThreshold (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, SleepThreshold, (1), 0.005f);
+
+ // Shape
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ShapeFlags (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(uint8_t, ShapeFlags, (1), physx::PxShapeFlag::eSIMULATION_SHAPE | physx::PxShapeFlag::eSCENE_QUERY_SHAPE | physx::PxShapeFlag::eVISUALIZATION);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ShapeUserData (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(void*, ShapeUserData, (1), NULL);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ShapeName (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(const char*, ShapeName, (1), NULL);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=SimulationFilterData (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(physx::PxFilterData, SimulationFilterData, (1), physx::PxFilterData(0, 0, 0, 0));
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=QueryFilterData (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(physx::PxFilterData, QueryFilterData, (1), physx::PxFilterData(0, 0, 0, 0));
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=ContactOffset (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, ContactOffset, (1), -1.0f);
+ /** getX(), setX(), getDefaultX(), and isXValid() for X=RestOffset (see APEX_ACTOR_TEMPLATE_PARAM) */
+ APEX_ACTOR_TEMPLATE_PARAM(float, RestOffset, (1), PX_MAX_F32);
+ // Shape materials get explicitly defined API:
+ /** getMaterials function is non-generic, as it returns two parameters (the materials array and the array size in materialCount) */
+ virtual physx::PxMaterial** getMaterials(uint32_t& materialCount) const = 0;
+ /** setMaterials function is non-generic, as it sets two parameters (the materials array in materialArray and the array size in materialCount) */
+ virtual bool setMaterials(physx::PxMaterial** materialArray, uint32_t materialCount) = 0; // Must have non-zero sized array of materials to be valid.
+
+
+ /** Use this method to release this object */
+ virtual void release() = 0;
+
+protected:
+ virtual ~PhysX3DescTemplate() {}
+}; // PhysX3DescTemplate
+
+#undef APEX_ACTOR_TEMPLATE_PARAM
+
+}}
+#endif
+
+namespace nvidia
+{
+namespace apex
+{
+
+PX_PUSH_PACK_DEFAULT
+
+class Asset;
+
+/**
+\brief Base class for APEX module objects.
+*/
+class Actor : public ApexInterface
+{
+public:
+ /**
+ \brief Returns the owning asset
+ */
+ virtual Asset* getOwner() const = 0;
+
+ /**
+ \brief Returns the range of possible values for physical Lod overwrite
+
+ \param [out] min The minimum lod value
+ \param [out] max The maximum lod value
+ \param [out] intOnly Only integers are allowed if this is true, gets rounded to nearest
+
+ \note The max value can change with different graphical Lods
+ \see Actor::forceLod()
+ */
+ virtual void getLodRange(float& min, float& max, bool& intOnly) const = 0;
+
+ /**
+ \brief Get current physical lod.
+ */
+ virtual float getActiveLod() const = 0;
+
+ /**
+ \brief Force an APEX Actor to use a certian physical Lod
+
+ \param [in] lod Overwrite the Lod system to use this Lod.
+
+ \note Setting the lod value to a negative number will turn off the overwrite and proceed with regular Lod computations
+ \see Actor::getLodRange()
+ */
+ virtual void forceLod(float lod) = 0;
+
+ /**
+ \brief Ensure that all module-cached data is cached.
+ */
+ virtual void cacheModuleData() const {}
+
+ /**
+ \brief Selectively enables/disables debug visualization of a specific APEX actor. Default value it true.
+ */
+ virtual void setEnableDebugVisualization(bool state) = 0;
+
+
+protected:
+ virtual ~Actor() {} // use release() method instead!
+};
+
+#if PX_PHYSICS_VERSION_MAJOR == 3
+/**
+\brief Base class for APEX classes that spawn PhysX SDK Actors
+*/
+class ActorSource
+{
+public:
+ /**
+ \brief Sets the current body template
+
+ User can specify a descriptor template for bodies that this object may create. APEX may customize these suggested settings.
+ Already created / existing bodies will not be changed if the body template is changed! The body template will only be used for
+ new bodies created after this is called!
+
+ members that are ignored:
+ massLocalPose
+ massSpaceInertia
+ mass
+ linearVelocity
+ angularVelocity
+
+ These fields should be left at their default values as set by the desc constructor.
+ */
+ virtual void setPhysX3Template(const PhysX3DescTemplate*) = 0;
+
+ /**
+ \brief Retrieve the current body template
+ */
+ virtual bool getPhysX3Template(PhysX3DescTemplate& dest) const = 0;
+
+ /**
+ \brief Create an PhysX3DescTemplate object to pass into the get/set methods.
+ */
+ virtual PhysX3DescTemplate* createPhysX3DescTemplate() const = 0;
+};
+
+#endif
+
+PX_POP_PACK
+
+}
+} // end namespace nvidia::apex
+
+#endif // ACTOR_H