Координаты сущностей
EntityCoordinates — новый и модный способ представления позиции сущности относительно другой сущности. Они состоят из EntityUid, координаты X и координаты Y.
В отличие от GridCoordinates, эти координаты не привязаны к конкретной сетке: они могут использоваться для представления позиции сущностей, привязанных к карте, привязанных к конкретной сетке, привязанных к другой сущности или сущностей без родителя.
Из-за природы этих координат они могут становиться недействительными при определённых обстоятельствах, например когда EntityUid недействителен или когда его сущность удалена.
Подводные камни
-
Если у сущности нет родителя, её EntityCoordinates указывают на саму себя со смещением 0. Это случай сущностей карты или сущностей, у которых нет родительской сущности.
-
Когда сущность привязывается к новому родителю (например, когда вы заходите в шкафчик или пристёгиваетесь к стулу), ваши EntityCoordinates теперь становятся относительными к этой сущности. В случае шкафчиков, утилизационных труб и стульев это означает, что ваша новая относительная позиция — (0, 0), поскольку вы стоите в той же позиции, что и ваш родитель.
-
Если вы получите EntityCoordinates сущности сетки и затем вызовете для них метод
GetGridId(), вы всегда получитеGridId.Invalid. Это потому, что сетки НИКОГДА не могут иметь другую сетку в качестве предка, аGetGridIdвозвращает Id сетки, на которой находится родитель. В случае карт это всегдаGridId.Invalid. Это также происходит, когда вы пытаетесь получить сетку, на которой находится сущность без родителя или привязанная к карте. -
У сущностей в космосе нет родительской сетки, поэтому при вызове
GetGridId()они вернутGridId.Invalid. Если ваша логика должна работать как в космосе, так и на сетке, убедитесь, что вы не полагаетесь на то, чтоGetGridId()действителен. -
Большинство методов EntityCoordinates требуют передачи
IEntityManagerи/илиIMapManagerв качестве аргументов. Поскольку методы EntityCoordinates очень низкоуровневые, выполнение IoC-разрешений для них было бы очень затратным. Пожалуйста, старайтесь кэшировать эти зависимости вместо их разрешения каждый раз при работе с EntityCoordinates, так как в противном случае это может снизить производительность.