Panda3D
Loading...
Searching...
No Matches
physxForceField.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file physxForceField.cxx
10 * @author enn0x
11 * @date 2009-11-06
12 */
13
14#include "physxForceField.h"
15#include "physxForceFieldDesc.h"
17#include "physxScene.h"
18
19TypeHandle PhysxForceField::_type_handle;
20
21/**
22 *
23 */
24void PhysxForceField::
25link(NxForceField *fieldPtr) {
26
27 // Link self
28 _ptr = fieldPtr;
29 _ptr->userData = this;
30 _error_type = ET_ok;
31
32 set_name(fieldPtr->getName());
33
34 PhysxScene *scene = (PhysxScene *)_ptr->getScene().userData;
35 scene->_forcefields.add(this);
36
37 // Link include shape group
39 group->link(&(_ptr->getIncludeShapeGroup()));
40}
41
42/**
43 *
44 */
45void PhysxForceField::
46unlink() {
47
48 // Unlink inlcude shape group
49 PhysxForceFieldShapeGroup *group = (PhysxForceFieldShapeGroup *)(_ptr->getIncludeShapeGroup().userData);
50 group->unlink();
51
52 // Unlink self
53 _ptr->userData = nullptr;
54 _error_type = ET_released;
55
56 PhysxScene *scene = (PhysxScene *)_ptr->getScene().userData;
57 scene->_forcefields.remove(this);
58}
59
60/**
61 *
62 */
63void PhysxForceField::
64release() {
65
66 nassertv(_error_type == ET_ok);
67
68 unlink();
69 _ptr->getScene().releaseForceField(*_ptr);
70 _ptr = nullptr;
71}
72
73/**
74 *
75 */
76void PhysxForceField::
77set_name(const char *name) {
78
79 nassertv(_error_type == ET_ok);
80
81 _name = name ? name : "";
82 _ptr->setName(_name.c_str());
83}
84
85/**
86 *
87 */
88const char *PhysxForceField::
89get_name() const {
90
91 nassertr(_error_type == ET_ok, "");
92 return _ptr->getName();
93}
94
95/**
96 *
97 */
98PhysxScene *PhysxForceField::
99get_scene() const {
100
101 nassertr(_error_type == ET_ok, nullptr);
102 return (PhysxScene *)(_ptr->getScene().userData);
103}
104
105/**
106 *
107 */
108PhysxForceFieldShapeGroup *PhysxForceField::
109get_include_shape_group() const {
110
111 nassertr(_error_type == ET_ok, nullptr);
112 return (PhysxForceFieldShapeGroup *)(_ptr->getIncludeShapeGroup().userData);
113}
114
115/**
116 *
117 */
118unsigned int PhysxForceField::
119get_num_shape_groups() const {
120
121 nassertr(_error_type == ET_ok, 0);
122 return _ptr->getNbShapeGroups();
123}
124
125/**
126 *
127 */
128PhysxForceFieldShapeGroup *PhysxForceField::
129get_shape_group(unsigned int idx) const {
130
131 nassertr(_error_type == ET_ok, nullptr);
132 nassertr_always(idx < _ptr->getNbShapeGroups(), nullptr);
133
134 NxForceFieldShapeGroup *groupPtr;
135 NxU32 nGroups = _ptr->getNbShapeGroups();
136
137 _ptr->resetShapeGroupsIterator();
138 for (NxU32 i=0; i <= idx; i++) {
139 groupPtr = _ptr->getNextShapeGroup();
140 }
141
142 return (PhysxForceFieldShapeGroup *)(groupPtr->userData);
143}
A scene is a collection of bodies, constraints, and effectors which can interact.
Definition physxScene.h:69
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.