3#include "../../core/definitions.hpp"
4#include "../../core/node/components.hpp"
7#include <box2d/box2d.h>
8#include <box2d/collision.h>
10#include <box2d/types.h>
15struct std::hash<b2ShapeId>
17 std::size_t
operator()(
const b2ShapeId &
id)
const noexcept
20 std::size_t h = std::hash<uint32_t>{}(
id.index1);
21 h ^= std::hash<uint16_t>{}(
id.world0) + 0x9e3779b9 + (h << 6) + (h >> 2);
22 h ^= std::hash<uint16_t>{}(
id.generation) + 0x9e3779b9 + (h << 6) + (h >> 2);
27inline bool operator==(
const b2ShapeId &a,
const b2ShapeId &b)
noexcept
29 return a.index1 == b.index1 && a.world0 == b.world0 && a.generation == b.generation;
72 template <
class Archive>
73 void save(Archive &ar)
const
78 template <
class Archive>
113 friend bool b2callback(b2ShapeId shapeId,
void *ctx);
126 std::unordered_map<b2ShapeId, PhysicsBody *> bodyMap;
128 std::vector<b2ShapeId> currentHovered;
129 std::vector<b2ShapeId> lastHovered;
166 template <
class Archive>
169 ar(cereal::base_class<PhysicsBody>(
this));
172 template <
class Archive>
175 ar(cereal::base_class<PhysicsBody>(
this));
250 template <
class Archive>
253 ar(cereal::base_class<PhysicsBody>(
this), CEREAL_NVP(rotationLocked));
256 template <
class Archive>
259 ar(cereal::base_class<PhysicsBody>(
this), CEREAL_NVP(rotationLocked));
263 bool rotationLocked =
false;
303 template <
class Archive>
306 ar(cereal::base_class<PhysicsBody>(
this));
309 template <
class Archive>
312 ar(cereal::base_class<PhysicsBody>(
this));
Definition physics.hpp:289
KinematicBody()
Definition physics.cpp:327
void initCompute() override
Definition physics.cpp:317
void load(Archive &ar)
Definition physics.hpp:310
void physicsUpdate() override
Definition physics.cpp:334
void setLinearVelocity(Vector2 vel) const
Definition physics.cpp:358
void applyImpulse(Vector2 impulse) const
Definition physics.cpp:369
void applyForce(Vector2 force) const
Definition physics.cpp:363
Vector2 getLinearVelocity() const
Definition physics.cpp:374
void save(Archive &ar) const
Definition physics.hpp:304
Definition physics.hpp:58
void save(Archive &ar) const
Definition physics.hpp:73
b2BodyDef bodyDef
Definition physics.hpp:93
std::shared_ptr< Shape > shape
Definition physics.hpp:70
void exit() override
Definition physics.cpp:127
bool sensor
Definition physics.hpp:92
Signal< PhysicsBody * > collisionExit
Definition physics.hpp:66
Signal mouseExited
Definition physics.hpp:69
void initialize() override
Definition physics.cpp:134
Signal< PhysicsBody * > collisionEnter
Definition physics.hpp:65
virtual void initCompute()
Definition physics.cpp:142
b2ShapeId shapeId
Definition physics.hpp:95
virtual void physicsUpdate()=0
Signal mouseEntered
Definition physics.hpp:68
b2ShapeId getShapeId()
Definition physics.hpp:89
b2BodyId getBodyId()
Definition physics.hpp:88
Signal< PhysicsBody * > collisionHit
Definition physics.hpp:67
b2BodyId bodyId
Definition physics.hpp:94
void load(Archive &ar)
Definition physics.hpp:79
Transform storedTransform
Definition physics.hpp:97
Definition physics.hpp:108
PhysicsBody * findBodyFromShape(b2ShapeId id)
Definition physics.cpp:43
friend bool b2callback(b2ShapeId shapeId, void *ctx)
Definition physics.cpp:34
int subSteps
Definition physics.hpp:115
void deRegisterBody(PhysicsBody *body)
Definition physics.cpp:29
Vector2 gravity
Definition physics.hpp:120
void physicsUpdate(float timeStep)
Definition physics.cpp:47
void exit()
Definition physics.cpp:120
b2WorldDef worldDef
Definition physics.hpp:121
void registerBody(PhysicsBody *body)
Definition physics.cpp:24
b2WorldId worldId
Definition physics.hpp:122
Definition physics.hpp:231
Vector2 getLinearVelocity() const
Definition physics.cpp:240
RigidBody()
Definition physics.cpp:181
void lockRotation(bool value)
Definition physics.cpp:260
void initCompute() override
Definition physics.cpp:171
void save(Archive &ar) const
Definition physics.hpp:251
void applyForce(Vector2 force) const
Definition physics.cpp:229
void setPosition(Vector2 pos) const
Definition physics.cpp:212
void physicsUpdate() override
Definition physics.cpp:188
void setAngle(float angle) const
Definition physics.cpp:218
void load(Archive &ar)
Definition physics.hpp:257
void applyImpulse(Vector2 impulse) const
Definition physics.cpp:235
bool isOnGround()
Definition physics.cpp:245
void setLinearVelocity(Vector2 vel) const
Definition physics.cpp:224
Definition physics.hpp:155
void load(Archive &ar)
Definition physics.hpp:173
void physicsUpdate() override
Definition physics.cpp:295
void initCompute() override
Definition physics.cpp:278
void save(Archive &ar) const
Definition physics.hpp:167
void setPosition(Vector2 pos) const
Definition physics.cpp:301
void setAngle(float angle) const
Definition physics.cpp:307
StaticBody()
Definition physics.cpp:288
CEREAL_REGISTER_TYPE(RigidBody)
CEREAL_REGISTER_POLYMORPHIC_RELATION(Component, RigidBody)
bool operator==(const b2ShapeId &a, const b2ShapeId &b) noexcept
Definition physics.hpp:27
Definition components.hpp:21
Definition definitions.hpp:77
std::size_t operator()(const b2ShapeId &id) const noexcept
Definition physics.hpp:17