Panda3D

Loading...
Searching...
No Matches
bulletBoxShape.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 bulletBoxShape.cxx
10 * @author enn0x
11 * @date 2010-01-24
12 */
13
14#include "bulletBoxShape.h"
15
16#include "bulletWorld.h"
17
18#include "bullet_utils.h"
19
20 TypeHandle BulletBoxShape::_type_handle;
21
22/**
23 *
24 */
25BulletBoxShape::
26BulletBoxShape(const LVecBase3 &halfExtents) : _half_extents(halfExtents) {
27
28 btVector3 btHalfExtents = LVecBase3_to_btVector3(halfExtents);
29
30 _shape = new btBoxShape(btHalfExtents);
31 _shape->setUserPointer(this);
32}
33
34/**
35 *
36 */
37BulletBoxShape::
38BulletBoxShape(const BulletBoxShape &copy) {
39 LightMutexHolder holder(BulletWorld::get_global_lock());
40
41 _half_extents = copy._half_extents;
42 btVector3 btHalfExtents = LVecBase3_to_btVector3(_half_extents);
43
44 _shape = new btBoxShape(btHalfExtents);
45 _shape->setUserPointer(this);
46}
47
48/**
49 *
50 */
51btCollisionShape *BulletBoxShape::
52ptr() const {
53
54 return _shape;
55}
56
57/**
58 *
59 */
60LVecBase3 BulletBoxShape::
61get_half_extents_without_margin() const {
62 LightMutexHolder holder(BulletWorld::get_global_lock());
63
64 return btVector3_to_LVecBase3(_shape->getHalfExtentsWithoutMargin());
65}
66
67/**
68 *
69 */
70LVecBase3 BulletBoxShape::
71get_half_extents_with_margin() const {
72 LightMutexHolder holder(BulletWorld::get_global_lock());
73
74 return btVector3_to_LVecBase3(_shape->getHalfExtentsWithMargin());
75}
76
77/**
78 *
79 */
80 BulletBoxShape *BulletBoxShape::
81make_from_solid(const CollisionBox *solid) {
82
83 LPoint3 p0 = solid->get_min();
84 LPoint3 p1 = solid->get_max();
85
86 LVecBase3 extents((p1.get_x() - p0.get_x()) / 2.0,
87 (p1.get_y() - p0.get_y()) / 2.0,
88 (p1.get_z() - p0.get_z()) / 2.0);
89
90 return new BulletBoxShape(extents);
91}
92
93/**
94 * Tells the BamReader how to create objects of type BulletShape.
95 */
96 void BulletBoxShape::
97 register_with_read_factory() {
98 BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
99}
100
101/**
102 * Writes the contents of this object to the datagram for shipping out to a
103 * Bam file.
104 */
105 void BulletBoxShape::
106 write_datagram(BamWriter *manager, Datagram &dg) {
107 BulletShape::write_datagram(manager, dg);
108 dg.add_stdfloat(get_margin());
109 _half_extents.write_datagram(dg);
110}
111
112/**
113 * This function is called by the BamReader's factory when a new object of
114 * type BulletShape is encountered in the Bam file. It should create the
115 * BulletShape and extract its information from the file.
116 */
117 TypedWritable *BulletBoxShape::
118make_from_bam(const FactoryParams &params) {
119 BulletBoxShape *param = new BulletBoxShape;
120 DatagramIterator scan;
121 BamReader *manager;
122
123 parse_params(params, scan, manager);
124 param->fillin(scan, manager);
125
126 return param;
127}
128
129/**
130 * This internal function is called by make_from_bam to read in all of the
131 * relevant data from the BamFile for the new BulletShape.
132 */
133 void BulletBoxShape::
134fillin(DatagramIterator &scan, BamReader *manager) {
135 BulletShape::fillin(scan, manager);
136 nassertv(_shape == nullptr);
137
138 PN_stdfloat margin = scan.get_stdfloat();
139
140 _half_extents.read_datagram(scan);
141
142 _shape = new btBoxShape(LVecBase3_to_btVector3(_half_extents));
143 _shape->setUserPointer(this);
144 _shape->setMargin(margin);
145}
parse_params
void parse_params(const FactoryParams &params, DatagramIterator &scan, BamReader *&manager)
Takes in a FactoryParams, passed from a WritableFactory into any TypedWritable's make function,...
Definition bamReader.I:275
bulletBoxShape.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bulletWorld.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
bullet_utils.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
BamReader
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition bamReader.h:110
BamReader::get_factory
static WritableFactory * get_factory()
Returns the global WritableFactory for generating TypedWritable objects.
Definition bamReader.I:177
BulletBoxShape
Definition bulletBoxShape.h:29
BulletBoxShape::write_datagram
virtual void write_datagram(BamWriter *manager, Datagram &dg)
Writes the contents of this object to the datagram for shipping out to a Bam file.
Definition bulletBoxShape.cxx:106
BulletBoxShape::register_with_read_factory
static void register_with_read_factory()
Tells the BamReader how to create objects of type BulletShape.
Definition bulletBoxShape.cxx:97
CollisionBox
A cuboid collision volume or object.
Definition collisionBox.h:27
DatagramIterator
A class to retrieve the individual data elements previously stored in a Datagram.
Definition datagramIterator.h:30
DatagramIterator::get_stdfloat
PN_stdfloat get_stdfloat()
Extracts either a 32-bit or a 64-bit floating-point number, according to Datagram::set_stdfloat_doubl...
Definition datagramIterator.I:242
Datagram
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition datagram.h:38
Datagram::add_stdfloat
void add_stdfloat(PN_stdfloat value)
Adds either a 32-bit or a 64-bit floating-point number, according to set_stdfloat_double().
Definition datagram.I:133
FactoryParams
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition factoryParams.h:36
Factory::register_factory
void register_factory(TypeHandle handle, CreateFunc *func, void *user_data=nullptr)
Registers a new kind of thing the Factory will be able to create.
Definition factory.I:73
TypeHandle
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
TypedWritable
Base class for objects that can be written to and read from Bam files.
Definition typedWritable.h:35
TypedWritable::fillin
virtual void fillin(DatagramIterator &scan, BamReader *manager)
This internal function is intended to be called by each class's make_from_bam() method to read in all...
Definition typedWritable.cxx:103
TypedWritable::write_datagram
virtual void write_datagram(BamWriter *manager, Datagram &dg)
Writes the contents of this object to the datagram for shipping out to a Bam file.
Definition typedWritable.cxx:54