В очередной раз переделываю перемещения между локациями, хотелось бы сделать всё просто, но пока что-то не очень вырисовывается...
Данная тема - это скорее попытка разложить по полочкам собственные мысли.
Вначале опишу к чему пришел и что твердо себе представляю:
1. Локация - это всегда корень дерева объектов находящихся в ней.
Следствия:
а) не может быть вложенных локаций;
б) запрещено прикреплять локации к объектам.
Пояснения:
Было заманчиво сделать возможными в игре следующие конструкции:
- Концертный зал (локация), в нем сцена (вложенная локация). Сцена видна из зала, а переходя на сцену попадаешь в другую локацию.
- Поляна (локация), на ней домик (объект), внутри домика комната (локация). Находясь в домике продолжаешь оставаться на поляне, сам домик присутствует сразу в 2х локациях.
- Площадь (локация), на ней трамвай (объект), в трамвае салон (локация). Перемещаясь по локациям трамвай таскает за собой внутреннюю локацию со всеми пассажирами.
Но на практике все эти конструкции оказались сложными для восприятия в коде игры - интуитивно не понятно как такие локации влияют друг на друга. Желание сделать "всё как на самом деле" здесь в очередной раз сыграло злую шутку. Значительно проще когда локации независимы и в случае необходимости в игре отдельно прописываются их взаимодействия для каждого конкретного случая.
2. Локация должна иметь координаты вида Х.Y.Z + именованное подпространство
Следствия:
а) образуется обычное трёхмерное пространство;
б) можно легко определить что находится на западе или сверху от текущей локации.
Использование подпространств:
подпространства можно использовать для различных целей
- изменение масштаба (улицы в городе в одном пространстве, комнаты в домах в другом более мелком подпространстве);
- служебные пространства (например герой может блуждать в собственных мыслях).