My Project
|
The global physics scene (NxScene) and physics SDK is encapsulated in a member object of scene manager. More...
#include <PhysicsWorld.h>
Classes | |
struct | SubMeshPhysicsShape |
class | TriangleMeshShape |
the triangle mesh shape. More... | |
Public Types | |
typedef std::list< TriangleMeshShape * > | TriangleMeshShape_Map_Type |
![]() | |
typedef ParaEngine::weak_ptr< IObject, IAttributeFields > | WeakPtr_type |
![]() | |
typedef ParaEngine::weak_ptr< IObject > | WeakPtr_type |
Public Member Functions | |
ATTRIBUTE_DEFINE_CLASS (CPhysicsWorld) | |
void | InitPhysics () |
Init the physics scene. | |
void | ExitPhysics () |
ExitPhysics() calls NxPhysicsSDK::releaseScene() which deletes all the objects in the scene and then deletes the scene itself. More... | |
void | ResetPhysics () |
First call ExitPhysics(), then InitPhysics() | |
void | StepSimulation (double dTime) |
Start the physics for some time advances dTime: advances in seconds. | |
IParaPhysicsActor * | CreateStaticMesh (MeshEntity *ppMesh, const Matrix4 &globalMat, uint32 nShapeGroup=0, vector< IParaPhysicsActor *> *pOutputPhysicsActor=NULL, void *pUserData=NULL) |
create a static actor in the physical world from a mesh entity. More... | |
IParaPhysicsActor * | CreateStaticMesh (ParaXEntity *ppMesh, const Matrix4 &globalMat, uint32 nShapeGroup=0, vector< IParaPhysicsActor *> *pOutputPhysicsActor=NULL, void *pUserData=NULL) |
void | ReleaseActor (IParaPhysicsActor *pActor) |
release an actor by calling this function. More... | |
void | SetDynamicsSimulationEnabled (bool bEnable) |
whether to do dynamic simulation. More... | |
bool | IsDynamicsSimulationEnabled () |
IParaPhysics * | GetPhysicsInterface () |
get the physics interface. More... | |
![]() | |
virtual int | GetAttributeClassID () |
attribute class ID should be identical, unless one knows how overriding rules work. More... | |
virtual const char * | GetAttributeClassName () |
a static string, describing the attribute class object's name | |
virtual const char * | GetAttributeClassDescription () |
a static string, describing the attribute class object | |
virtual int | InstallFields (CAttributeClass *pClass, bool bOverride) |
this class should be implemented if one wants to add new attribute. More... | |
virtual int | GetChildAttributeColumnCount () |
we support multi-dimensional child object. More... | |
virtual int | GetChildAttributeObjectCount (int nColumnIndex=0) |
get the number of child objects (row count) in the given column. More... | |
virtual IAttributeFields * | GetChildAttributeObject (int nRowIndex, int nColumnIndex=0) |
virtual IAttributeFields * | GetChildAttributeObject (const std::string &sName) |
get attribute by child object. More... | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **) | |
ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *) | |
ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s) | |
ATTRIBUTE_METHOD (IAttributeFields, AddRef_s) | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *) | |
ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int) | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *) | |
ATTRIBUTE_METHOD (IAttributeFields, Release_s) | |
virtual const std::string & | GetIdentifier () |
virtual void | SetIdentifier (const std::string &sID) |
virtual bool | IsModified () |
whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More... | |
virtual void | SetModified (bool bModified) |
set whether any field has been modified. More... | |
virtual bool | ValidateFields () |
validate all fields and return true if validation passed. More... | |
virtual string | GetValidationMessage () |
get the recent validation message due to the most recent call to ValidateFields() | |
virtual bool | ResetField (int nFieldID) |
Reset the field to its initial or default value. More... | |
virtual bool | InvokeEditor (int nFieldID, const std::string &sParameters) |
Invoke an (external) editor for a given field. More... | |
virtual bool | AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0) |
add child object. More... | |
virtual void * | QueryObjectByName (const std::string &sObjectType) |
convert to object of a given type. More... | |
virtual void * | QueryObject (int nObjectType) |
convert to object of a given type. More... | |
virtual int | GetTime () |
get the current local time in case it is animated in milli seconds frames. More... | |
virtual void | SetTime (int nTime) |
virtual CDynamicAttributeField * | GetDynamicField (const std::string &sName) |
Get a dynamic field with a given name. More... | |
virtual CDynamicAttributeField * | GetDynamicField (int nIndex) |
Get a dynamic field with a given index. More... | |
virtual const char * | GetDynamicFieldNameByIndex (int nIndex) |
get field name by index | |
virtual int | GetDynamicFieldCount () |
how many dynamic field this object currently have. More... | |
virtual int | SetDynamicField (const std::string &sName, const CVariable &value) |
set a dynamic field with a given name. More... | |
virtual int | AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType) |
add dynamic field and return field index | |
virtual void | RemoveAllDynamicFields () |
remove all dynamic fields | |
virtual int | SaveDynamicFieldsToString (std::string &output) |
save only text dynamic fields to fieldname = value text strings. More... | |
virtual int | LoadDynamicFieldsFromString (const std::string &input) |
load only text dynamic fields from string More... | |
CAttributeClass * | GetAttributeClass () |
get the main attribute class object. More... | |
void | PrintObject () |
print the content of this object to a text file at temp/doc/[ClassName].txt. More... | |
![]() | |
virtual void | Clone (IObject *obj) const |
Clone the object's contains to a pointer. More... | |
virtual IObject * | Clone () const |
Clone the object's contains and return a pointer to the newly created object. More... | |
virtual bool | Equals (const IObject *obj) const |
Compare the object with another object. More... | |
virtual const IType * | GetType () const |
virtual std::string | ToString () const |
WeakPtr_type & | GetWeakReference () |
get weak reference object. More... | |
virtual int | ProcessObjectEvent (const ObjectEvent &event) |
this function is only used to backward compatibility of ParaObject:AddEvent() function. More... | |
![]() | |
void | addref () const |
add reference count of the object. More... | |
bool | delref () const |
decrease reference count of the object. More... | |
int | GetRefCount () const |
get the reference count | |
virtual int | Release () |
CRefCounted * | AddToAutoReleasePool () |
addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More... | |
Public Attributes | |
IParaPhysics * | m_pPhysicsWorld |
the main physic interface. More... | |
TriangleMeshShape_Map_Type | m_listMeshShapes |
all shapes used to composed the physical world. There may be multiple object using the same shape | |
bool | m_bRunDynamicSimulation |
whether to do dynamic simulation. It is turned off by default, which only provide basic collision detection. | |
Additional Inherited Members | |
![]() | |
static HRESULT | GetAttributeClassID_s (IAttributeFields *cls, int *p1) |
static HRESULT | GetAttributeClassName_s (IAttributeFields *cls, const char **p1) |
static bool | OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false) |
Open a given file with the default registered editor in the game engine. More... | |
![]() | |
virtual CAttributeClass * | CreateAttributeClass () |
initialize fields | |
virtual CDynamicAttributesSet * | GetDynamicAttributes (bool bCreateIfNotExist=false) |
![]() | |
WeakPtr_type | m_weak_reference |
![]() | |
int | m_refcount |
The global physics scene (NxScene) and physics SDK is encapsulated in a member object of scene manager.
It is called CPhysicsWorld. The environment simulator can retrieve the physics scene from this object. Other physics actor scene object can access this global physics objects via the scene manager.
IParaPhysicsActor * ParaEngine::CPhysicsWorld::CreateStaticMesh | ( | MeshEntity * | ppMesh, |
const Matrix4 & | globalMat, | ||
uint32 | nShapeGroup = 0 , |
||
vector< IParaPhysicsActor *> * | pOutputPhysicsActor = NULL , |
||
void * | pUserData = NULL |
||
) |
create a static actor in the physical world from a mesh entity.
please note that multiple mesh actor may be created.
ppMesh: the mesh entity, it must contain non-material faces. globalMat: the facing around the y axis. nShapeGroup: default to 0, must be smaller than 32. please see groups Mask used to filter shape objects. See #NxShape::setGroup group 0 means physics object that will block the player, but not the camera, such as small stones, thin posts, trees, etc. group 1 means physics object that will block the camera and player, such as building walls, big tree trunks, etc. group 2 means physics object that will block the camera only. pOutputPhysicsActor: in case the ppMesh contains multiple actors, it will be returned and added to pOutputPhysicsActor. if this is NULL, only the first physics actor will be added and returned. pUserData: the user data associated with each physics actor, this is usually its parent BaseObject.
Get the scaling factor from globalMat. since we need to create separate physics mesh with different scaling factors even for the same mesh model. it is assumed that components of globalMat satisfies the following equation: |(globalMat._11, globalMat._12, globalMat._13)| = 1; |(globalMat._21, globalMat._22, globalMat._23)| = 1; |(globalMat._31, globalMat._32, globalMat._33)| = 1;
if the shape has not been created from MeshEntity, we will create it, and add to the shape list for reuse later
Create the static actor
IParaPhysicsActor * ParaEngine::CPhysicsWorld::CreateStaticMesh | ( | ParaXEntity * | ppMesh, |
const Matrix4 & | globalMat, | ||
uint32 | nShapeGroup = 0 , |
||
vector< IParaPhysicsActor *> * | pOutputPhysicsActor = NULL , |
||
void * | pUserData = NULL |
||
) |
Get the scaling factor from globalMat. since we need to create separate physics mesh with different scaling factors even for the same mesh model. it is assumed that components of globalMat satisfies the following equation: |(globalMat._11, globalMat._12, globalMat._13)| = 1; |(globalMat._21, globalMat._22, globalMat._23)| = 1; |(globalMat._31, globalMat._32, globalMat._33)| = 1;
if the shape has not been created from MeshEntity, we will create it, and add to the shape list for reuse later
Create the static actor
void CPhysicsWorld::ExitPhysics | ( | ) |
ExitPhysics() calls NxPhysicsSDK::releaseScene() which deletes all the objects in the scene and then deletes the scene itself.
It then calls NxPhysicsSDK::release() which shuts down the SDK. ExitPhysics() is also called after glutMainLoop() to shut down the SDK before exiting.
IParaPhysics * CPhysicsWorld::GetPhysicsInterface | ( | ) |
get the physics interface.
create one if one does not exist.
void CPhysicsWorld::ReleaseActor | ( | IParaPhysicsActor * | pActor | ) |
release an actor by calling this function.
void ParaEngine::CPhysicsWorld::SetDynamicsSimulationEnabled | ( | bool | bEnable | ) |
whether to do dynamic simulation.
It is turned off by default, which only provide basic collision detection.
IParaPhysics* ParaEngine::CPhysicsWorld::m_pPhysicsWorld |
the main physic interface.