载入中...
搜索中...
未找到
Body.h
浏览该文件的文档.
1#pragma once
2
3#include <string>
4
5class b2Body;
6
7namespace eve::physics {
8
9class World;
10class Fixture;
11
16class Body {
17public:
19 Body(World *world, b2Body *body, int id);
20 ~Body();
21
22 Body(const Body &) = delete;
23 Body &operator=(const Body &) = delete;
24
26 int getId() const { return id_; }
27
29 void setPosition(float x, float y);
30 float getX() const;
31 float getY() const;
32
34 void setAngle(float radians);
35 float getAngle() const;
36
38 void setLinearVelocity(float vx, float vy);
39 float getLinearVelocityX() const;
40 float getLinearVelocityY() const;
42 float getLinearSpeed() const;
44 float getMass() const;
46 float getWorldCenterX() const;
47 float getWorldCenterY() const;
48
50 void setAngularVelocity(float omega);
51 float getAngularVelocity() const;
52
54 void applyForce(float fx, float fy);
56 void applyForceAt(float fx, float fy, float x, float y);
58 void applyLinearImpulse(float ix, float iy);
60 void applyAngularImpulse(float impulse);
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
83 Fixture *newRectangleFixture(float width, float height, float density = 1.f,
84 float friction = 0.2f, float restitution = 0.f);
86 Fixture *newRectangleFixtureAt(float width, float height, float offsetX, float offsetY,
87 float density = 1.f, float friction = 0.2f,
88 float restitution = 0.f);
89 Fixture *newCircleFixture(float radius, float density = 1.f, float friction = 0.2f,
90 float restitution = 0.f);
91
93 void destroy();
94
96 World *getWorld() { return world_; }
97 b2Body *raw() { return body_; }
98 const b2Body *raw() const { return body_; }
99
101 void invalidate();
102
103private:
104 friend class World;
105 friend class Fixture;
106
107 World *world_ = nullptr;
108 b2Body *body_ = nullptr;
109 int id_ = 0;
110};
111
112} // namespace eve::physics
bool active
Definition CardTypes.cpp:34
int y
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
JobFunc body
int width
2D rigid body (Box2D) in pixel-space coordinates. Owned by a World; create shapes with newRectangleFi...
Definition Body.h:16
Fixture * newRectangleFixture(float width, float height, float density=1.f, float friction=0.2f, float restitution=0.f)
width/height in pixels; density kg/m² (Box2D units).
Definition Body.cpp:211
float getLinearVelocityX() const
Definition Body.cpp:113
void applyForceAt(float fx, float fy, float x, float y)
Force applied at a world pixel position.
Definition Body.cpp:156
void setBullet(bool bullet)
CCD bullet mode (recommended for fast small bodies).
Definition Body.cpp:197
float getX() const
Definition Body.cpp:88
void setAwake(bool awake)
Wakes / sleeps the body manually.
Definition Body.cpp:204
void setType(const std::string &bodyType)
"static" | "kinematic" | "dynamic".
Definition Body.cpp:173
void setAngle(float radians)
Rotation in radians.
Definition Body.cpp:98
float getLinearVelocityY() const
Definition Body.cpp:118
bool isActive() const
Definition Body.cpp:195
void applyLinearImpulse(float ix, float iy)
Instantaneous linear impulse.
Definition Body.cpp:162
Body(const Body &)=delete
Fixture * newCircleFixture(float radius, float density=1.f, float friction=0.2f, float restitution=0.f)
Definition Body.cpp:239
void setFixedRotation(bool fixed)
Locks rotation so the body cannot spin.
Definition Body.cpp:183
void applyForce(float fx, float fy)
Force (pixels/s² * kg) applied at the center of mass.
Definition Body.cpp:150
Body & operator=(const Body &)=delete
bool isAwake() const
Definition Body.cpp:209
bool isFixedRotation() const
Definition Body.cpp:188
bool isBullet() const
Definition Body.cpp:202
const b2Body * raw() const
Definition Body.h:98
void setAngularVelocity(float omega)
Angular velocity in radians/s.
Definition Body.cpp:140
b2Body * raw()
Definition Body.h:97
float getAngularVelocity() const
Definition Body.cpp:145
void destroy()
Destroys the body inside its world.
Definition Body.cpp:61
void applyAngularImpulse(float impulse)
Instantaneous angular impulse.
Definition Body.cpp:168
float getWorldCenterY() const
Definition Body.cpp:135
float getLinearSpeed() const
Magnitude of the linear velocity.
Definition Body.cpp:123
float getAngle() const
Definition Body.cpp:103
std::string getType() const
Definition Body.cpp:178
int getId() const
Stable id used by contact/impact events.
Definition Body.h:26
void invalidate()
Internal: marks the wrapper invalid after world destruction.
Definition Body.cpp:55
void setPosition(float x, float y)
Position in pixels.
Definition Body.cpp:83
float getWorldCenterX() const
World center of mass in pixels.
Definition Body.cpp:130
Fixture * newRectangleFixtureAt(float width, float height, float offsetX, float offsetY, float density=1.f, float friction=0.2f, float restitution=0.f)
Rectangle fixture with a local pixel-space offset from the body origin.
Definition Body.cpp:216
float getMass() const
Mass in kilograms (Box2D units).
Definition Body.cpp:128
void setActive(bool active)
Disables/enables the body and its fixtures.
Definition Body.cpp:190
World * getWorld()
Owning world / raw Box2D body.
Definition Body.h:96
void setLinearVelocity(float vx, float vy)
Linear velocity in pixels/s.
Definition Body.cpp:108
float getY() const
Definition Body.cpp:93
2D fixture: a shape attached to a Body with material + filter settings. Also carries a string tag use...
Definition Fixture.h:16
Box2D world wrapper (2D physics) with pixel-space coordinates. Handles stepping, gravity,...
Definition World.h:31