RavEngine
Loading...
Searching...
No Matches
NpRigidActorTemplateInternal.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef NP_RIGID_ACTOR_TEMPLATE_INTERNAL_H
30#define NP_RIGID_ACTOR_TEMPLATE_INTERNAL_H
31
32// PT: TODO: what is not internal about NpRigidActorTemplate.h ? Just merge the two files
33
34
35
36namespace physx
37{
38
39template<class APIClass, class T>
40static PX_FORCE_INLINE void removeRigidActorT(T& rigidActor)
41{
42 NpScene* s = rigidActor.getNpScene();
43 NP_WRITE_CHECK(s);
44
45 //Remove constraints (if any constraint is attached to the actor).
46 rigidActor.NpRigidActorTemplate<APIClass>::removeConstraints(rigidActor);
47
48 //Remove from aggregate (if it is in an aggregate).
49 rigidActor.NpActorTemplate<APIClass>::removeFromAggregate(rigidActor);
50
51 //Remove from scene (if it is in a scene).
52 PxSceneQuerySystem* sqManager = NULL;
53 if(s)
54 {
55 sqManager = &s->getSQAPI();
56 const bool noSim = rigidActor.getActorFlags().isSet(PxActorFlag::eDISABLE_SIMULATION);
57 s->scRemoveActor(rigidActor, true, noSim);
58 }
59
60 //Remove associated shapes.
61 rigidActor.NpRigidActorTemplate<APIClass>::removeShapes(sqManager);
62}
63
64template<class APIClass, class T>
65static PX_FORCE_INLINE bool releaseRigidActorT(T& rigidActor)
66{
67 NpScene* s = rigidActor.getNpScene();
68 NP_WRITE_CHECK(s);
69
70 PX_CHECK_SCENE_API_WRITE_FORBIDDEN_AND_RETURN_VAL(s, "PxActor::release() not allowed while simulation is running. Call will be ignored.", false)
71
72 const bool noSim = rigidActor.getActorFlags().isSet(PxActorFlag::eDISABLE_SIMULATION);
73 if(s && noSim)
74 {
75 // need to do it here because the Np-shape buffer will not be valid anymore after the removal below
76 // and unlike simulation objects, there is no shape buffer in the simulation controller
77 rigidActor.getShapeManager().clearShapesOnRelease(*s, rigidActor);
78 }
79
80 NpPhysics::getInstance().notifyDeletionListenersUserRelease(&rigidActor, rigidActor.userData);
81
82 //Remove constraints, aggregates, scene, shapes.
83 removeRigidActorT<APIClass, T>(rigidActor);
84
85 if (s)
86 {
87 s->removeFromRigidActorList(rigidActor);
88 }
89
90 return true;
91}
92
93}
94
95#endif
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
@ eDISABLE_SIMULATION
Disables simulation for the actor.
Definition PxActor.h:102