载入中...
搜索中...
未找到
PhysicsCapabilities.cpp
浏览该文件的文档.
1#include "common/Capability.h"
3#include "physics/Physics.h"
4#include "physics/World.h"
5
6#include <string>
7#include <vector>
8
9namespace eve::physics {
10namespace {
11
12class PhysicsQueryImpl final : public eve::IPhysicsQuery {
13public:
14 int newWorld(float gravityX, float gravityY) override {
15 auto *ph = eve::ModuleManager::getInstance<Physics>("Physics");
16 if (!ph) return -1;
17 auto *w = ph->newWorld(gravityX, gravityY);
18 if (!w) return -1;
19 worlds_.push_back(w);
20 return static_cast<int>(worlds_.size()) - 1;
21 }
22
23 int worldCount() override {
24 int n = 0;
25 for (auto *w : worlds_)
26 if (w) ++n;
27 return n;
28 }
29
30 bool worldGravity(int id, float *gx, float *gy) override {
31 auto *w = world(id);
32 if (!w) return false;
33 if (gx) *gx = w->getGravityX();
34 if (gy) *gy = w->getGravityY();
35 return true;
36 }
37
38 bool rayCast(int id, float x1, float y1, float x2, float y2, RayHitInfo *out) override {
39 auto *w = world(id);
40 if (!w || !out) return false;
41 w->rayCast(x1, y1, x2, y2);
42 out->hit = w->hasRayHit();
43 if (out->hit) {
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();
50 }
51 return true;
52 }
53
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;
58 return true;
59 }
60
61private:
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)];
65 }
66
67 std::vector<World *> worlds_;
68};
69
70} // namespace
71
73 static PhysicsQueryImpl impl;
75}
76
77} // namespace eve::physics
void * impl
std::string id
glm::vec3 n
Definition Grass.cpp:64
int w
2D physics world query surface (provided by the physics module).
I * query()
Definition Capability.h:77
void registerPhysicsCapabilities()