14 int newWorld(
float gravityX,
float gravityY)
override {
15 auto *ph = eve::ModuleManager::getInstance<Physics>(
"Physics");
17 auto *
w = ph->newWorld(gravityX, gravityY);
20 return static_cast<int>(worlds_.size()) - 1;
23 int worldCount()
override {
25 for (
auto *
w : worlds_)
30 bool worldGravity(
int id,
float *gx,
float *gy)
override {
33 if (gx) *gx =
w->getGravityX();
34 if (gy) *gy =
w->getGravityY();
38 bool rayCast(
int id,
float x1,
float y1,
float x2,
float y2, RayHitInfo *out)
override {
40 if (!
w || !out)
return false;
41 w->rayCast(x1, y1, x2, y2);
42 out->hit =
w->hasRayHit();
44 out->bodyId =
w->getRayHitBodyId();
45 out->x =
w->getRayHitX();
46 out->y =
w->getRayHitY();
47 out->normalX =
w->getRayHitNormalX();
48 out->normalY =
w->getRayHitNormalY();
49 out->fraction =
w->getRayHitFraction();
54 bool removeWorld(
int id)
override {
55 if (
id < 0 ||
static_cast<size_t>(
id) >= worlds_.size())
return false;
56 delete worlds_[
static_cast<size_t>(
id)];
57 worlds_[
static_cast<size_t>(
id)] =
nullptr;
62 World *world(
int id)
const {
63 if (
id < 0 ||
static_cast<size_t>(
id) >= worlds_.size())
return nullptr;
64 return worlds_[
static_cast<size_t>(
id)];
67 std::vector<World *> worlds_;
73 static PhysicsQueryImpl
impl;
2D physics world query surface (provided by the physics module).
void registerPhysicsCapabilities()