> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ss14.art/llms.txt
> Use this file to discover all available pages before exploring further.

# Координаты сущностей

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