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, так как их отсутствие может негативно сказаться на производительности.
Последнее изменение 21 июня 2026 г.