]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Replace Matrix3 with System.Numerics.Matrix3x2 (#27443)
authoreoineoineoin <github@eoinrul.es>
Sun, 2 Jun 2024 04:07:41 +0000 (05:07 +0100)
committerGitHub <noreply@github.com>
Sun, 2 Jun 2024 04:07:41 +0000 (14:07 +1000)
Replace Matrix3 with Matrix3x2

58 files changed:
Content.Client/Administration/UI/SpawnExplosion/ExplosionDebugOverlay.cs
Content.Client/Atmos/Overlays/AtmosDebugOverlay.cs
Content.Client/Atmos/Overlays/GasTileOverlay.cs
Content.Client/Clickable/ClickableComponent.cs
Content.Client/Decals/Overlays/DecalOverlay.cs
Content.Client/Decals/Overlays/DecalPlacementOverlay.cs
Content.Client/DoAfter/DoAfterOverlay.cs
Content.Client/Explosion/ExplosionOverlay.cs
Content.Client/Fluids/PuddleOverlay.cs
Content.Client/Maps/GridDraggingSystem.cs
Content.Client/NPC/PathfindingSystem.cs
Content.Client/NodeContainer/NodeVisualizationOverlay.cs
Content.Client/Overlays/EntityHealthBarOverlay.cs
Content.Client/Overlays/StencilOverlay.RestrictedRange.cs
Content.Client/Overlays/StencilOverlay.Weather.cs
Content.Client/Overlays/StencilOverlay.cs
Content.Client/Paper/UI/StampLabel.xaml.cs
Content.Client/Paper/UI/StampWidget.xaml.cs
Content.Client/Pinpointer/UI/NavMapControl.cs
Content.Client/Popups/PopupOverlay.cs
Content.Client/Shuttles/Systems/ShuttleSystem.EmergencyConsole.cs
Content.Client/Shuttles/UI/BaseShuttleControl.xaml.cs
Content.Client/Shuttles/UI/NavScreen.xaml.cs
Content.Client/Shuttles/UI/ShuttleDockControl.xaml.cs
Content.Client/Shuttles/UI/ShuttleMapControl.xaml.cs
Content.Client/Shuttles/UI/ShuttleNavControl.xaml.cs
Content.Client/StatusIcon/StatusIconOverlay.cs
Content.Client/Storage/Systems/StorageSystem.cs
Content.Client/UserInterface/Controls/DirectionIcon.cs
Content.Client/UserInterface/Controls/MapGridControl.xaml.cs
Content.Client/Viewport/ScalingViewport.cs
Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs
Content.Client/Weapons/Ranged/ItemStatus/BulletRender.cs
Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs
Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs
Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs
Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs
Content.Server/Explosion/EntitySystems/ExplosionSystem.Visuals.cs
Content.Server/Fluids/EntitySystems/AbsorbentSystem.cs
Content.Server/GameTicking/GameTicker.Spawning.cs
Content.Server/Medical/SuitSensors/SuitSensorSystem.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.Distance.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.Grid.cs
Content.Server/NPC/Pathfinding/PathfindingSystem.cs
Content.Server/Procedural/DungeonJob.PrefabDunGen.cs
Content.Server/Procedural/DungeonSystem.Rooms.cs
Content.Server/Radiation/Systems/RadiationSystem.GridCast.cs
Content.Server/Salvage/FultonSystem.cs
Content.Server/Shuttles/Events/FTLStartedEvent.cs
Content.Server/Shuttles/Systems/ArrivalsSystem.cs
Content.Server/Shuttles/Systems/DockingSystem.Shuttle.cs
Content.Server/Shuttles/Systems/ShuttleSystem.Impact.cs
Content.Server/Singularity/EntitySystems/GravityWellSystem.cs
Content.Server/Weapons/Ranged/Systems/GunSystem.cs
Content.Shared/Explosion/Components/ExplosionVisualsComponent.cs
Content.Shared/Item/SharedItemSystem.cs
Content.Shared/Maps/TurfSystem.cs
Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs

index eede3a6217f007d7d9e794968027fc73985f39d7..d60094ad8978e1275ddb34c201e8f07661a182b6 100644 (file)
@@ -25,7 +25,7 @@ public sealed class ExplosionDebugOverlay : Overlay
 
     public override OverlaySpace Space => OverlaySpace.WorldSpace | OverlaySpace.ScreenSpace;
 
-    public Matrix3 SpaceMatrix;
+    public Matrix3x2 SpaceMatrix;
     public MapId Map;
 
     private readonly Font _font;
@@ -78,7 +78,8 @@ public sealed class ExplosionDebugOverlay : Overlay
         if (SpaceTiles == null)
             return;
 
-        gridBounds = Matrix3.Invert(SpaceMatrix).TransformBox(args.WorldBounds);
+        Matrix3x2.Invert(SpaceMatrix, out var invSpace);
+        gridBounds = invSpace.TransformBox(args.WorldBounds);
 
         DrawText(handle, gridBounds, SpaceMatrix, SpaceTiles, SpaceTileSize);
     }
@@ -86,7 +87,7 @@ public sealed class ExplosionDebugOverlay : Overlay
     private void DrawText(
         DrawingHandleScreen handle,
         Box2 gridBounds,
-        Matrix3 transform,
+        Matrix3x2 transform,
         Dictionary<int, List<Vector2i>> tileSets,
         ushort tileSize)
     {
@@ -103,7 +104,7 @@ public sealed class ExplosionDebugOverlay : Overlay
                 if (!gridBounds.Contains(centre))
                     continue;
 
-                var worldCenter = transform.Transform(centre);
+                var worldCenter = Vector2.Transform(centre, transform);
 
                 var screenCenter = _eyeManager.WorldToScreen(worldCenter);
 
@@ -119,7 +120,7 @@ public sealed class ExplosionDebugOverlay : Overlay
         if (tileSets.TryGetValue(0, out var set))
         {
             var epicenter = set.First();
-            var worldCenter = transform.Transform((epicenter + Vector2Helpers.Half) * tileSize);
+            var worldCenter = Vector2.Transform((epicenter + Vector2Helpers.Half) * tileSize, transform);
             var screenCenter = _eyeManager.WorldToScreen(worldCenter) + new Vector2(-24, -24);
             var text = $"{Intensity[0]:F2}\nΣ={TotalIntensity:F1}\nΔ={Slope:F1}";
             handle.DrawString(_font, screenCenter, text);
@@ -148,11 +149,12 @@ public sealed class ExplosionDebugOverlay : Overlay
         if (SpaceTiles == null)
             return;
 
-        gridBounds = Matrix3.Invert(SpaceMatrix).TransformBox(args.WorldBounds).Enlarged(2);
+        Matrix3x2.Invert(SpaceMatrix, out var invSpace);
+        gridBounds = invSpace.TransformBox(args.WorldBounds).Enlarged(2);
         handle.SetTransform(SpaceMatrix);
 
         DrawTiles(handle, gridBounds, SpaceTiles, SpaceTileSize);
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
     }
 
     private void DrawTiles(
index 6dfbc326ecbf8939e5943e4491cfa40f88fcd22d..c85dbd20512c2356e0fb087a9620da8aeb985062 100644 (file)
@@ -66,7 +66,7 @@ public sealed class AtmosDebugOverlay : Overlay
             DrawData(msg, handle);
         }
 
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
     }
 
     private void DrawData(DebugMessage msg,
index f4dc274a4e546ce05d4c1848f2714f542fe958f6..17027525e54857e039140f2a8695318835475679 100644 (file)
@@ -190,7 +190,7 @@ namespace Content.Client.Atmos.Overlays
 
                     var (_, _, worldMatrix, invMatrix) = gridXform.GetWorldPositionRotationMatrixWithInv();
                     state.drawHandle.SetTransform(worldMatrix);
-                    var floatBounds = invMatrix.TransformBox(in state.WorldBounds).Enlarged(grid.TileSize);
+                    var floatBounds = invMatrix.TransformBox(state.WorldBounds).Enlarged(grid.TileSize);
                     var localBounds = new Box2i(
                         (int) MathF.Floor(floatBounds.Left),
                         (int) MathF.Floor(floatBounds.Bottom),
@@ -249,7 +249,7 @@ namespace Content.Client.Atmos.Overlays
                 });
 
             drawHandle.UseShader(null);
-            drawHandle.SetTransform(Matrix3.Identity);
+            drawHandle.SetTransform(Matrix3x2.Identity);
         }
 
         private void DrawMapOverlay(
index cfbd1a99d69b40eda42e3de022e5d1436a7ef455..6f75df46830eb9b29d8e33d7073a13277b3b6bc0 100644 (file)
@@ -38,9 +38,9 @@ namespace Content.Client.Clickable
             renderOrder = sprite.RenderOrder;
             var (spritePos, spriteRot) = transform.GetWorldPositionRotation(xformQuery);
             var spriteBB = sprite.CalculateRotatedBoundingBox(spritePos, spriteRot, eye.Rotation);
-            bottom = Matrix3.CreateRotation(eye.Rotation).TransformBox(spriteBB).Bottom;
+            bottom = Matrix3Helpers.CreateRotation(eye.Rotation).TransformBox(spriteBB).Bottom;
 
-            var invSpriteMatrix = Matrix3.Invert(sprite.GetLocalMatrix());
+            Matrix3x2.Invert(sprite.GetLocalMatrix(), out var invSpriteMatrix);
 
             // This should have been the rotation of the sprite relative to the screen, but this is not the case with no-rot or directional sprites.
             var relativeRotation = (spriteRot + eye.Rotation).Reduced().FlipPositive();
@@ -48,8 +48,8 @@ namespace Content.Client.Clickable
             Angle cardinalSnapping = sprite.SnapCardinals ? relativeRotation.GetCardinalDir().ToAngle() : Angle.Zero;
 
             // First we get `localPos`, the clicked location in the sprite-coordinate frame.
-            var entityXform = Matrix3.CreateInverseTransform(transform.WorldPosition, sprite.NoRotation ? -eye.Rotation : spriteRot - cardinalSnapping);
-            var localPos = invSpriteMatrix.Transform(entityXform.Transform(worldPos));
+            var entityXform = Matrix3Helpers.CreateInverseTransform(transform.WorldPosition, sprite.NoRotation ? -eye.Rotation : spriteRot - cardinalSnapping);
+            var localPos = Vector2.Transform(Vector2.Transform(worldPos, entityXform), invSpriteMatrix);
 
             // Check explicitly defined click-able bounds
             if (CheckDirBound(sprite, relativeRotation, localPos))
@@ -79,8 +79,8 @@ namespace Content.Client.Clickable
 
                 // convert to layer-local coordinates
                 layer.GetLayerDrawMatrix(dir, out var matrix);
-                var inverseMatrix = Matrix3.Invert(matrix);
-                var layerLocal = inverseMatrix.Transform(localPos);
+                Matrix3x2.Invert(matrix, out var inverseMatrix);
+                var layerLocal = Vector2.Transform(localPos, inverseMatrix);
 
                 // Convert to image coordinates
                 var layerImagePos = (Vector2i) (layerLocal * EyeManager.PixelsPerMeter * new Vector2(1, -1) + rsiState.Size / 2f);
index d9904ae80b5e31c6f35a5b7b7ceeb363fd7d332e..0de3301e5891cd0a8ff094412ba12f7911c0409e 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Shared.Decals;
 using Robust.Client.GameObjects;
 using Robust.Client.Graphics;
@@ -113,7 +114,7 @@ namespace Content.Client.Decals.Overlays
                     handle.DrawTexture(cache.Texture, decal.Coordinates, angle, decal.Color);
             }
 
-            handle.SetTransform(Matrix3.Identity);
+            handle.SetTransform(Matrix3x2.Identity);
         }
     }
 }
index be277448eda2df3e9fc681d756c9589c12b43287..845bd7c03d27a50af2c817b7e5414155e29cac65 100644 (file)
@@ -51,7 +51,7 @@ public sealed class DecalPlacementOverlay : Overlay
         var handle = args.WorldHandle;
         handle.SetTransform(worldMatrix);
 
