From ccf312d971386b1cc8feac92bbae101b896ddae4 Mon Sep 17 00:00:00 2001 From: EmoGarbage404 Date: Tue, 23 Apr 2024 20:50:45 -0400 Subject: [PATCH] add set map coordinates function --- .../SharedTransformSystem.Component.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Robust.Shared/GameObjects/Systems/SharedTransformSystem.Component.cs b/Robust.Shared/GameObjects/Systems/SharedTransformSystem.Component.cs index 29a69391852..fea8f8018c5 100644 --- a/Robust.Shared/GameObjects/Systems/SharedTransformSystem.Component.cs +++ b/Robust.Shared/GameObjects/Systems/SharedTransformSystem.Component.cs @@ -870,6 +870,37 @@ public MapCoordinates GetMapCoordinates(Entity entity) return GetMapCoordinates(entity.Comp); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetMapCoordinates(EntityUid entity, MapCoordinates coordinates) + { + var xform = XformQuery.GetComponent(entity); + SetMapCoordinates((entity, xform), coordinates); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void SetMapCoordinates(Entity entity, MapCoordinates coordinates) + { + var xform = entity.Comp; + + if (!xform._parent.IsValid() || xform.MapUid == null) + { + DebugTools.Assert("Parent is invalid while attempting to set MapCoordinates - did you try to move root node?"); + return; + } + + var mapUid = _map.GetMap(coordinates.MapId); + if (!_gridQuery.HasComponent(entity) && + _mapManager.TryFindGridAt(mapUid, coordinates.Position, out var targetGrid, out _)) + { + var invWorldMatrix = GetInvWorldMatrix(targetGrid); + SetCoordinates(entity, new EntityCoordinates(targetGrid, invWorldMatrix.Transform(coordinates.Position))); + } + else + { + SetCoordinates(entity, new EntityCoordinates(mapUid, coordinates.Position)); + } + } + [Pure] public (Vector2 WorldPosition, Angle WorldRotation) GetWorldPositionRotation(EntityUid uid) {