26 link(NxActor *actorPtr) {
30 _ptr->userData =
this;
36 scene->_actors.add(
this);
39 NxShape *
const *shapes = _ptr->getShapes();
40 NxU32 nShapes = _ptr->getNbShapes();
42 for (NxU32 i=0; i < nShapes; i++) {
43 PhysxShape *shape = PhysxShape::factory(shapes[i]->getType());
44 shape->link(shapes[i]);
55 NxShape *
const *shapes = _ptr->getShapes();
56 NxU32 nShapes = _ptr->getNbShapes();
58 for (NxU32 i=0; i < nShapes; i++) {
64 _ptr->userData =
nullptr;
65 _error_type = ET_released;
68 scene->_actors.remove(
this);
77 nassertv(_error_type == ET_ok);
80 _ptr->getScene().releaseActor(*_ptr);
90 _controller = controller;
100 nassertr(_error_type == ET_ok,
false);
101 return _ptr->saveBodyToDesc(bodyDesc._desc);
110 nassertv(_error_type == ET_ok);
111 _ptr->saveToDesc(actorDesc._desc);
121 nassertv(_error_type == ET_ok);
123 _name = name ? name :
"";
124 _ptr->setName(_name.c_str());
133 nassertr(_error_type == ET_ok,
"");
134 return _ptr->getName();
149 if (_error_type != ET_ok)
return;
154 LVector3f hpr(_controller->get_h(), 0.0f, 0.0f);
155 LPoint3f pos = _controller->get_pos();
169 nassertr(_error_type == ET_ok, LPoint3f::zero());
179 nassertr(_error_type == ET_ok, LMatrix4f::zeros_mat());
189 nassertr(_error_type == ET_ok, LQuaternionf::zero());
200 nassertv(_error_type == ET_ok);
201 nassertv_always(!pos.is_nan());
232 nassertv(_error_type == ET_ok);
233 nassertv_always(!mat.is_nan());
245 nassertv(_error_type == ET_ok);
248 q.set_hpr(LVector3f(h, p, r));
263 nassertv(_error_type == ET_ok);
264 nassertv_always(!pos.is_nan());
291 nassertv(_error_type == ET_ok);
292 nassertv_always(!mat.is_nan());
308 nassertv(_error_type == ET_ok);
311 q.set_hpr(LVector3f(h, p, r));
325 nassertv(_error_type == ET_ok);
338 nassertv(_error_type == ET_ok);
361 nassertr(_error_type == ET_ok,
nullptr);
363 NxScene *scenePtr = &(_ptr->getScene());
375 nassertr(_error_type == ET_ok, -1);
377 return _ptr->getNbShapes();
390 nassertr(_error_type == ET_ok,
nullptr);
391 nassertr(desc.is_valid(),
nullptr);
393 PhysxShape *shape = PhysxShape::factory(desc.ptr()->getType());
394 nassertr(shape,
nullptr);
396 NxShape *shapePtr = _ptr->createShape(*desc.ptr());
397 nassertr(shapePtr,
nullptr);
399 shape->link(shapePtr);
411 nassertr(_error_type == ET_ok,
nullptr);
412 nassertr_always(idx < _ptr->getNbShapes(),
nullptr);
414 NxShape *
const *shapes = _ptr->getShapes();
415 NxShape *shapePtr = shapes[idx];
429 nassertr(_error_type == ET_ok,
nullptr);
431 NxShape *
const *shapes = _ptr->getShapes();
432 NxShape *shapePtr =
nullptr;
433 NxU32 nShapes = _ptr->getNbShapes();
435 for (NxU32 i=0; i < nShapes; i++) {
436 shapePtr = shapes[i];
438 if (strcmp(shapePtr->getName(), name) == 0) {
458 add_force(
const LVector3f force, PhysxForceMode mode,
bool wakeup) {
460 nassertv(_error_type == ET_ok);
461 nassertv_always(!force.is_nan());
481 add_force_at_pos(
const LVector3f force,
const LPoint3f &pos, PhysxForceMode mode,
bool wakeup) {
483 nassertv(_error_type == ET_ok);
484 nassertv_always(!force.is_nan());
485 nassertv_always(!pos.is_nan());
507 nassertv(_error_type == ET_ok);
508 nassertv_always(!force.is_nan());
509 nassertv_always(!pos.is_nan());
524 add_torque(
const LVector3f torque, PhysxForceMode mode,
bool wakeup) {
526 nassertv(_error_type == ET_ok);
527 nassertv_always(!torque.is_nan());
544 nassertv(_error_type == ET_ok);
545 nassertv_always(!force.is_nan());
567 nassertv(_error_type == ET_ok);
568 nassertv_always(!force.is_nan());
569 nassertv_always(!pos.is_nan());
591 nassertv(_error_type == ET_ok);
592 nassertv_always(!force.is_nan());
593 nassertv_always(!pos.is_nan());
610 nassertv(_error_type == ET_ok);
611 nassertv_always(!torque.is_nan());
645 nassertr(_error_type == ET_ok,
false);
646 return _ptr->updateMassFromShapes(density, totalMass);
656 nassertr(_error_type == ET_ok, 0.0f);
657 return _ptr->computeKineticEnergy();
666 nassertr(_error_type == ET_ok,
false);
667 return _ptr->isDynamic();
677 nassertv(_error_type == ET_ok);
678 nassertv(group >= 0 && group < 32);
680 NxShape *
const *shapes = _ptr->getShapes();
681 NxU32 nShapes = _ptr->getNbShapes();
683 for (NxU32 i=0; i < nShapes; i++) {
684 shapes[i]->setGroup( group );
695 _ptr->raiseBodyFlag((NxBodyFlag)flag);
698 _ptr->clearBodyFlag((NxBodyFlag)flag);
708 nassertr(_error_type == ET_ok,
false);
709 return ptr()->readBodyFlag((NxBodyFlag)flag);
719 _ptr->raiseActorFlag((NxActorFlag)flag);
722 _ptr->clearActorFlag((NxActorFlag)flag);
732 nassertr(_error_type == ET_ok,
false);
733 return ptr()->readActorFlag((NxActorFlag)flag);
750 nassertv(_error_type == ET_ok);
752 NxU32 flags = _ptr->getContactReportFlags();
761 _ptr->setContactReportFlags(flags);
770 nassertv(_error_type == ET_ok);
771 nassertv(threshold >= 0.0f);
773 _ptr->setContactReportThreshold(threshold);
791 nassertv(_error_type == ET_ok);
792 nassertv(group >= 0 && group < 0x8000);
794 ptr()->setGroup(group);
803 nassertr(_error_type == ET_ok, 0);
805 return ptr()->getGroup();
823 nassertv(_error_type == ET_ok);
824 nassertv(group >= 0 && group < 32);
827 _ptr->setDominanceGroup(group);
836 nassertr(_error_type == ET_ok, 0);
838 return ptr()->getDominanceGroup();
849 nassertv(_error_type == ET_ok);
850 nassertv(angDamp >= 0.0f);
852 _ptr->setAngularDamping(angDamp);
861 nassertr(_error_type == ET_ok, 0.0f);
862 return _ptr->getAngularDamping();
873 nassertv(_error_type == ET_ok);
874 nassertv(linDamp >= 0.0f);
876 _ptr->setLinearDamping(linDamp);
885 nassertr(_error_type == ET_ok, 0.0f);
886 return _ptr->getLinearDamping();
901 nassertv(_error_type == ET_ok);
902 nassertv(_ptr->isDynamic());
919 nassertv(_error_type == ET_ok);
920 nassertv(_ptr->isDynamic());
947 nassertv(_error_type == ET_ok);
948 nassertv(_ptr->isDynamic());
950 _ptr->setMaxAngularVelocity(maxAngVel);
959 nassertr(_error_type == ET_ok, LVector3f::zero());
969 nassertr(_error_type == ET_ok, LVector3f::zero());
979 nassertr(_error_type == ET_ok, 0.0f);
980 return _ptr->getMaxAngularVelocity();
992 nassertr(_error_type == ET_ok, LVector3f::zero());
993 nassertr_always(!point.is_nan(), LVector3f::zero());
1008 nassertr(_error_type == ET_ok, LVector3f::zero());
1009 nassertr_always(!point.is_nan(), LVector3f::zero());
1025 nassertv(_error_type == ET_ok);
1038 nassertv(_error_type == ET_ok);
1049 nassertr(_error_type == ET_ok, LVector3f::zero());
1061 nassertr(_error_type == ET_ok, LVector3f::zero());
1077 nassertv(_error_type == ET_ok);
1078 _ptr->setSleepLinearVelocity(threshold);
1093 nassertv(_error_type == ET_ok);
1094 _ptr->setSleepAngularVelocity(threshold);
1110 nassertv(_error_type == ET_ok);
1111 _ptr->setSleepEnergyThreshold(threshold);
1122 nassertr(_error_type == ET_ok, 0.0f);
1123 return _ptr->getSleepLinearVelocity();
1134 nassertr(_error_type == ET_ok, 0.0f);
1135 return _ptr->getSleepAngularVelocity();
1146 nassertr(_error_type == ET_ok, 0.0f);
1147 return _ptr->getSleepEnergyThreshold();
1164 nassertr(_error_type == ET_ok,
false);
1165 return _ptr->isSleeping();
1180 nassertv(_error_type == ET_ok);
1181 _ptr->wakeUp(wakeCounterValue);
1196 nassertv(_error_type == ET_ok);
1206 nassertv(_error_type == ET_ok);
1207 _ptr->setMass(mass);
1216 nassertr(_error_type == ET_ok, 0.0f);
1217 return _ptr->getMass();
1226 nassertv(_error_type == ET_ok);
1236 nassertv(_error_type == ET_ok);
1246 nassertv(_error_type == ET_ok);
1256 nassertv(_error_type == ET_ok);
1266 nassertv(_error_type == ET_ok);
1276 nassertv(_error_type == ET_ok);
1286 nassertv(_error_type == ET_ok);
1296 nassertv(_error_type == ET_ok);
1306 nassertv(_error_type == ET_ok);
1317 nassertv(_error_type == ET_ok);
1327 nassertr(_error_type == ET_ok, LMatrix4f::zeros_mat());
1337 nassertr(_error_type == ET_ok, LPoint3f::zero());
1347 nassertr(_error_type == ET_ok, LMatrix3f::ident_mat());
1357 nassertr(_error_type == ET_ok, LMatrix4f::zeros_mat());
1367 nassertr(_error_type == ET_ok, LPoint3f::zero());
1377 nassertr(_error_type == ET_ok, LMatrix3f::ident_mat());
1388 nassertr(_error_type == ET_ok, LVector3f::zero());
1399 nassertr(_error_type == ET_ok, LMatrix3f::ident_mat());
1410 nassertr(_error_type == ET_ok, LMatrix3f::ident_mat());