-        var localPos = invMatrix.Transform(mousePos.Position);
+        var localPos = Vector2.Transform(mousePos.Position, invMatrix);
 
         if (snap)
         {
@@ -63,6 +63,6 @@ public sealed class DecalPlacementOverlay : Overlay
         var box = new Box2Rotated(aabb, rotation, localPos);
 
         handle.DrawTextureRect(_sprite.Frame0(decal.Sprite), box, color);
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
     }
 }
index 45981159f0692be99478abdec617fa1dd42e8d3f..dfbbf10891721d07d354bf2e69e04bcfded3c85a 100644 (file)
@@ -56,8 +56,8 @@ public sealed class DoAfterOverlay : Overlay
 
         // If you use the display UI scale then need to set max(1f, displayscale) because 0 is valid.
         const float scale = 1f;
-        var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale));
-        var rotationMatrix = Matrix3.CreateRotation(-rotation);
+        var scaleMatrix = Matrix3Helpers.CreateScale(new Vector2(scale, scale));
+        var rotationMatrix = Matrix3Helpers.CreateRotation(-rotation);
 
         var curTime = _timing.CurTime;
 
@@ -91,9 +91,9 @@ public sealed class DoAfterOverlay : Overlay
                 ? curTime - _meta.GetPauseTime(uid, meta)
                 : curTime;
 
-            var worldMatrix = Matrix3.CreateTranslation(worldPosition);
-            Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld);
-            Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty);
+            var worldMatrix = Matrix3Helpers.CreateTranslation(worldPosition);
+            var scaledWorld = Matrix3x2.Multiply(scaleMatrix, worldMatrix);
+            var matty = Matrix3x2.Multiply(rotationMatrix, scaledWorld);
             handle.SetTransform(matty);
 
             var offset = 0f;
@@ -151,7 +151,7 @@ public sealed class DoAfterOverlay : Overlay
         }
 
         handle.UseShader(null);
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
     }
 
     public Color GetProgressColor(float progress, float alpha = 1f)
index 2d8c15f1b9f9ff3340e2c7d8acacbd706a8a824c..8cf7447a5d8e61e9942aca54cc326f8d6d2d3b10 100644 (file)
@@ -48,7 +48,7 @@ public sealed class ExplosionOverlay : Overlay
             DrawExplosion(drawHandle, args.WorldBounds, visuals, index, xforms, textures);
         }
 
-        drawHandle.SetTransform(Matrix3.Identity);
+        drawHandle.SetTransform(Matrix3x2.Identity);
         drawHandle.UseShader(null);
     }
 
@@ -78,7 +78,8 @@ public sealed class ExplosionOverlay : Overlay
         if (visuals.SpaceTiles == null)
             return;
 
-        gridBounds = Matrix3.Invert(visuals.SpaceMatrix).TransformBox(worldBounds).Enlarged(2);
+        Matrix3x2.Invert(visuals.SpaceMatrix, out var invSpace);
+        gridBounds = invSpace.TransformBox(worldBounds).Enlarged(2);
         drawHandle.SetTransform(visuals.SpaceMatrix);
 
         DrawTiles(drawHandle, gridBounds, index, visuals.SpaceTiles, visuals, visuals.SpaceTileSize, textures);
index ac6661cfdd839ecb596751c0be1c466d2a9da8d3..a8c1d355105bf3dda9d85bae22d54eb2049682b7 100644 (file)
@@ -1,4 +1,5 @@
-using Content.Shared.FixedPoint;
+using System.Numerics;
+using Content.Shared.FixedPoint;
 using Robust.Client.Graphics;
 using Robust.Client.ResourceManagement;
 using Robust.Shared.Enums;
@@ -73,7 +74,7 @@ public sealed class PuddleOverlay : Overlay
             }
         }
 
-        drawHandle.SetTransform(Matrix3.Identity);
+        drawHandle.SetTransform(Matrix3x2.Identity);
     }
 
     private void DrawScreen(in OverlayDrawArgs args)
@@ -99,7 +100,7 @@ public sealed class PuddleOverlay : Overlay
                 if (!gridBounds.Contains(centre))
                     continue;
 
-                var screenCenter = _eyeManager.WorldToScreen(matrix.Transform(centre));
+                var screenCenter = _eyeManager.WorldToScreen(Vector2.Transform(centre, matrix));
 
                 drawHandle.DrawString(_font, screenCenter, debugOverlayData.CurrentVolume.ToString(), Color.White);
             }
index e82786847e31a9f895584618eba4637d83bf2b05..5e9250f0ce96d820237ac1cc135f4d18d5cdcc9d 100644 (file)
@@ -101,7 +101,7 @@ public sealed class GridDraggingSystem : SharedGridDraggingSystem
             if (!_mapManager.TryFindGridAt(mousePos, out var gridUid, out var grid))
                 return;
 
-            StartDragging(gridUid, Transform(gridUid).InvWorldMatrix.Transform(mousePos.Position));
+            StartDragging(gridUid, Vector2.Transform(mousePos.Position, Transform(gridUid).InvWorldMatrix));
         }
 
         if (!TryComp(_dragging, out TransformComponent? xform))
@@ -116,7 +116,7 @@ public sealed class GridDraggingSystem : SharedGridDraggingSystem
             return;
         }
 
-        var localToWorld = xform.WorldMatrix.Transform(_localPosition);
+        var localToWorld = Vector2.Transform(_localPosition, xform.WorldMatrix);
 
         if (localToWorld.EqualsApprox(mousePos.Position, 0.01f)) return;
 
index 709601a57b6ef8ac2ba524affa3e5455d9f677b9..d3ae5091528a8543d86cda129f98b42d84c608f1 100644 (file)
@@ -223,7 +223,7 @@ namespace Content.Client.NPC
 
                         foreach (var crumb in chunk.Value)
                         {
-                            var crumbMapPos = worldMatrix.Transform(_system.GetCoordinate(chunk.Key, crumb.Coordinates));
+                            var crumbMapPos = Vector2.Transform(_system.GetCoordinate(chunk.Key, crumb.Coordinates), worldMatrix);
                             var distance = (crumbMapPos - mouseWorldPos.Position).Length();
 
                             if (distance < nearestDistance)
@@ -292,7 +292,7 @@ namespace Content.Client.NPC
 
                 foreach (var poly in tile)
                 {
-                    if (poly.Box.Contains(invGridMatrix.Transform(mouseWorldPos.Position)))
+                    if (poly.Box.Contains(Vector2.Transform(mouseWorldPos.Position, invGridMatrix)))
                     {
                         nearest = poly;
                         break;
@@ -488,7 +488,7 @@ namespace Content.Client.NPC
                                         if (neighborMap.MapId != args.MapId)
                                             continue;
 
-                                        neighborPos = invMatrix.Transform(neighborMap.Position);
+                                        neighborPos = Vector2.Transform(neighborMap.Position, invMatrix);
                                     }
                                     else
                                     {
@@ -576,7 +576,7 @@ namespace Content.Client.NPC
                 }
             }
 
-            worldHandle.SetTransform(Matrix3.Identity);
+            worldHandle.SetTransform(Matrix3x2.Identity);
         }
     }
 }
index 691bcb41dbd2866ab19cd03b6c901052a54af792..4e8a4a10ca6d9c284f72d3d4e28600e0c12a694f 100644 (file)
@@ -199,7 +199,7 @@ namespace Content.Client.NodeContainer
             }
 
 
-            handle.SetTransform(Matrix3.Identity);
+            handle.SetTransform(Matrix3x2.Identity);
             _gridIndex.Clear();
         }
 
index 2b2ff14a22b42b8a2576177f589835d1f3e3eaaf..758bb562f92af3805cf15426aec70c6a0c45214b 100644 (file)
@@ -42,8 +42,8 @@ public sealed class EntityHealthBarOverlay : Overlay
         var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
 
         const float scale = 1f;
-        var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale));
-        var rotationMatrix = Matrix3.CreateRotation(-rotation);
+        var scaleMatrix = Matrix3Helpers.CreateScale(new Vector2(scale, scale));
+        var rotationMatrix = Matrix3Helpers.CreateRotation(-rotation);
 
         var query = _entManager.AllEntityQueryEnumerator<MobThresholdsComponent, MobStateComponent, DamageableComponent, SpriteComponent>();
         while (query.MoveNext(out var uid,
@@ -83,10 +83,10 @@ public sealed class EntityHealthBarOverlay : Overlay
                 continue;
 
             var worldPosition = _transform.GetWorldPosition(xform);
-            var worldMatrix = Matrix3.CreateTranslation(worldPosition);
+            var worldMatrix = Matrix3Helpers.CreateTranslation(worldPosition);
 
-            Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld);
-            Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty);
+            var scaledWorld = Matrix3x2.Multiply(scaleMatrix, worldMatrix);
+            var matty = Matrix3x2.Multiply(rotationMatrix, scaledWorld);
 
             handle.SetTransform(matty);
 
@@ -115,7 +115,7 @@ public sealed class EntityHealthBarOverlay : Overlay
             handle.DrawRect(pixelDarken, Black.WithAlpha(128));
         }
 
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
     }
 
     /// <summary>
index 9581fec37b747a385cb4c47e55878dd4722dc4c6..d29564caa932014df4839ecf78f3f6db2af05848 100644 (file)
@@ -7,7 +7,7 @@ namespace Content.Client.Overlays;
 
 public sealed partial class StencilOverlay
 {
-    private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeComponent rangeComp, Matrix3 invMatrix)
+    private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeComponent rangeComp, Matrix3x2 invMatrix)
     {
         var worldHandle = args.WorldHandle;
         var renderScale = args.Viewport.RenderScale.X;
@@ -16,7 +16,7 @@ public sealed partial class StencilOverlay
         var length = zoom.X;
         var bufferRange = MathF.Min(10f, rangeComp.Range);
 
-        var pixelCenter = invMatrix.Transform(rangeComp.Origin);
+        var pixelCenter = Vector2.Transform(rangeComp.Origin, invMatrix);
         // Something something offset?
         var vertical = args.Viewport.Size.Y;
 
@@ -44,7 +44,7 @@ public sealed partial class StencilOverlay
             worldHandle.DrawRect(localAABB, Color.White);
         }, Color.Transparent);
 
-        worldHandle.SetTransform(Matrix3.Identity);
+        worldHandle.SetTransform(Matrix3x2.Identity);
         worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
         worldHandle.DrawTextureRect(_blep!.Texture, worldBounds);
         var curTime = _timing.RealTime;
index 31bc88af45d1d0ab36208241ff6da6768e69dd21..29ed157a791213cc076a41c04d9bb8d0a8ca7206 100644 (file)
@@ -10,7 +10,7 @@ public sealed partial class StencilOverlay
 {
     private List<Entity<MapGridComponent>> _grids = new();
 
-    private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha, Matrix3 invMatrix)
+    private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha, Matrix3x2 invMatrix)
     {
         var worldHandle = args.WorldHandle;
         var mapId = args.MapId;
@@ -32,7 +32,7 @@ public sealed partial class StencilOverlay
             foreach (var grid in _grids)
             {
                 var matrix = _transform.GetWorldMatrix(grid, xformQuery);
-                Matrix3.Multiply(in matrix, in invMatrix, out var matty);
+                var matty =  Matrix3x2.Multiply(matrix, invMatrix);
                 worldHandle.SetTransform(matty);
 
                 foreach (var tile in grid.Comp.GetTilesIntersecting(worldAABB))
@@ -52,7 +52,7 @@ public sealed partial class StencilOverlay
 
         }, Color.Transparent);
 
-        worldHandle.SetTransform(Matrix3.Identity);
+        worldHandle.SetTransform(Matrix3x2.Identity);
         worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilMask").Instance());
         worldHandle.DrawTextureRect(_blep!.Texture, worldBounds);
         var curTime = _timing.RealTime;
@@ -62,7 +62,7 @@ public sealed partial class StencilOverlay
         worldHandle.UseShader(_protoManager.Index<ShaderPrototype>("StencilDraw").Instance());
         _parallax.DrawParallax(worldHandle, worldAABB, sprite, curTime, position, Vector2.Zero, modulate: (weatherProto.Color ?? Color.White).WithAlpha(alpha));
 
