15 float _collisionPadding = 100.0f;
16 std::unordered_set<Group> _groupChecks;
17 float repulsion_strength = 100.0f;
19 glm::vec3 box_collider = glm::vec3(0.0f);
31 box_collider = boxCollider_size;
44 void update(
float deltaTime)
override
50 void collisionPhysics() {
51 glm::vec3 nodePosition = transform->bodyCenter;
52 glm::vec3 nodeHalfSize = 0.5f * transform->size;
54 for (Group group : _groupChecks) {
55 const auto& adjacentEntities = _manager->adjacentEntities(entity, group);
57 for (
Entity* other : adjacentEntities) {
61 for (
auto& i : main->getOutLinks()) {
62 if (i->getToNode() == other) {
69 if (areEntitiesLinked(entity, other)) {
76 glm::vec3 delta = nodePosition - otherPosition;
78 float dist = std::max(length(delta), 1e-4f);
79 glm::vec3 repulsion = repulsion_strength * normalize(delta) / (dist * dist);
81 transform->velocity += repulsion;
93 std::string GetComponentName()
override {
94 return "ColliderComponent";
97 void addCollisionGroup(Group g) {
98 _groupChecks.insert(g);
101 void removeCollisionGroup(Group g) {
102 _groupChecks.erase(g);