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

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

Subpages