-        worldHandle.SetTransform(Matrix3.Identity);
+        worldHandle.SetTransform(Matrix3x2.Identity);
         worldHandle.UseShader(null);
     }
 }
index e475dca75947b55f4572197abc8e32d94f19ecde..78b1c4d2b15c7a4ac6f418893f905a1d3c8d930c 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Client.Parallax;
 using Content.Client.Weather;
 using Content.Shared.Salvage;
@@ -72,6 +73,6 @@ public sealed partial class StencilOverlay : Overlay
         }
 
         args.WorldHandle.UseShader(null);
-        args.WorldHandle.SetTransform(Matrix3.Identity);
+        args.WorldHandle.SetTransform(Matrix3x2.Identity);
     }
 }
index 6a8eb5f98f9413f4c51e0490fee751df7eb68b52..be6d52baeaf935c47960bced5d4aff24645b80a7 100644 (file)
@@ -50,7 +50,7 @@ public sealed partial class StampLabel : Label
         base.Draw(handle);
 
         // Restore a sane transform+shader
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
         handle.UseShader(null);
     }
 }
index a04508aeba34c4240dd955953128a05761feed08..487e0732b46a8b7b1f36528a079f88d1e5d1dd76 100644 (file)
@@ -53,7 +53,7 @@ public sealed partial class StampWidget : PanelContainer
         base.Draw(handle);
 
         // Restore a sane transform+shader
-        handle.SetTransform(Matrix3.Identity);
+        handle.SetTransform(Matrix3x2.Identity);
         handle.UseShader(null);
     }
 }
index f4d2f8e2fb8c729c7e9a467a1f08f8f0b8b341e0..3c99a1881817670457ac62eee73949d2052256c3 100644 (file)
@@ -218,7 +218,7 @@ public partial class NavMapControl : MapGridControl
 
             // Convert to a world position
             var unscaledPosition = (localPosition - MidPointVector) / MinimapScale;
-            var worldPosition = _transformSystem.GetWorldMatrix(_xform).Transform(new Vector2(unscaledPosition.X, -unscaledPosition.Y) + offset);
+            var worldPosition = Vector2.Transform(new Vector2(unscaledPosition.X, -unscaledPosition.Y) + offset, _transformSystem.GetWorldMatrix(_xform));
 
             // Find closest tracked entity in range
             var closestEntity = NetEntity.Invalid;
@@ -401,7 +401,7 @@ public partial class NavMapControl : MapGridControl
 
                 if (mapPos.MapId != MapId.Nullspace)
                 {
-                    var position = _transformSystem.GetInvWorldMatrix(_xform).Transform(mapPos.Position) - offset;
+                    var position = Vector2.Transform(mapPos.Position, _transformSystem.GetInvWorldMatrix(_xform)) - offset;
                     position = ScalePosition(new Vector2(position.X, -position.Y));
 
                     handle.DrawCircle(position, float.Sqrt(MinimapScale) * 2f, value.Color);
@@ -422,7 +422,7 @@ public partial class NavMapControl : MapGridControl
 
             if (mapPos.MapId != MapId.Nullspace)
             {
-                var position = _transformSystem.GetInvWorldMatrix(_xform).Transform(mapPos.Position) - offset;
+                var position = Vector2.Transform(mapPos.Position, _transformSystem.GetInvWorldMatrix(_xform)) - offset;
                 position = ScalePosition(new Vector2(position.X, -position.Y));
 
                 var scalingCoefficient = MinmapScaleModifier * float.Sqrt(MinimapScale);
index fb6bb3bf565e2d5c0791701a46d7de25a1f363bc..77eeb611f517941edca2e9aab6f02a5c8ddb0c70 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Shared.Examine;
 using Robust.Client.Graphics;
 using Robust.Client.Player;
@@ -55,7 +56,7 @@ public sealed class PopupOverlay : Overlay
         if (args.ViewportControl == null)
             return;
 
-        args.DrawingHandle.SetTransform(Matrix3.Identity);
+        args.DrawingHandle.SetTransform(Matrix3x2.Identity);
         args.DrawingHandle.UseShader(_shader);
         var scale = _configManager.GetCVar(CVars.DisplayUIScale);
 
@@ -90,7 +91,7 @@ public sealed class PopupOverlay : Overlay
                     e => e == popup.InitialPos.EntityId || e == ourEntity, entMan: _entManager))
                 continue;
 
-            var pos = matrix.Transform(mapPos.Position);
+            var pos = Vector2.Transform(mapPos.Position, matrix);
             _controller.DrawPopup(popup, worldHandle, pos, scale);
         }
     }
index 7086fd05411f10d218bc9b785c9fb3b0388039bb..d5154a87befeedc10f4ff21cdbaa29b67d63a3a7 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Shared.Shuttles.Events;
 using Content.Shared.Shuttles.Systems;
 using Robust.Client.Graphics;
@@ -75,6 +76,6 @@ public sealed class EmergencyShuttleOverlay : Overlay
 
         args.WorldHandle.SetTransform(xform.WorldMatrix);
         args.WorldHandle.DrawRect(Position.Value, Color.Red.WithAlpha(100));
-        args.WorldHandle.SetTransform(Matrix3.Identity);
+        args.WorldHandle.SetTransform(Matrix3x2.Identity);
     }
 }
index 8774c1dfb5ce6c84eb56034ffcc2f4527efacdd5..b50d8fa6b21867c5bc530665f2d1396b534f67f5 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Client.UserInterface.Controls;
 using Content.Shared.Shuttles.Components;
 using Robust.Client.AutoGenerated;
@@ -115,7 +116,7 @@ public partial class BaseShuttleControl : MapGridControl
         }
     }
 
-    protected void DrawGrid(DrawingHandleScreen handle, Matrix3 matrix, Entity<MapGridComponent> grid, Color color, float alpha = 0.01f)
+    protected void DrawGrid(DrawingHandleScreen handle, Matrix3x2 matrix, Entity<MapGridComponent> grid, Color color, float alpha = 0.01f)
     {
         var rator = Maps.GetAllTilesEnumerator(grid.Owner, grid.Comp);
         var minimapScale = MinimapScale;
@@ -289,7 +290,7 @@ public partial class BaseShuttleControl : MapGridControl
 
         public float MinimapScale;
         public Vector2 MidPoint;
-        public Matrix3 Matrix;
+        public Matrix3x2 Matrix;
 
         public List<Vector2> Vertices;
         public Vector2[] ScaledVertices;
@@ -297,7 +298,7 @@ public partial class BaseShuttleControl : MapGridControl
         public void Execute(int index)
         {
             var vert = Vertices[index];
-            var adjustedVert = Matrix.Transform(vert);
+            var adjustedVert = Vector2.Transform(vert, Matrix);
             adjustedVert = adjustedVert with { Y = -adjustedVert.Y };
 
             var scaledVert = ScalePosition(adjustedVert, MinimapScale, MidPoint);
index b7b757ea48342c1f81cf39be3fd91a342c7d62af..91d95aaa0427274ab3dd51ca57cd805dde9b6398 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Shared.Shuttles.BUIStates;
 using Robust.Client.AutoGenerated;
 using Robust.Client.Graphics;
@@ -68,7 +69,7 @@ public sealed partial class NavScreen : BoxContainer
         }
 
         var (_, worldRot, worldMatrix) = _xformSystem.GetWorldPositionRotationMatrix(gridXform);
-        var worldPos = worldMatrix.Transform(gridBody.LocalCenter);
+        var worldPos = Vector2.Transform(gridBody.LocalCenter, worldMatrix);
 
         // Get the positive reduced angle.
         var displayRot = -worldRot.Reduced();
index f03c440295250df32bebe45f10407cd3f23ed05a..31f0eecad7956d9398348f143b93f8f97fd8cbf2 100644 (file)
@@ -108,10 +108,10 @@ public sealed partial class ShuttleDockControl : BaseShuttleControl
         var gridNent = EntManager.GetNetEntity(GridEntity);
         var mapPos = _xformSystem.ToMapCoordinates(_coordinates.Value);
         var ourGridMatrix = _xformSystem.GetWorldMatrix(gridXform.Owner);
-        var dockMatrix = Matrix3.CreateTransform(_coordinates.Value.Position, Angle.Zero);
-        Matrix3.Multiply(dockMatrix, ourGridMatrix, out var offsetMatrix);
+        var dockMatrix = Matrix3Helpers.CreateTransform(_coordinates.Value.Position, Angle.Zero);
+        var worldFromDock = Matrix3x2.Multiply(dockMatrix, ourGridMatrix);
 
-        offsetMatrix = offsetMatrix.Invert();
+        Matrix3x2.Invert(worldFromDock, out var offsetMatrix);
 
         // Draw nearby grids
         var controlBounds = PixelSizeBox;
@@ -137,7 +137,7 @@ public sealed partial class ShuttleDockControl : BaseShuttleControl
                 continue;
 
             var gridMatrix = _xformSystem.GetWorldMatrix(grid.Owner);
-            Matrix3.Multiply(in gridMatrix, in offsetMatrix, out var matty);
+            var matty = Matrix3x2.Multiply(gridMatrix, offsetMatrix);
             var color = _shuttles.GetIFFColor(grid.Owner, grid.Owner == GridEntity, component: iffComp);
 
             DrawGrid(handle, matty, grid, color);
@@ -151,23 +151,23 @@ public sealed partial class ShuttleDockControl : BaseShuttleControl
                 if (ViewedDock == dock.Entity)
                     continue;
 
-                var position = matty.Transform(dock.Coordinates.Position);
+                var position = Vector2.Transform(dock.Coordinates.Position, matty);
 
-                var otherDockRotation = Matrix3.CreateRotation(dock.Angle);
+                var otherDockRotation = Matrix3Helpers.CreateRotation(dock.Angle);
                 var scaledPos = ScalePosition(position with {Y = -position.Y});
 
                 if (!controlBounds.Contains(scaledPos.Floored()))
                     continue;
 
                 // Draw the dock's collision
-                var collisionBL = matty.Transform(dock.Coordinates.Position +
-                                                  otherDockRotation.Transform(new Vector2(-0.2f, -0.7f)));
-                var collisionBR = matty.Transform(dock.Coordinates.Position +
-                                                  otherDockRotation.Transform(new Vector2(0.2f, -0.7f)));
-                var collisionTR = matty.Transform(dock.Coordinates.Position +
-                                                  otherDockRotation.Transform(new Vector2(0.2f, -0.5f)));
-                var collisionTL = matty.Transform(dock.Coordinates.Position +
-                                                  otherDockRotation.Transform(new Vector2(-0.2f, -0.5f)));
+                var collisionBL = Vector2.Transform(dock.Coordinates.Position +
+                                                  Vector2.Transform(new Vector2(-0.2f, -0.7f), otherDockRotation), matty);
+                var collisionBR = Vector2.Transform(dock.Coordinates.Position +
+                                                  Vector2.Transform(new Vector2(0.2f, -0.7f), otherDockRotation), matty);
+                var collisionTR = Vector2.Transform(dock.Coordinates.Position +
+                                                  Vector2.Transform(new Vector2(0.2f, -0.5f), otherDockRotation), matty);
+                var collisionTL = Vector2.Transform(dock.Coordinates.Position +
+                                                  Vector2.Transform(new Vector2(-0.2f, -0.5f), otherDockRotation), matty);
 
                 var verts = new[]
                 {
@@ -195,10 +195,10 @@ public sealed partial class ShuttleDockControl : BaseShuttleControl
                 handle.DrawPrimitives(DrawPrimitiveTopology.LineList, verts, otherDockConnection);
 
                 // Draw the dock itself
-                var dockBL = matty.Transform(dock.Coordinates.Position + new Vector2(-0.5f, -0.5f));
-                var dockBR = matty.Transform(dock.Coordinates.Position + new Vector2(0.5f, -0.5f));
-                var dockTR = matty.Transform(dock.Coordinates.Position + new Vector2(0.5f, 0.5f));
-                var dockTL = matty.Transform(dock.Coordinates.Position + new Vector2(-0.5f, 0.5f));
+                var dockBL = Vector2.Transform(dock.Coordinates.Position + new Vector2(-0.5f, -0.5f), matty);
+                var dockBR = Vector2.Transform(dock.Coordinates.Position + new Vector2(0.5f, -0.5f), matty);
+                var dockTR = Vector2.Transform(dock.Coordinates.Position + new Vector2(0.5f, 0.5f), matty);
+                var dockTL = Vector2.Transform(dock.Coordinates.Position + new Vector2(-0.5f, 0.5f), matty);
 
                 verts = new[]
                 {
@@ -308,14 +308,14 @@ public sealed partial class ShuttleDockControl : BaseShuttleControl
         // Draw the dock's collision
         var invertedPosition = Vector2.Zero;
         invertedPosition.Y = -invertedPosition.Y;
-        var rotation = Matrix3.CreateRotation(-_angle.Value + MathF.PI);
+        var rotation = Matrix3Helpers.CreateRotation(-_angle.Value + MathF.PI);
         var ourDockConnection = new UIBox2(
-            ScalePosition(rotation.Transform(new Vector2(-0.2f, -0.7f))),
-            ScalePosition(rotation.Transform(new Vector2(0.2f, -0.5f))));
+            ScalePosition(Vector2.Transform(new Vector2(-0.2f, -0.7f), rotation)),
+            ScalePosition(Vector2.Transform(new Vector2(0.2f, -0.5f), rotation)));
 
         var ourDock = new UIBox2(
-            ScalePosition(rotation.Transform(new Vector2(-0.5f, 0.5f))),
-            ScalePosition(rotation.Transform(new Vector2(0.5f, -0.5f))));
+            ScalePosition(Vector2.Transform(new Vector2(-0.5f, 0.5f), rotation)),
+            ScalePosition(Vector2.Transform(new Vector2(0.5f, -0.5f), rotation)));
 
         var dockColor = Color.Magenta;
         var connectionColor = Color.Pink;
index 2f35a8dffd7e899cdac135f2f6d42cdd026d45f9..8bd4a338cb0caa5babf81b972c5fa1571cdb30f9 100644 (file)
@@ -114,7 +114,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
                 var beaconsOnly = EntManager.TryGetComponent(mapUid, out FTLDestinationComponent? destComp) &&
                                   destComp.BeaconsOnly;
 
-                var mapTransform = Matrix3.CreateInverseTransform(Offset, Angle.Zero);
+                var mapTransform = Matrix3Helpers.CreateInverseTransform(Offset, Angle.Zero);
 
                 if (beaconsOnly && TryGetBeacon(_beacons, mapTransform, args.RelativePixelPosition, PixelRect, out var foundBeacon, out _))
                 {
@@ -203,7 +203,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
     /// </summary>
     /// <param name="mapObjects"></param>
     /// <returns></returns>
-    private List<IMapObject> GetViewportMapObjects(Matrix3 matty, List<IMapObject> mapObjects)
+    private List<IMapObject> GetViewportMapObjects(Matrix3x2 matty, List<IMapObject> mapObjects)
     {
         var results = new List<IMapObject>();
         var enlargement = new Vector2i((int) (16 * UIScale), (int) (16 * UIScale));
@@ -217,7 +217,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
 
             var mapCoords = _shuttles.GetMapCoordinates(mapObj);
 
-            var relativePos = matty.Transform(mapCoords.Position);
+            var relativePos = Vector2.Transform(mapCoords.Position, matty);
             relativePos = relativePos with { Y = -relativePos.Y };
             var uiPosition = ScalePosition(relativePos);
 
@@ -250,7 +250,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
         DrawParallax(handle);
 
         var viewedMapUid = _mapManager.GetMapEntityId(ViewingMap);
-        var matty = Matrix3.CreateInverseTransform(Offset, Angle.Zero);
+        var matty = Matrix3Helpers.CreateInverseTransform(Offset, Angle.Zero);
         var realTime = _timing.RealTime;
         var viewBox = new Box2(Offset - WorldRangeVector, Offset + WorldRangeVector);
         var viewportObjects = GetViewportMapObjects(matty, mapObjects);
@@ -267,7 +267,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
                 var (gridPos, gridRot) = _xformSystem.GetWorldPositionRotation(shuttleXform);
                 gridPos = Maps.GetGridPosition((gridUid, gridPhysics), gridPos, gridRot);
 
-                var gridRelativePos = matty.Transform(gridPos);
+                var gridRelativePos = Vector2.Transform(gridPos, matty);
                 gridRelativePos = gridRelativePos with { Y = -gridRelativePos.Y };
                 var gridUiPos = ScalePosition(gridRelativePos);
 
@@ -296,7 +296,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
                 continue;
             }
 
-            var adjustedPos = matty.Transform(mapCoords.Position);
+            var adjustedPos = Vector2.Transform(mapCoords.Position, matty);
             var localPos = ScalePosition(adjustedPos with { Y = -adjustedPos.Y});
             handle.DrawCircle(localPos, exclusion.Range * MinimapScale, exclusionColor.WithAlpha(0.05f));
             handle.DrawCircle(localPos, exclusion.Range * MinimapScale, exclusionColor, filled: false);
@@ -319,7 +319,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
 
             foreach (var (beaconName, coords, mapO) in GetBeacons(viewportObjects, matty, controlLocalBounds))
             {
-                var localPos = matty.Transform(coords.Position);
+                var localPos = Vector2.Transform(coords.Position, matty);
                 localPos = localPos with { Y = -localPos.Y };
                 var beaconUiPos = ScalePosition(localPos);
                 var mapObject = GetMapObject(localPos, Angle.Zero, scale: 0.75f, scalePosition: true);
@@ -360,7 +360,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
             var (gridPos, gridRot) = _xformSystem.GetWorldPositionRotation(grid.Owner);
             gridPos = Maps.GetGridPosition((grid, gridPhysics), gridPos, gridRot);
 
-            var gridRelativePos = matty.Transform(gridPos);
+            var gridRelativePos = Vector2.Transform(gridPos, matty);
             gridRelativePos = gridRelativePos with { Y = -gridRelativePos.Y };
             var gridUiPos = ScalePosition(gridRelativePos);
 
@@ -439,7 +439,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
 
                     var color = ftlFree ? Color.LimeGreen : Color.Magenta;
 
-                    var gridRelativePos = matty.Transform(gridPos);
+                    var gridRelativePos = Vector2.Transform(gridPos, matty);
                     gridRelativePos = gridRelativePos with { Y = -gridRelativePos.Y };
                     var gridUiPos = ScalePosition(gridRelativePos);
 
@@ -512,7 +512,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
     /// <summary>
     /// Returns the beacons that intersect the viewport.
     /// </summary>
-    private IEnumerable<(string Beacon, MapCoordinates Coordinates, IMapObject MapObject)> GetBeacons(List<IMapObject> mapObjs, Matrix3 mapTransform, UIBox2i area)
+    private IEnumerable<(string Beacon, MapCoordinates Coordinates, IMapObject MapObject)> GetBeacons(List<IMapObject> mapObjs, Matrix3x2 mapTransform, UIBox2i area)
     {
         foreach (var mapO in mapObjs)
         {
@@ -520,7 +520,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
                 continue;
 
             var beaconCoords = EntManager.GetCoordinates(beacon.Coordinates).ToMap(EntManager, _xformSystem);
-            var position = mapTransform.Transform(beaconCoords.Position);
+            var position = Vector2.Transform(beaconCoords.Position, mapTransform);
             var localPos = ScalePosition(position with {Y = -position.Y});
 
             // If beacon not on screen then ignore it.
@@ -557,7 +557,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
         return mapObj;
     }
 
-    private bool TryGetBeacon(IEnumerable<IMapObject> mapObjects, Matrix3 mapTransform, Vector2 mousePos, UIBox2i area, out ShuttleBeaconObject foundBeacon, out Vector2 foundLocalPos)
+    private bool TryGetBeacon(IEnumerable<IMapObject> mapObjects, Matrix3x2 mapTransform, Vector2 mousePos, UIBox2i area, out ShuttleBeaconObject foundBeacon, out Vector2 foundLocalPos)
     {
         // In pixels
         const float BeaconSnapRange = 32f;
@@ -579,7 +579,7 @@ public sealed partial class ShuttleMapControl : BaseShuttleControl
             if (!_shuttles.CanFTLBeacon(beaconObj.Coordinates))
                 continue;
 
-            var position = mapTransform.Transform(beaconCoords.Position);
+            var position = Vector2.Transform(beaconCoords.Position, mapTransform);
             var localPos = ScalePosition(position with {Y = -position.Y});
 
             // If beacon not on screen then ignore it.
index 00ee6890b28f18db83844792f86642a703a75cca..0b8720add217172bf646d307845a9c298f29ac38 100644 (file)
@@ -137,10 +137,10 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
 
         var mapPos = _transform.ToMapCoordinates(_coordinates.Value);
         var offset = _coordinates.Value.Position;
-        var posMatrix = Matrix3.CreateTransform(offset, _rotation.Value);
+        var posMatrix = Matrix3Helpers.CreateTransform(offset, _rotation.Value);
         var (_, ourEntRot, ourEntMatrix) = _transform.GetWorldPositionRotationMatrix(_coordinates.Value.EntityId);
-        Matrix3.Multiply(posMatrix, ourEntMatrix, out var ourWorldMatrix);
-        var ourWorldMatrixInvert = ourWorldMatrix.Invert();
+        var ourWorldMatrix = Matrix3x2.Multiply(posMatrix, ourEntMatrix);
+        Matrix3x2.Invert(ourWorldMatrix, out var ourWorldMatrixInvert);
 
         // Draw our grid in detail
         var ourGridId = xform.GridUid;
@@ -148,7 +148,7 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
             fixturesQuery.HasComponent(ourGridId.Value))
         {
             var ourGridMatrix = _transform.GetWorldMatrix(ourGridId.Value);
-            Matrix3.Multiply(in ourGridMatrix, in ourWorldMatrixInvert, out var matrix);
+            var matrix = Matrix3x2.Multiply(ourGridMatrix, ourWorldMatrixInvert);
             var color = _shuttles.GetIFFColor(ourGridId.Value, self: true);
 
             DrawGrid(handle, matrix, (ourGridId.Value, ourGrid), color);
@@ -194,7 +194,7 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
                 continue;
 
             var gridMatrix = _transform.GetWorldMatrix(gUid);
-            Matrix3.Multiply(in gridMatrix, in ourWorldMatrixInvert, out var matty);
+            var matty = Matrix3x2.Multiply(gridMatrix, ourWorldMatrixInvert);
             var color = _shuttles.GetIFFColor(grid, self: false, iff);
 
             // Others default:
@@ -207,7 +207,7 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
             {
                 var gridBounds = grid.Comp.LocalAABB;
 
-                var gridCentre = matty.Transform(gridBody.LocalCenter);
+                var gridCentre = Vector2.Transform(gridBody.LocalCenter, matty);
                 gridCentre.Y = -gridCentre.Y;
                 var distance = gridCentre.Length();
                 var labelText = Loc.GetString("shuttle-console-iff-label", ("name", labelName),
@@ -242,7 +242,7 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
         }
     }
 
-    private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3 matrix)
+    private void DrawDocks(DrawingHandleScreen handle, EntityUid uid, Matrix3x2 matrix)
     {
         if (!ShowDocks)
             return;
@@ -255,7 +255,7 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
             foreach (var state in docks)
             {
                 var position = state.Coordinates.Position;
-                var uiPosition = matrix.Transform(position);
+                var uiPosition = Vector2.Transform(position, matrix);
 
                 if (uiPosition.Length() > (WorldRange * 2f) - DockScale)
                     continue;
@@ -264,10 +264,10 @@ public sealed partial class ShuttleNavControl : BaseShuttleControl
 
                 var verts = new[]
                 {
-                    matrix.Transform(position + new Vector2(-DockScale, -DockScale)),
-                    matrix.Transform(position + new Vector2(DockScale, -DockScale)),
-                    matrix.Transform(position + new Vector2(DockScale, DockScale)),
-                    matrix.Transform(position + new Vector2(-DockScale, DockScale)),
+                    Vector2.Transform(position + new Vector2(-DockScale, -DockScale), matrix),
+                    Vector2.Transform(position + new Vector2(DockScale, -DockScale), matrix),
+                    Vector2.Transform(position + new Vector2(DockScale, DockScale), matrix),
+                    Vector2.Transform(position + new Vector2(-DockScale, DockScale), matrix),
                 };
 
                 for (var i = 0; i < verts.Length; i++)
index 56107cbc02570259acc0040cb593df2a87abc8d9..f1473bda7a2ab3bdd1f3392376c3f7534c93764e 100644 (file)
@@ -39,8 +39,8 @@ public sealed class StatusIconOverlay : Overlay
         var eyeRot = args.Viewport.Eye?.Rotation ?? default;
 
         var xformQuery = _entity.GetEntityQuery<TransformComponent>();
-        var scaleMatrix = Matrix3.CreateScale(new Vector2(1, 1));
-        var rotationMatrix = Matrix3.CreateRotation(-eyeRot);
+        var scaleMatrix = Matrix3Helpers.CreateScale(new Vector2(1, 1));
+        var rotationMatrix = Matrix3Helpers.CreateRotation(-eyeRot);
 
         var query = _entity.AllEntityQueryEnumerator<StatusIconComponent, SpriteComponent, TransformComponent, MetaDataComponent>();
         while (query.MoveNext(out var uid, out var comp, out var sprite, out var xform, out var meta))
@@ -59,9 +59,9 @@ public sealed class StatusIconOverlay : Overlay
             if (icons.Count == 0)
                 continue;
 
-            var worldMatrix = Matrix3.CreateTranslation(worldPos);
-            Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld);
-            Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty);
+            var worldMatrix = Matrix3Helpers.CreateTranslation(worldPos);
+            var scaledWorld = Matrix3x2.Multiply(scaleMatrix, worldMatrix);
+            var matty = Matrix3x2.Multiply(rotationMatrix, scaledWorld);
             handle.SetTransform(matty);
 
             var countL = 0;
index 8bf0dcd98129df76c1b21570acbb264912f08b63..b80a855f98655c2f7c16cdd907f38fac780137fd 100644 (file)
@@ -1,4 +1,5 @@
-using System.Linq;
+using System.Linq;
+using System.Numerics;
 using Content.Client.Animations;
 using Content.Shared.Hands;
 using Content.Shared.Storage;
@@ -149,7 +150,7 @@ public sealed class StorageSystem : SharedStorageSystem
         }
 
         var finalMapPos = finalCoords.ToMapPos(EntityManager, TransformSystem);
-        var finalPos = TransformSystem.GetInvWorldMatrix(initialCoords.EntityId).Transform(finalMapPos);
+        var finalPos = Vector2.Transform(finalMapPos, TransformSystem.GetInvWorldMatrix(initialCoords.EntityId));
 
         _entityPickupAnimation.AnimateEntityPickup(item, initialCoords, finalPos, initialAngle);
     }
index a6cc428091acdb5a57af9e4c4c7883ec8b090a19..c8fd63b43c9e471adce51fd876ab6c186d4b6a1a 100644 (file)
@@ -65,7 +65,7 @@ public sealed class DirectionIcon : TextureRect
         if (_rotation != null)
         {
             var offset = (-_rotation.Value).RotateVec(Size * UIScale / 2) - Size * UIScale / 2;
-            handle.SetTransform(Matrix3.CreateTransform(GlobalPixelPosition - offset, -_rotation.Value));
+            handle.SetTransform(Matrix3Helpers.CreateTransform(GlobalPixelPosition - offset, -_rotation.Value));
         }
 
         base.Draw(handle);
index f6b0929f3b23bdc5b74f26cda26947da5928b0f7..a10155f3e8ce807bd1ce467361bf6528da116bc5 100644 (file)
@@ -169,7 +169,7 @@ public partial class MapGridControl : LayoutContainer
         var inversePos = (value - MidPointVector) / MinimapScale;
 
         inversePos = inversePos with { Y = -inversePos.Y };
-        inversePos = Matrix3.CreateTransform(Offset, Angle.Zero).Transform(inversePos);
+        inversePos = Vector2.Transform(inversePos, Matrix3Helpers.CreateTransform(Offset, Angle.Zero));
         return inversePos;
     }
 
index 1fa8f17161e21f02e05fd5bfc2afe832d5a47d2a..ccd9636d776413af1b3ed2ec02d33f847b102f34 100644 (file)
@@ -277,8 +277,8 @@ namespace Content.Client.Viewport
 
             EnsureViewportCreated();
 
-            var matrix = Matrix3.Invert(GetLocalToScreenMatrix());
-            coords = matrix.Transform(coords);
+            Matrix3x2.Invert(GetLocalToScreenMatrix(), out var matrix);
+            coords = Vector2.Transform(coords, matrix);
 
             return _viewport!.LocalToWorld(coords);
         }
@@ -291,8 +291,8 @@ namespace Content.Client.Viewport
 
             EnsureViewportCreated();
 
-            var matrix = Matrix3.Invert(GetLocalToScreenMatrix());
-            coords = matrix.Transform(coords);
+            Matrix3x2.Invert(GetLocalToScreenMatrix(), out var matrix);
+            coords = Vector2.Transform(coords, matrix);
 
             var ev = new PixelToMapEvent(coords, this, _viewport!);
             _entityManager.EventBus.RaiseEvent(EventSource.Local, ref ev);
@@ -311,16 +311,16 @@ namespace Content.Client.Viewport
 
             var matrix = GetLocalToScreenMatrix();
 
-            return matrix.Transform(vpLocal);
+            return Vector2.Transform(vpLocal, matrix);
         }
 
-        public Matrix3 GetWorldToScreenMatrix()
+        public Matrix3x2 GetWorldToScreenMatrix()
         {
             EnsureViewportCreated();
             return _viewport!.GetWorldToLocalMatrix() * GetLocalToScreenMatrix();
         }
 
-        public Matrix3 GetLocalToScreenMatrix()
+        public Matrix3x2 GetLocalToScreenMatrix()
         {
             EnsureViewportCreated();
 
@@ -329,9 +329,9 @@ namespace Content.Client.Viewport
 
             if (scaleFactor.X == 0 || scaleFactor.Y == 0)
                 // Basically a nonsense scenario, at least make sure to return something that can be inverted.
-                return Matrix3.Identity;
+                return Matrix3x2.Identity;
 
-            return Matrix3.CreateTransform(GlobalPixelPosition + drawBox.TopLeft, 0, scaleFactor);
+            return Matrix3Helpers.CreateTransform(GlobalPixelPosition + drawBox.TopLeft, 0, scaleFactor);
         }
 
         private void EnsureViewportCreated()
index baac42d1937cc619f8731e5a0b3775c062e50fc2..3e1a4b1906d531efbc5a6a6cbf9f4a1d5ae5eb2d 100644 (file)
@@ -81,7 +81,7 @@ public sealed partial class MeleeWeaponSystem
             case WeaponArcAnimation.None:
                 var (mapPos, mapRot) = TransformSystem.GetWorldPositionRotation(userXform);
                 var worldPos = mapPos + (mapRot - userXform.LocalRotation).RotateVec(localPos);
-                var newLocalPos = TransformSystem.GetInvWorldMatrix(xform.ParentUid).Transform(worldPos);
+                var newLocalPos = Vector2.Transform(worldPos, TransformSystem.GetInvWorldMatrix(xform.ParentUid));
                 TransformSystem.SetLocalPositionNoLerp(animationUid, newLocalPos, xform);
                 if (arcComponent.Fadeout)
                     _animation.Play(animationUid, GetFadeAnimation(sprite, 0f, 0.15f), FadeAnimationKey);
index 8aea5d7ee627c6b72b58f3a05b03060127ef6bac..e6cb596b94411bfa770183bf39f6b2ba094a727f 100644 (file)
@@ -1,4 +1,4 @@
-using System.Numerics;
+using System.Numerics;
 using Content.Client.Resources;
 using Robust.Client.Graphics;
 using Robust.Client.ResourceManagement;
@@ -53,7 +53,7 @@ public abstract class BaseBulletRenderer : Control
     {
         // Scale rendering in this control by UIScale.
         var currentTransform = handle.GetTransform();
-        handle.SetTransform(Matrix3.CreateScale(new Vector2(UIScale)) * currentTransform);
+        handle.SetTransform(Matrix3Helpers.CreateScale(new Vector2(UIScale)) * currentTransform);
 
         var countPerRow = CountPerRow(Size.X);
 
index 7db1f513f7c41aa44d278f1185c5d8d2b65f75a5..2ddcc052d85a9926f476db7e5791252d3d577233 100644 (file)
@@ -14,7 +14,7 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood
     public MapGridComponent Grid;
     private bool _needToTransform = false;
 
-    private Matrix3 _matrix = Matrix3.Identity;
+    private Matrix3x2 _matrix = Matrix3x2.Identity;
     private Vector2 _offset;
 
     // Tiles which neighbor an exploding tile, but have not yet had the explosion spread to them due to an
@@ -44,7 +44,7 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood
         int typeIndex,
         Dictionary<Vector2i, NeighborFlag> edgeTiles,
         EntityUid? referenceGrid,
-        Matrix3 spaceMatrix,
+        Matrix3x2 spaceMatrix,
         Angle spaceAngle)
     {
         Grid = grid;
@@ -72,9 +72,10 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood
         var transform = IoCManager.Resolve<IEntityManager>().GetComponent<TransformComponent>(Grid.Owner);
         var size = (float) Grid.TileSize;
 
-        _matrix.R0C2 = size / 2;
-        _matrix.R1C2 = size / 2;
-        _matrix *= transform.WorldMatrix * Matrix3.Invert(spaceMatrix);
+        _matrix.M31 = size / 2;
+        _matrix.M32 = size / 2;
+        Matrix3x2.Invert(spaceMatrix, out var invSpace);
+        _matrix *= transform.WorldMatrix * invSpace;
         var relativeAngle = transform.WorldRotation - spaceAngle;
         _offset = relativeAngle.RotateVec(new Vector2(size / 4, size / 4));
     }
@@ -228,7 +229,7 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood
             return;
         }
 
-        var center = _matrix.Transform(tile);
+        var center = Vector2.Transform(tile, _matrix);
         SpaceJump.Add(new((int) MathF.Floor(center.X + _offset.X), (int) MathF.Floor(center.Y + _offset.Y)));
         SpaceJump.Add(new((int) MathF.Floor(center.X - _offset.Y), (int) MathF.Floor(center.Y + _offset.X)));
         SpaceJump.Add(new((int) MathF.Floor(center.X - _offset.X), (int) MathF.Floor(center.Y - _offset.Y)));
index 719a2eca797086088e58bfe29de5c7ef71a146ef..556fe7c1415824390fe1817cfb337720b90d2c41 100644 (file)
@@ -60,7 +60,7 @@ public sealed partial class ExplosionSystem : EntitySystem
     {
         Dictionary<Vector2i, BlockedSpaceTile> transformedEdges = new();
 
-        var targetMatrix = Matrix3.Identity;
+        var targetMatrix = Matrix3x2.Identity;
         Angle targetAngle = new();
         var tileSize = DefaultTileSize;
         var maxDistanceSq = (int) (maxDistance * maxDistance);
@@ -75,9 +75,9 @@ public sealed partial class ExplosionSystem : EntitySystem
             tileSize = targetGrid.TileSize;
         }
 
-        var offsetMatrix = Matrix3.Identity;
-        offsetMatrix.R0C2 = tileSize / 2f;
-        offsetMatrix.R1C2 = tileSize / 2f;
+        var offsetMatrix = Matrix3x2.Identity;
+        offsetMatrix.M31 = tileSize / 2f;
+        offsetMatrix.M32 = tileSize / 2f;
 
         // Here we can end up with a triple nested for loop:
         // foreach other grid
@@ -106,7 +106,7 @@ public sealed partial class ExplosionSystem : EntitySystem
             var xform = xforms.GetComponent(gridToTransform);
             var  (_, gridWorldRotation, gridWorldMatrix, invGridWorldMatrid) = xform.GetWorldPositionRotationMatrixWithInv(xforms);
 
-            var localEpicentre = (Vector2i) invGridWorldMatrid.Transform(epicentre.Position);
+            var localEpicentre = (Vector2i) Vector2.Transform(epicentre.Position, invGridWorldMatrid);
             var matrix = offsetMatrix * gridWorldMatrix * targetMatrix;
             var angle = gridWorldRotation - targetAngle;
 
@@ -119,7 +119,7 @@ public sealed partial class ExplosionSystem : EntitySystem
                 if (delta.X * delta.X + delta.Y * delta.Y > maxDistanceSq) // no Vector2.Length???
                     continue;
 
-                var center = matrix.Transform(tile);
+                var center = Vector2.Transform(tile, matrix);
 
                 if ((dir & NeighborFlag.Cardinal) == 0)
                 {
index bce3dc21c233fada850ea5a8e9394018aa1cf24b..c30a9ce30064c6df3ca0df1543520edc97ec7a9d 100644 (file)
@@ -298,8 +298,8 @@ public sealed partial class ExplosionSystem
     ///     Same as <see cref="ExplodeTile"/>, but for SPAAAAAAACE.
     /// </summary>
     internal void ExplodeSpace(BroadphaseComponent lookup,
-        Matrix3 spaceMatrix,
-        Matrix3 invSpaceMatrix,
+        Matrix3x2 spaceMatrix,
+        Matrix3x2 invSpaceMatrix,
         Vector2i tile,
         float throwForce,
         DamageSpecifier damage,
@@ -341,7 +341,7 @@ public sealed partial class ExplosionSystem
     }
 
     private static bool SpaceQueryCallback(
-        ref (List<(EntityUid, TransformComponent)> List, HashSet<EntityUid> Processed, Matrix3 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery<TransformComponent> XformQuery, Box2 GridBox, SharedTransformSystem System) state,
+        ref (List<(EntityUid, TransformComponent)> List, HashSet<EntityUid> Processed, Matrix3x2 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery<TransformComponent> XformQuery, Box2 GridBox, SharedTransformSystem System) state,
         in EntityUid uid)
     {
         if (state.Processed.Contains(uid))
@@ -352,7 +352,7 @@ public sealed partial class ExplosionSystem
         if (xform.ParentUid == state.LookupOwner)
         {
             // parented directly to the map, use local position
-            if (state.GridBox.Contains(state.InvSpaceMatrix.Transform(xform.LocalPosition)))
+            if (state.GridBox.Contains(Vector2.Transform(xform.LocalPosition, state.InvSpaceMatrix)))
                 state.List.Add((uid, xform));
 
             return true;
@@ -360,14 +360,14 @@ public sealed partial class ExplosionSystem
 
         // finally check if it intersects our tile
         var wpos = state.System.GetWorldPosition(xform);
-        if (state.GridBox.Contains(state.InvSpaceMatrix.Transform(wpos)))
+        if (state.GridBox.Contains(Vector2.Transform(wpos, state.InvSpaceMatrix)))
             state.List.Add((uid, xform));
 
         return true;
     }
 
     private static bool SpaceQueryCallback(
-        ref (List<(EntityUid, TransformComponent)> List, HashSet<EntityUid> Processed, Matrix3 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery<TransformComponent> XformQuery, Box2 GridBox, SharedTransformSystem System) state,
+        ref (List<(EntityUid, TransformComponent)> List, HashSet<EntityUid> Processed, Matrix3x2 InvSpaceMatrix, EntityUid LookupOwner, EntityQuery<TransformComponent> XformQuery, Box2 GridBox, SharedTransformSystem System) state,
         in FixtureProxy proxy)
     {
         var uid = proxy.Entity;
@@ -585,12 +585,12 @@ sealed class Explosion
     /// <summary>
     ///     The matrix that defines the reference frame for the explosion in space.
     /// </summary>
-    private readonly Matrix3 _spaceMatrix;
+    private readonly Matrix3x2 _spaceMatrix;
 
     /// <summary>
     ///     Inverse of <see cref="_spaceMatrix"/>
     /// </summary>
-    private readonly Matrix3 _invSpaceMatrix;
+    private readonly Matrix3x2 _invSpaceMatrix;
 
     /// <summary>
     ///     Have all the tiles on all the grids been processed?
@@ -656,7 +656,7 @@ sealed class Explosion
         List<ExplosionGridTileFlood> gridData,
         List<float> tileSetIntensity,
         MapCoordinates epicenter,
-        Matrix3 spaceMatrix,
+        Matrix3x2 spaceMatrix,
         int area,
         float tileBreakScale,
         int maxTileBreak,
@@ -695,7 +695,7 @@ sealed class Explosion
             });
 
             _spaceMatrix = spaceMatrix;
-            _invSpaceMatrix = Matrix3.Invert(spaceMatrix);
+            Matrix3x2.Invert(spaceMatrix, out _invSpaceMatrix);
         }
 
         foreach (var grid in gridData)
index a42dd1108313c9d209b0f3e83da64918c1149421..8b4c0e14c5faa7637bab926e82bf9c58d80d9a4e 100644 (file)
@@ -26,7 +26,7 @@ public sealed partial class ExplosionSystem : EntitySystem
     /// <param name="maxIntensity">The maximum intensity that the explosion can have at any given tile. This
     /// effectively caps the damage that this explosion can do.</param>
     /// <returns>A list of tile-sets and a list of intensity values which describe the explosion.</returns>
-    private (int, List<float>, ExplosionSpaceTileFlood?, Dictionary<EntityUid, ExplosionGridTileFlood>, Matrix3)? GetExplosionTiles(
+    private (int, List<float>, ExplosionSpaceTileFlood?, Dictionary<EntityUid, ExplosionGridTileFlood>, Matrix3x2)? GetExplosionTiles(
         MapCoordinates epicenter,
         string typeID,
         float totalIntensity,
@@ -84,7 +84,7 @@ public sealed partial class ExplosionSystem : EntitySystem
         Dictionary<EntityUid, HashSet<Vector2i>>? previousGridJump;
 
         // variables for transforming between grid and space-coordinates
-        var spaceMatrix = Matrix3.Identity;
+        var spaceMatrix = Matrix3x2.Identity;
         var spaceAngle = Angle.Zero;
         if (referenceGrid != null)
         {
index d332531502c75802ca5d3373a7a81fe6f3e22a25..5db8b55bf96520b04501546a7a647fe0d9c7391e 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Shared.Explosion;
 using Content.Shared.Explosion.Components;
 using Robust.Server.GameObjects;
@@ -35,7 +36,7 @@ public sealed partial class ExplosionSystem : EntitySystem
     /// <summary>
     ///     Constructor for the shared <see cref="ExplosionEvent"/> using the server-exclusive explosion classes.
     /// </summary>
-    private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, string prototype, Matrix3 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable<ExplosionGridTileFlood> gridData, List<float> iterationIntensity)
+    private EntityUid CreateExplosionVisualEntity(MapCoordinates epicenter, string prototype, Matrix3x2 spaceMatrix, ExplosionSpaceTileFlood? spaceData, IEnumerable<ExplosionGridTileFlood> gridData, List<float> iterationIntensity)
     {
         var explosionEntity = Spawn(null, MapCoordinates.Nullspace);
         var comp = AddComp<ExplosionVisualsComponent>(explosionEntity);
index a3717fd94ce8dbf1a8e834548799a5ae3fbaf25f..52afdcf8b4910461c081c48162388582bf1a204e 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Server.Chemistry.Containers.EntitySystems;
 using Content.Server.Popups;
 using Content.Shared.Chemistry.Components;
@@ -317,7 +318,7 @@ public sealed class AbsorbentSystem : SharedAbsorbentSystem
 
         var userXform = Transform(user);
         var targetPos = _transform.GetWorldPosition(target);
-        var localPos = _transform.GetInvWorldMatrix(userXform).Transform(targetPos);
+        var localPos = Vector2.Transform(targetPos, _transform.GetInvWorldMatrix(userXform));
         localPos = userXform.LocalRotation.RotateVec(localPos);
 
         _melee.DoLunge(user, used, Angle.Zero, localPos, null, false);
index 22d368e57bde82d6f6ad3c65e414365d817d482c..5e2ef0c02c0ff246a048c70e73fdb2723319ad90 100644 (file)
@@ -417,7 +417,7 @@ namespace Content.Server.GameTicking
                 {
                     var gridXform = Transform(gridUid);
 
-                    return new EntityCoordinates(gridUid, gridXform.InvWorldMatrix.Transform(toMap.Position));
+                    return new EntityCoordinates(gridUid, Vector2.Transform(toMap.Position, gridXform.InvWorldMatrix));
                 }
 
                 return spawn;
index 38e88f6e1ed8796249cedb373f6e65b8591a9dfb..1acbf292f03a6a77539ed547f3ef570f7c836401 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Server.Access.Systems;
 using Content.Server.DeviceNetwork;
 using Content.Server.DeviceNetwork.Components;
@@ -366,8 +367,8 @@ public sealed class SuitSensorSystem : EntitySystem
                 if (transform.GridUid != null)
                 {
                     coordinates = new EntityCoordinates(transform.GridUid.Value,
-                        _transform.GetInvWorldMatrix(xformQuery.GetComponent(transform.GridUid.Value), xformQuery)
-                        .Transform(_transform.GetWorldPosition(transform, xformQuery)));
+                        Vector2.Transform(_transform.GetWorldPosition(transform, xformQuery),
+                            _transform.GetInvWorldMatrix(xformQuery.GetComponent(transform.GridUid.Value), xformQuery)));
                 }
                 else if (transform.MapUid != null)
                 {
index 5daf38c4209e29a58b854070e75c15069cb9204e..b986ed5259e9f5a35e11b6dcdab89147d997813c 100644 (file)
@@ -36,7 +36,7 @@ public sealed partial class PathfindingSystem
                 return Vector2.Zero;
             }
 
-            endPos = startXform.InvWorldMatrix.Transform(endXform.WorldMatrix.Transform(endPos));
+            endPos = Vector2.Transform(Vector2.Transform(endPos, endXform.WorldMatrix), startXform.InvWorldMatrix);
         }
 
         // TODO: Numerics when we changeover.
index 52f7db77ed65bf718396f9f1c7ee63b1b4ac2725..f4af65c617412a6061c3855006d5f9e27d20d715 100644 (file)
@@ -395,7 +395,7 @@ public sealed partial class PathfindingSystem
 
     private Vector2i GetOrigin(EntityCoordinates coordinates, EntityUid gridUid)
     {
-        var localPos = _transform.GetInvWorldMatrix(gridUid).Transform(coordinates.ToMapPos(EntityManager, _transform));
+        var localPos = Vector2.Transform(coordinates.ToMapPos(EntityManager, _transform), _transform.GetInvWorldMatrix(gridUid));
         return new Vector2i((int) Math.Floor(localPos.X / ChunkSize), (int) Math.Floor(localPos.Y / ChunkSize));
     }
 
index 3672ad047b44a5fd56c7986e1dac2ee23fda4af9..b2958f0ccb551dcbc2e36e47ef14d06f411483ba 100644 (file)
@@ -405,7 +405,7 @@ namespace Content.Server.NPC.Pathfinding
                 return null;
             }
 
-            var localPos = xform.InvWorldMatrix.Transform(coordinates.ToMapPos(EntityManager, _transform));
+            var localPos = Vector2.Transform(coordinates.ToMapPos(EntityManager, _transform), xform.InvWorldMatrix);
             var origin = GetOrigin(localPos);
 
             if (!TryGetChunk(origin, comp, out var chunk))
index 1783a567904749dfef92cc72423f10d2a854c41a..a19f7e4701d9f9f80312b4b0c99ac7e21e88ff36 100644 (file)
@@ -19,7 +19,7 @@ public sealed partial class DungeonJob
         var gen = _prototype.Index<DungeonPresetPrototype>(preset);
 
         var dungeonRotation = _dungeon.GetDungeonRotation(seed);
-        var dungeonTransform = Matrix3.CreateTransform(_position, dungeonRotation);
+        var dungeonTransform = Matrix3Helpers.CreateTransform(_position, dungeonRotation);
         var roomPackProtos = new Dictionary<Vector2i, List<DungeonRoomPackPrototype>>();
 
         foreach (var pack in _prototype.EnumeratePrototypes<DungeonRoomPackPrototype>())
@@ -69,7 +69,7 @@ public sealed partial class DungeonJob
         var dungeon = new Dungeon();
         var availablePacks = new List<DungeonRoomPackPrototype>();
         var chosenPacks = new DungeonRoomPackPrototype?[gen.RoomPacks.Count];
-        var packTransforms = new Matrix3[gen.RoomPacks.Count];
+        var packTransforms = new Matrix3x2[gen.RoomPacks.Count];
         var packRotations = new Angle[gen.RoomPacks.Count];
 
         // Actually pick the room packs and rooms
@@ -97,7 +97,7 @@ public sealed partial class DungeonJob
 
             // Iterate every pack
             random.Shuffle(availablePacks);
-            Matrix3 packTransform = default!;
+            Matrix3x2 packTransform = default!;
             var found = false;
             DungeonRoomPackPrototype pack = default!;
 
@@ -128,7 +128,7 @@ public sealed partial class DungeonJob
                     var aRotation = dir.AsDir().ToAngle();
 
                     // Use this pack
-                    packTransform = Matrix3.CreateTransform(bounds.Center, aRotation);
+                    packTransform = Matrix3Helpers.CreateTransform(bounds.Center, aRotation);
                     packRotations[i] = aRotation;
                     pack = aPack;
                     break;
@@ -168,7 +168,7 @@ public sealed partial class DungeonJob
             {
                 var roomDimensions = new Vector2i(roomSize.Width, roomSize.Height);
                 Angle roomRotation = Angle.Zero;
-                Matrix3 matty;
+                Matrix3x2 matty;
 
                 if (!roomProtos.TryGetValue(roomDimensions, out var roomProto))
                 {
@@ -176,13 +176,13 @@ public sealed partial class DungeonJob
 
                     if (!roomProtos.TryGetValue(roomDimensions, out roomProto))
                     {
-                        Matrix3.Multiply(packTransform, dungeonTransform, out matty);
+                        matty = Matrix3x2.Multiply(packTransform, dungeonTransform);
 
                         for (var x = roomSize.Left; x < roomSize.Right; x++)
                         {
                             for (var y = roomSize.Bottom; y < roomSize.Top; y++)
                             {
-                                var index = matty.Transform(new Vector2(x, y) + grid.TileSizeHalfVector - packCenter).Floored();
+                                var index = Vector2.Transform(new Vector2(x, y) + grid.TileSizeHalfVector - packCenter, matty).Floored();
                                 tiles.Add((index, new Tile(_tileDefManager["FloorPlanetGrass"].TileId)));
                             }
                         }
@@ -209,10 +209,10 @@ public sealed partial class DungeonJob
                     roomRotation += Math.PI;
                 }
 
-                var roomTransform = Matrix3.CreateTransform(roomSize.Center - packCenter, roomRotation);
+                var roomTransform = Matrix3Helpers.CreateTransform(roomSize.Center - packCenter, roomRotation);
 
-                Matrix3.Multiply(roomTransform, packTransform, out matty);
-                Matrix3.Multiply(matty, dungeonTransform, out var dungeonMatty);
+                matty = Matrix3x2.Multiply(roomTransform, packTransform);
+                var dungeonMatty = Matrix3x2.Multiply(matty, dungeonTransform);
 
                 // The expensive bit yippy.
                 _dungeon.SpawnRoom(gridUid, grid, dungeonMatty, room);
@@ -232,7 +232,7 @@ public sealed partial class DungeonJob
                             continue;
                         }
 
-                        var tilePos = dungeonMatty.Transform(new Vector2i(x + room.Offset.X, y + room.Offset.Y) + tileOffset);
+                        var tilePos = Vector2.Transform(new Vector2i(x + room.Offset.X, y + room.Offset.Y) + tileOffset, dungeonMatty);
                         exterior.Add(tilePos.Floored());
                     }
                 }
@@ -244,7 +244,7 @@ public sealed partial class DungeonJob
                     for (var y = 0; y < room.Size.Y; y++)
                     {
                         var roomTile = new Vector2i(x + room.Offset.X, y + room.Offset.Y);
-                        var tilePos = dungeonMatty.Transform(roomTile + tileOffset);
+                        var tilePos = Vector2.Transform(roomTile + tileOffset, dungeonMatty);
                         var tileIndex = tilePos.Floored();
                         roomTiles.Add(tileIndex);
 
index 03bcc2b4b13de9852f45c2ff33d5975fc24d841e..5b4de34906e6cbab57172d9644238dacc997bf09 100644 (file)
@@ -67,7 +67,7 @@ public sealed partial class DungeonSystem
         bool clearExisting = false,
         bool rotation = false)
     {
-        var originTransform = Matrix3.CreateTranslation(origin);
+        var originTransform = Matrix3Helpers.CreateTranslation(origin.X, origin.Y);
         var roomRotation = Angle.Zero;
 
         if (rotation)
@@ -75,8 +75,8 @@ public sealed partial class DungeonSystem
             roomRotation = GetRoomRotation(room, random);
         }
 
-        var roomTransform = Matrix3.CreateTransform((Vector2) room.Size / 2f, roomRotation);
-        Matrix3.Multiply(roomTransform, originTransform, out var finalTransform);
+        var roomTransform = Matrix3Helpers.CreateTransform((Vector2) room.Size / 2f, roomRotation);
+        var finalTransform = Matrix3x2.Multiply(roomTransform, originTransform);
 
         SpawnRoom(gridUid, grid, finalTransform, room, clearExisting);
     }
@@ -101,7 +101,7 @@ public sealed partial class DungeonSystem
     public void SpawnRoom(
         EntityUid gridUid,
         MapGridComponent grid,
-        Matrix3 roomTransform,
+        Matrix3x2 roomTransform,
         DungeonRoomPrototype room,
         bool clearExisting = false)
     {
@@ -116,7 +116,7 @@ public sealed partial class DungeonSystem
         // go BRRNNTTT on existing stuff
         if (clearExisting)
         {
-            var gridBounds = new Box2(roomTransform.Transform(Vector2.Zero), roomTransform.Transform(room.Size));
+            var gridBounds = new Box2(Vector2.Transform(Vector2.Zero, roomTransform), Vector2.Transform(room.Size, roomTransform));
             _entitySet.Clear();
             // Polygon skin moment
             gridBounds = gridBounds.Enlarged(-0.05f);
@@ -148,7 +148,7 @@ public sealed partial class DungeonSystem
                 var indices = new Vector2i(x + room.Offset.X, y + room.Offset.Y);
                 var tileRef = _maps.GetTileRef(templateMapUid, templateGrid, indices);
 
-                var tilePos = roomTransform.Transform(indices + tileOffset);
+                var tilePos = Vector2.Transform(indices + tileOffset, roomTransform);
                 var rounded = tilePos.Floored();
                 _tiles.Add((rounded, tileRef.Tile));
             }
@@ -164,7 +164,7 @@ public sealed partial class DungeonSystem
         foreach (var templateEnt in _lookup.GetEntitiesIntersecting(templateMapUid, bounds, LookupFlags.Uncontained))
         {
             var templateXform = _xformQuery.GetComponent(templateEnt);
-            var childPos = roomTransform.Transform(templateXform.LocalPosition - roomCenter);
+            var childPos = Vector2.Transform(templateXform.LocalPosition - roomCenter, roomTransform);
             var childRot = templateXform.LocalRotation + finalRoomRotation;
             var protoId = _metaQuery.GetComponent(templateEnt).EntityPrototype?.ID;
 
@@ -192,7 +192,7 @@ public sealed partial class DungeonSystem
                 // Offset by 0.5 because decals are offset from bot-left corner
                 // So we convert it to center of tile then convert it back again after transform.
                 // Do these shenanigans because 32x32 decals assume as they are centered on bottom-left of tiles.
-                var position = roomTransform.Transform(decal.Coordinates + Vector2Helpers.Half - roomCenter);
+                var position = Vector2.Transform(decal.Coordinates + Vector2Helpers.Half - roomCenter, roomTransform);
                 position -= Vector2Helpers.Half;
 
                 // Umm uhh I love decals so uhhhh idk what to do about this
index b8193c4d2f397229d61380630b5934efd3cb9693..ccee7cf227cbc15ba33fb669dfd048c6525c015f 100644 (file)
@@ -195,11 +195,11 @@ public partial class RadiationSystem
 
         Vector2 srcLocal = sourceTrs.ParentUid == grid.Owner
             ? sourceTrs.LocalPosition
-            : gridTrs.InvLocalMatrix.Transform(ray.Source);
+            : Vector2.Transform(ray.Source, gridTrs.InvLocalMatrix);
 
         Vector2 dstLocal = destTrs.ParentUid == grid.Owner
             ? destTrs.LocalPosition
-            : gridTrs.InvLocalMatrix.Transform(ray.Destination);
+            : Vector2.Transform(ray.Destination, gridTrs.InvLocalMatrix);
 
         Vector2i sourceGrid = new(
             (int) Math.Floor(srcLocal.X / grid.Comp.TileSize),
index ad998e535989313938c4fea8f34a156a61aa26c1..e2c0a6b4c5e2243020ab79336a1b47fab8664dc0 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Shared.Salvage.Fulton;
 using Robust.Shared.Containers;
 using Robust.Shared.Map;
@@ -61,8 +62,9 @@ public sealed class FultonSystem : SharedFultonSystem
             var metadata = MetaData(uid);
             var oldCoords = xform.Coordinates;
             var offset = _random.NextVector2(1.5f);
-            var localPos = TransformSystem.GetInvWorldMatrix(beaconXform.ParentUid)
-                .Transform(TransformSystem.GetWorldPosition(beaconXform)) + offset;
+            var localPos = Vector2.Transform(
+                    TransformSystem.GetWorldPosition(beaconXform),
+                    TransformSystem.GetInvWorldMatrix(beaconXform.ParentUid)) + offset;
 
             TransformSystem.SetCoordinates(uid, new EntityCoordinates(beaconXform.ParentUid, localPos));
 
index 965da7f0c5e9cefecb0cfbe9c664bfdcbe8cd52f..eafbeddd5c47240735f9fb37721c26d724f78897 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Robust.Shared.Map;
 
 namespace Content.Server.Shuttles.Events;
@@ -6,4 +7,4 @@ namespace Content.Server.Shuttles.Events;
 /// Raised when a shuttle has moved to FTL space.
 /// </summary>
 [ByRefEvent]
-public readonly record struct FTLStartedEvent(EntityUid Entity, EntityCoordinates TargetCoordinates, EntityUid? FromMapUid, Matrix3 FTLFrom, Angle FromRotation);
+public readonly record struct FTLStartedEvent(EntityUid Entity, EntityCoordinates TargetCoordinates, EntityUid? FromMapUid, Matrix3x2 FTLFrom, Angle FromRotation);
index e87e781e620e277816753ce0ed2c10cc248d9c27..eb1f9796b27a55c620487e93756a7c657375a5d8 100644 (file)
@@ -1,4 +1,5 @@
 using System.Linq;
+using System.Numerics;
 using Content.Server.Administration;
 using Content.Server.DeviceNetwork.Components;
 using Content.Server.DeviceNetwork.Systems;
@@ -277,7 +278,7 @@ public sealed class ArrivalsSystem : EntitySystem
         foreach (var (ent, xform) in toDump)
         {
             var rotation = xform.LocalRotation;
-            _transform.SetCoordinates(ent, new EntityCoordinates(args.FromMapUid!.Value, args.FTLFrom.Transform(xform.LocalPosition)));
+            _transform.SetCoordinates(ent, new EntityCoordinates(args.FromMapUid!.Value, Vector2.Transform(xform.LocalPosition, args.FTLFrom)));
             _transform.SetWorldRotation(ent, args.FromRotation + rotation);
         }
     }
index e46a7c715ffad6b232413d7e84063c96e408b98c..1a95ef9cb22b738e4144756280af758f53cfb5c8 100644 (file)
@@ -46,13 +46,13 @@ public sealed partial class DockingSystem
        FixturesComponent shuttleFixtures,
        MapGridComponent grid,
        bool isMap,
-       out Matrix3 matty,
+       out Matrix3x2 matty,
        out Box2 shuttleDockedAABB,
        out Angle gridRotation)
    {
        shuttleDockedAABB = Box2.UnitCentered;
        gridRotation = Angle.Zero;
-       matty = Matrix3.Identity;
+       matty = Matrix3x2.Identity;
 
        if (shuttleDock.Docked ||
            gridDock.Docked ||
@@ -71,9 +71,9 @@ public sealed partial class DockingSystem
        var gridDockAngle = gridDockXform.LocalRotation.Opposite();
        var offsetAngle = gridDockAngle - shuttleDockAngle;
 
-       var stationDockMatrix = Matrix3.CreateInverseTransform(stationDockPos, shuttleDockAngle);
-       var gridXformMatrix = Matrix3.CreateTransform(gridDockXform.LocalPosition, gridDockAngle);
-       Matrix3.Multiply(in stationDockMatrix, in gridXformMatrix, out matty);
+       var stationDockMatrix = Matrix3Helpers.CreateInverseTransform(stationDockPos, shuttleDockAngle);
+       var gridXformMatrix = Matrix3Helpers.CreateTransform(gridDockXform.LocalPosition, gridDockAngle);
+       matty = Matrix3x2.Multiply(stationDockMatrix, gridXformMatrix);
 
        if (!ValidSpawn(grid, matty, offsetAngle, shuttleFixtures, isMap))
            return false;
@@ -193,7 +193,7 @@ public sealed partial class DockingSystem
                    }
 
                    // Can't just use the AABB as we want to get bounds as tight as possible.
-                   var gridPosition = new EntityCoordinates(targetGrid, matty.Transform(Vector2.Zero));
+                   var gridPosition = new EntityCoordinates(targetGrid, Vector2.Transform(Vector2.Zero, matty));
                    var spawnPosition = new EntityCoordinates(targetGridXform.MapUid!.Value, gridPosition.ToMapPos(EntityManager, _transform));
 
                    // TODO: use tight bounds
@@ -303,9 +303,9 @@ public sealed partial class DockingSystem
    /// <summary>
    /// Checks whether the shuttle can warp to the specified position.
    /// </summary>
-   private bool ValidSpawn(MapGridComponent grid, Matrix3 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap)
+   private bool ValidSpawn(MapGridComponent grid, Matrix3x2 matty, Angle angle, FixturesComponent shuttleFixturesComp, bool isMap)
    {
-       var transform = new Transform(matty.Transform(Vector2.Zero), angle);
+       var transform = new Transform(Vector2.Transform(Vector2.Zero, matty), angle);
 
        // Because some docking bounds are tight af need to check each chunk individually
        foreach (var fix in shuttleFixturesComp.Fixtures.Values)
index f346398cdaaab3c3efacef785a71908194fcb526..8a8d2d883d0978aa3d2b63c63da81e526967edc4 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Server.Shuttles.Components;
 using Content.Shared.Audio;
 using Robust.Shared.Audio;
@@ -38,8 +39,8 @@ public sealed partial class ShuttleSystem
 
         var otherXform = Transform(args.OtherEntity);
 
-        var ourPoint = ourXform.InvWorldMatrix.Transform(args.WorldPoint);
-        var otherPoint = otherXform.InvWorldMatrix.Transform(args.WorldPoint);
+        var ourPoint = Vector2.Transform(args.WorldPoint, ourXform.InvWorldMatrix);
+        var otherPoint = Vector2.Transform(args.WorldPoint, otherXform.InvWorldMatrix);
 
         var ourVelocity = _physics.GetLinearVelocity(uid, ourPoint, ourBody, ourXform);
         var otherVelocity = _physics.GetLinearVelocity(args.OtherEntity, otherPoint, otherBody, otherXform);
index f1d0af6f9050e7f912f3a5c413769aa2cde36045..779b2f59719d19178846fc9b25d51213df474b2f 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Content.Server.Atmos.Components;
 using Content.Server.Singularity.Components;
 using Content.Shared.Ghost;
@@ -126,7 +127,7 @@ public sealed class GravityWellSystem : SharedGravityWellSystem
     /// <param name="minRange">The minimum distance at which entities can be affected by the gravity pulse.</param>
     /// <param name="baseMatrixDeltaV">The base velocity added to any entities within affected by the gravity pulse scaled by the displacement of those entities from the epicenter.</param>
     /// <param name="xform">(optional) The transform of the entity at the epicenter of the gravitational pulse.</param>
-    public void GravPulse(EntityUid uid, float maxRange, float minRange, in Matrix3 baseMatrixDeltaV, TransformComponent? xform = null)
+    public void GravPulse(EntityUid uid, float maxRange, float minRange, in Matrix3x2 baseMatrixDeltaV, TransformComponent? xform = null)
     {
         if (Resolve(uid, ref xform))
             GravPulse(xform.Coordinates, maxRange, minRange, in baseMatrixDeltaV);
@@ -154,7 +155,7 @@ public sealed class GravityWellSystem : SharedGravityWellSystem
     /// <param name="maxRange">The maximum distance at which entities can be affected by the gravity pulse.</param>
     /// <param name="minRange">The minimum distance at which entities can be affected by the gravity pulse.</param>
     /// <param name="baseMatrixDeltaV">The base velocity added to any entities within affected by the gravity pulse scaled by the displacement of those entities from the epicenter.</param>
-    public void GravPulse(EntityCoordinates entityPos, float maxRange, float minRange, in Matrix3 baseMatrixDeltaV)
+    public void GravPulse(EntityCoordinates entityPos, float maxRange, float minRange, in Matrix3x2 baseMatrixDeltaV)
         => GravPulse(entityPos.ToMap(EntityManager, _transform), maxRange, minRange, in baseMatrixDeltaV);
 
     /// <summary>
@@ -175,7 +176,7 @@ public sealed class GravityWellSystem : SharedGravityWellSystem
     /// <param name="maxRange">The maximum distance at which entities can be affected by the gravity pulse.</param>
     /// <param name="minRange">The minimum distance at which entities can be affected by the gravity pulse. Exists to prevent div/0 errors.</param>
     /// <param name="baseMatrixDeltaV">The base velocity added to any entities within affected by the gravity pulse scaled by the displacement of those entities from the epicenter.</param>
-    public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in Matrix3 baseMatrixDeltaV)
+    public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange, in Matrix3x2 baseMatrixDeltaV)
     {
         if (mapPos == MapCoordinates.Nullspace)
             return; // No gravpulses in nullspace please.
@@ -205,7 +206,7 @@ public sealed class GravityWellSystem : SharedGravityWellSystem
                 continue;
 
             var scaling = (1f / distance2) * physics.Mass; // TODO: Variable falloff gradiants.
-            _physics.ApplyLinearImpulse(entity, (displacement * baseMatrixDeltaV) * scaling, body: physics);
+            _physics.ApplyLinearImpulse(entity, Vector2.Transform(displacement, baseMatrixDeltaV) * scaling, body: physics);
         }
     }
 
@@ -218,10 +219,9 @@ public sealed class GravityWellSystem : SharedGravityWellSystem
     /// <param name="baseRadialDeltaV">The base amount of velocity that will be added to entities in range towards the epicenter of the pulse.</param>
     /// <param name="baseTangentialDeltaV">The base amount of velocity that will be added to entities in range counterclockwise relative to the epicenter of the pulse.</param>
     public void GravPulse(MapCoordinates mapPos, float maxRange, float minRange = 0.0f, float baseRadialDeltaV = 0.0f, float baseTangentialDeltaV = 0.0f)
-        => GravPulse(mapPos, maxRange, minRange, new Matrix3(
-            baseRadialDeltaV, +baseTangentialDeltaV, 0.0f,
-            -baseTangentialDeltaV, baseRadialDeltaV, 0.0f,
-            0.0f, 0.0f, 1.0f
+        => GravPulse(mapPos, maxRange, minRange, new Matrix3x2(
+            baseRadialDeltaV, -baseTangentialDeltaV, 0.0f,
+            +baseTangentialDeltaV, baseRadialDeltaV, 0.0f
         ));
 
     #endregion GravPulse
index 7247109e37fdaead775990be65b1f8103f3fe507..cb893299a9350d59414a2db6cce023d2978d2a68 100644 (file)
@@ -396,7 +396,7 @@ public sealed partial class GunSystem : SharedGunSystem
             var (_, gridRot, gridInvMatrix) = TransformSystem.GetWorldPositionRotationInvMatrix(gridXform, xformQuery);
 
             fromCoordinates = new EntityCoordinates(gridUid.Value,
-                gridInvMatrix.Transform(fromCoordinates.ToMapPos(EntityManager, TransformSystem)));
+                Vector2.Transform(fromCoordinates.ToMapPos(EntityManager, TransformSystem), gridInvMatrix));
 
             // Use the fallback angle I guess?
             angle -= gridRot;
index 7477b6c26eae7cba8a070ad695e49c859ed23fa0..88e81c93c528ada2f6ccbca8afcef98d4ffef45d 100644 (file)
@@ -1,3 +1,4 @@
+using System.Numerics;
 using Robust.Shared.GameStates;
 using Robust.Shared.Map;
 using Robust.Shared.Serialization;
@@ -15,7 +16,7 @@ public sealed partial class ExplosionVisualsComponent : Component
     public Dictionary<EntityUid, Dictionary<int, List<Vector2i>>> Tiles = new();
     public List<float> Intensity = new();
     public string ExplosionType = string.Empty;
-    public Matrix3 SpaceMatrix;
+    public Matrix3x2 SpaceMatrix;
     public ushort SpaceTileSize;
 }
 
@@ -27,7 +28,7 @@ public sealed class ExplosionVisualsState : ComponentState
     public Dictionary<NetEntity, Dictionary<int, List<Vector2i>>> Tiles;
     public List<float> Intensity;
     public string ExplosionType = string.Empty;
-    public Matrix3 SpaceMatrix;
+    public Matrix3x2 SpaceMatrix;
     public ushort SpaceTileSize;
 
     public ExplosionVisualsState(
@@ -36,7 +37,7 @@ public sealed class ExplosionVisualsState : ComponentState
         List<float> intensity,
         Dictionary<int, List<Vector2i>>? spaceTiles,
         Dictionary<NetEntity, Dictionary<int, List<Vector2i>>> tiles,
-        Matrix3 spaceMatrix,
+        Matrix3x2 spaceMatrix,
         ushort spaceTileSize)
     {
         Epicenter = epicenter;
index 29e82f8adebac565709f9ea2b8cd9008e8958545..5eaa25f4847535602300f29e6371e4627ca93aaf 100644 (file)
@@ -192,7 +192,7 @@ public abstract class SharedItemSystem : EntitySystem
         var shapes = GetItemShape(entity);
         var boundingShape = shapes.GetBoundingBox();
         var boundingCenter = ((Box2) boundingShape).Center;
-        var matty = Matrix3.CreateTransform(boundingCenter, rotation);
+        var matty = Matrix3Helpers.CreateTransform(boundingCenter, rotation);
         var drift = boundingShape.BottomLeft - matty.TransformBox(boundingShape).BottomLeft;
 
         var adjustedShapes = new List<Box2i>();
index ad8b3ddea8d17d686470a7e8f0ec06549584b77e..8a4bbf68bed326553a1467e4348a4f54f4e746de 100644 (file)
@@ -44,7 +44,7 @@ public sealed class TurfSystem : EntitySystem
 
         var size = grid.TileSize;
         var localPos = new Vector2(indices.X * size + (size / 2f), indices.Y * size + (size / 2f));
-        var worldPos = matrix.Transform(localPos);
+        var worldPos = Vector2.Transform(localPos, matrix);
 
         // This is scaled to 95 % so it doesn't encompass walls on other tiles.
         var tileAabb = Box2.UnitCentered.Scale(0.95f * size);
index 2d9993096bc5c42e5fbc0736bd59525fd7d8b5df..b67acdea4f996f11d1399ec1f435cec99a3e3701 100644 (file)
@@ -751,7 +751,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
             return;
 
         var invMatrix = TransformSystem.GetInvWorldMatrix(userXform);
-        var localPos = invMatrix.Transform(coordinates.Position);
+        var localPos = Vector2.Transform(coordinates.Position, invMatrix);
 
         if (localPos.LengthSquared() <= 0f)
             return;