Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

(FixCollisions) Решение всех коллизий в сцене #4

Open
mchernigin opened this issue Apr 1, 2024 · 0 comments · May be fixed by #43
Open

(FixCollisions) Решение всех коллизий в сцене #4

mchernigin opened this issue Apr 1, 2024 · 0 comments · May be fixed by #43
Assignees

Comments

@mchernigin
Copy link
Member

mchernigin commented Apr 1, 2024

Эта функция находит и решает все коллизии нашего игрового мира. Делает она это, попарно перебирая все объекты.

Сначала пройдёмся в цикле по всем объектам сцены (scene). Это можно очень удобно сделать сделать с помощью цикла for-each, который появился в С++11: for (Object &obj1 : scene). Для каждого объекта проверим, что он подчиняется физическим законам нашего игрового мира. Для этого у него должен быть коллайдер (obj1.collider.enabled) - это некий прямоугольник, описывающий физические границы объекта. Кроме того, этот коллайдер должен быть динамическим (ColliderType::DYNAMIC), то есть объект может двигаться сам или под воздействием внешних сил, это можно проверить, используя метод of_type для obj.collider.

Если наш объект удовлетворяет условиям, описанным выше, точно так же переберём все объекты сцены в качестве второго объекта, коллизию с которым и будем проверять. Убедимся в следующих вещах:

  • obj1 != obj2. Объект не может столкнуться сам с собой.
  • У obj2 включён компонент коллайдер.
  • У коллайдера obj2 тип DYNAMIC или STATIC.

И вот теперь, мы точно можем быть уверены, что obj1 и obj2 могут устроить коллизию, которую нужно будет устранить. Для этого воспользуемся функцией CheckCollision, которая вернёт коллизию, и останется только вызвать SolveCollision, которая решит коллизию.

Зависит от #2 и #3

@mchernigin mchernigin converted this from a draft issue Apr 1, 2024
@vasthecat vasthecat moved this to Todo in MIT Game 2024 [1] Apr 11, 2024
@danilasar danilasar self-assigned this Apr 22, 2024
@nonseww nonseww moved this from Todo to In Progress in MIT Game 2024 [1] Apr 22, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
Status: In Progress
Development

Successfully merging a pull request may close this issue.

2 participants