Движение юнита по карте — вопрос выбора архитектуры?

Суть такова.

Есть класс Unit.

Есть класс World, который содержит массив юнитов и карту местности.


Нужно каким то образом реализовать движение юнита по карте.

Есть два метода решения:

1)Можно создать статический член — указатель на World для класса Unit, и двигать юнита вызовом Unit[u].Move(World.Map, new Point(x,y)). Таким образом, реализация Move() ложится на плечи Unit'a. Проблема в том, что на мой взгляд плохо давать юниту возможность управления целым миром.

2)Можно реализовать Move() в классе World, и делать вызов World.Move(Unit[u], new Point(x,y). Проблема в том, что методов может быть много (move,attack,follow, etc), и это является немного не логичным — реализовывать методы юнитов в классе Мира.

3)… возможно есть еще очевидные способы


как поступить?
  • Вопрос задан
  • 5055 просмотров
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Разработка игр
Тут есть несколько вариантов, зависит от внутренней реализации:
— в юнит передается колбек, который он должен дернуть по окончании движения. Колбек будет из мира, в нем будет валидироваться положение. ПО колбеку юнит миру ничего не сделает
— диспатчить событие завершения хода, на которое подписан мир
— перемещать юнит каждый апдейт из мира (или просто дергать его — готов ли он к проверке) и после перемещения валидировать. Тогда валидация будет на каждом шаге.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы