载入中...
搜索中...
未找到
Body3D.h
浏览该文件的文档.
1#pragma once
2
3#include <string>
4
5#include <box3d/id.h>
6
7namespace eve::physics {
8
9class World3D;
10class Shape3D;
11
16class Body3D {
17public:
19 Body3D(World3D *world, b3BodyId bodyId, int id);
20 ~Body3D();
21
22 Body3D(const Body3D &) = delete;
23 Body3D &operator=(const Body3D &) = delete;
24
26 int getId() const { return id_; }
27
29 void setPosition(float x, float y, float z);
30 float getX() const;
31 float getY() const;
32 float getZ() const;
33
35 void setRotation(float qx, float qy, float qz, float qw);
36 float getRotX() const;
37 float getRotY() const;
38 float getRotZ() const;
39 float getRotW() const;
40
42 void setLinearVelocity(float vx, float vy, float vz);
43 float getLinearVelocityX() const;
44 float getLinearVelocityY() const;
45 float getLinearVelocityZ() const;
46
48 void setAngularVelocity(float wx, float wy, float wz);
49 float getAngularVelocityX() const;
50 float getAngularVelocityY() const;
51 float getAngularVelocityZ() const;
52
54 void applyForce(float fx, float fy, float fz);
56 void applyForceAt(float fx, float fy, float fz, float x, float y, float z);
58 void applyLinearImpulse(float ix, float iy, float iz);
60 void applyAngularImpulse(float ix, float iy, float iz);
61
63 void setType(const std::string &bodyType);
64 std::string getType() const;
65
67 void setFixedRotation(bool fixed);
68 bool isFixedRotation() const;
69
71 void setActive(bool active);
72 bool isActive() const;
73
75 void setBullet(bool bullet);
76 bool isBullet() const;
77
79 void setAwake(bool awake);
80 bool isAwake() const;
81
86 Shape3D *newBoxShape(float width, float height, float depth, float density = 1.f,
87 float friction = 0.2f, float restitution = 0.f);
88 Shape3D *newSphereShape(float radius, float density = 1.f, float friction = 0.2f,
89 float restitution = 0.f);
91 Shape3D *newCapsuleShape(float height, float radius, float density = 1.f,
92 float friction = 0.2f, float restitution = 0.f);
93
95 void destroy();
96
98 World3D *getWorld() { return world_; }
99 b3BodyId raw() const { return bodyId_; }
101 bool isValid() const;
102
104 void invalidate();
105
106private:
107 friend class World3D;
108 friend class Shape3D;
109
110 World3D *world_ = nullptr;
111 b3BodyId bodyId_{};
112 int id_ = 0;
113};
114
115} // namespace eve::physics
bool active
Definition CardTypes.cpp:34
int y
Definition Grass.cpp:135
int z
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
float depth
int width
3D rigid body (Box3D) in meter-space coordinates (+Y up by convention). Owned by a World3D; create sh...
Definition Body3D.h:16
void setActive(bool active)
Disables/enables the body and its shapes.
Definition Body3D.cpp:235
Body3D & operator=(const Body3D &)=delete
void setRotation(float qx, float qy, float qz, float qw)
Orientation as quaternion (x, y, z, w).
Definition Body3D.cpp:113
b3BodyId raw() const
Definition Body3D.h:99
bool isBullet() const
Definition Body3D.cpp:250
bool isActive() const
Definition Body3D.cpp:243
void applyForce(float fx, float fy, float fz)
Force applied at the center of mass.
Definition Body3D.cpp:190
float getLinearVelocityY() const
Definition Body3D.cpp:160
void applyLinearImpulse(float ix, float iy, float iz)
Instantaneous linear impulse.
Definition Body3D.cpp:200
void setFixedRotation(bool fixed)
Lock all angular axes (Box3D motion locks).
Definition Body3D.cpp:220
void applyAngularImpulse(float ix, float iy, float iz)
Instantaneous angular impulse.
Definition Body3D.cpp:205
float getX() const
Definition Body3D.cpp:98
bool isFixedRotation() const
Definition Body3D.cpp:229
void setBullet(bool bullet)
CCD bullet mode.
Definition Body3D.cpp:245
World3D * getWorld()
Owning world / raw Box3D body id.
Definition Body3D.h:98
Shape3D * newBoxShape(float width, float height, float depth, float density=1.f, float friction=0.2f, float restitution=0.f)
Box extents are full width/height/depth in meters (same convention as Body.newRectangleFixture)....
Definition Body3D.cpp:259
bool isValid() const
True while the underlying Box3D body is still alive.
Definition Body3D.cpp:64
float getY() const
Definition Body3D.cpp:103
void setAwake(bool awake)
Wakes / sleeps the body manually.
Definition Body3D.cpp:252
void destroy()
Destroys the body inside its world.
Definition Body3D.cpp:72
float getRotZ() const
Definition Body3D.cpp:140
float getRotY() const
Definition Body3D.cpp:135
float getRotX() const
Definition Body3D.cpp:130
float getAngularVelocityZ() const
Definition Body3D.cpp:185
Body3D(const Body3D &)=delete
void invalidate()
Internal: marks the wrapper invalid after world destruction.
Definition Body3D.cpp:66
int getId() const
Stable id used by collision events.
Definition Body3D.h:26
float getAngularVelocityX() const
Definition Body3D.cpp:175
std::string getType() const
Definition Body3D.cpp:215
float getRotW() const
Definition Body3D.cpp:145
void applyForceAt(float fx, float fy, float fz, float x, float y, float z)
Force applied at a world position.
Definition Body3D.cpp:195
Shape3D * newCapsuleShape(float height, float radius, float density=1.f, float friction=0.2f, float restitution=0.f)
Capsule along local Y; height is distance between hemisphere centers.
Definition Body3D.cpp:296
void setLinearVelocity(float vx, float vy, float vz)
Linear velocity in m/s.
Definition Body3D.cpp:150
bool isAwake() const
Definition Body3D.cpp:257
void setPosition(float x, float y, float z)
Position in meters.
Definition Body3D.cpp:93
void setType(const std::string &bodyType)
"static" | "kinematic" | "dynamic".
Definition Body3D.cpp:210
float getLinearVelocityZ() const
Definition Body3D.cpp:165
void setAngularVelocity(float wx, float wy, float wz)
Angular velocity in rad/s.
Definition Body3D.cpp:170
float getAngularVelocityY() const
Definition Body3D.cpp:180
float getZ() const
Definition Body3D.cpp:108
Shape3D * newSphereShape(float radius, float density=1.f, float friction=0.2f, float restitution=0.f)
Definition Body3D.cpp:279
float getLinearVelocityX() const
Definition Body3D.cpp:155
3D shape (box/sphere/capsule) attached to a Body3D with material settings. Created via Body3D::new*Sh...
Definition Shape3D.h:14
Box3D rigid-body world. Script coordinates are meters (Box3D native), unlike 2D World which uses pixe...
Definition World3D.h:18