From e93d5113adf2846a6e84d7f751cb2a2ff1604928 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 12 Mar 2023 15:56:05 +1100 Subject: [PATCH] Remove .Owner from melee weapons (#14600) --- .../Weapons/Melee/MeleeArcOverlay.cs | 4 +- .../Melee/MeleeWeaponSystem.Effects.cs | 5 +- .../Weapons/Melee/MeleeWeaponSystem.cs | 29 +++--- .../Weapons/Melee/MeleeWindupOverlay.cs | 22 ++--- .../NPC/Systems/NPCSteeringSystem.Context.cs | 2 +- .../Systems/NPCSteeringSystem.Obstacles.cs | 16 ++- .../Weapons/Melee/MeleeWeaponSystem.cs | 8 +- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 99 +++++++++++-------- 8 files changed, 96 insertions(+), 89 deletions(-) diff --git a/Content.Client/Weapons/Melee/MeleeArcOverlay.cs b/Content.Client/Weapons/Melee/MeleeArcOverlay.cs index 02bc433601..99ef6ca41d 100644 --- a/Content.Client/Weapons/Melee/MeleeArcOverlay.cs +++ b/Content.Client/Weapons/Melee/MeleeArcOverlay.cs @@ -42,9 +42,7 @@ public sealed class MeleeArcOverlay : Overlay return; } - var weapon = _melee.GetWeapon(player.Value); - - if (weapon == null) + if (!_melee.TryGetWeapon(player.Value, out _, out var weapon)) return; var mousePos = _inputManager.MouseScreenPosition; diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs index 6deb60c996..5c423d0315 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs @@ -15,7 +15,6 @@ public sealed partial class MeleeWeaponSystem /// private const float DamageAnimationLength = 0.30f; - private const string AnimationKey = "melee-animation"; private const string DamageAnimationKey = "damage-effect"; private const string FadeAnimationKey = "melee-fade"; private const string SlashAnimationKey = "melee-slash"; @@ -154,10 +153,10 @@ public sealed partial class MeleeWeaponSystem _animation.Play(animationUid, GetFadeAnimation(sprite, 0.05f, 0.15f), FadeAnimationKey); break; case WeaponArcAnimation.None: - var mapPos = userXform.WorldPosition; + var (mapPos, mapRot) = _transform.GetWorldPositionRotation(userXform, GetEntityQuery()); var xform = Transform(animationUid); xform.AttachToGridOrMap(); - xform.WorldPosition = mapPos + (userXform.WorldRotation - userXform.LocalRotation).RotateVec(localPos); + _transform.SetWorldPosition(xform, mapPos + (mapRot - userXform.LocalRotation).RotateVec(localPos)); if (arcComponent.Fadeout) _animation.Play(animationUid, GetFadeAnimation(sprite, 0f, 0.15f), FadeAnimationKey); break; diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 973d497455..05b4877191 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -62,9 +62,8 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem return; var entity = entityNull.Value; - var weapon = GetWeapon(entity); - if (weapon == null) + if (!TryGetWeapon(entity, out var weaponUid, out var weapon)) return; if (!CombatMode.IsInCombatMode(entity) || !Blocker.CanAttack(entity)) @@ -72,7 +71,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem weapon.Attacking = false; if (weapon.WindUpStart != null) { - EntityManager.RaisePredictiveEvent(new StopHeavyAttackEvent(weapon.Owner)); + EntityManager.RaisePredictiveEvent(new StopHeavyAttackEvent(weaponUid)); } return; @@ -94,7 +93,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem } // If it's an unarmed attack then do a disarm - if (weapon.Owner == entity) + if (weaponUid == entity) { EntityUid? target = null; @@ -103,11 +102,11 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem if (MapManager.TryFindGridAt(mousePos, out var grid)) { - coordinates = EntityCoordinates.FromMap(grid.Owner, mousePos, EntityManager); + coordinates = EntityCoordinates.FromMap(grid.Owner, mousePos, _transform, EntityManager); } else { - coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, EntityManager); + coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, _transform, EntityManager); } if (_stateManager.CurrentState is GameplayStateBase screen) @@ -124,7 +123,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem // Start a windup if (weapon.WindUpStart == null) { - EntityManager.RaisePredictiveEvent(new StartHeavyAttackEvent(weapon.Owner)); + EntityManager.RaisePredictiveEvent(new StartHeavyAttackEvent(weaponUid)); weapon.WindUpStart = currentTime; } @@ -138,14 +137,14 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (MapManager.TryFindGridAt(mousePos, out var grid)) { - coordinates = EntityCoordinates.FromMap(grid.Owner, mousePos, EntityManager); + coordinates = EntityCoordinates.FromMap(grid.Owner, mousePos, _transform, EntityManager); } else { - coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, EntityManager); + coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, _transform, EntityManager); } - EntityManager.RaisePredictiveEvent(new HeavyAttackEvent(weapon.Owner, coordinates)); + EntityManager.RaisePredictiveEvent(new HeavyAttackEvent(weaponUid, coordinates)); } return; @@ -153,7 +152,7 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem if (weapon.WindUpStart != null) { - EntityManager.RaisePredictiveEvent(new StopHeavyAttackEvent(weapon.Owner)); + EntityManager.RaisePredictiveEvent(new StopHeavyAttackEvent(weaponUid)); } // Light attack @@ -179,11 +178,11 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (MapManager.TryFindGridAt(mousePos, out var grid)) { - coordinates = EntityCoordinates.FromMap(grid.Owner, mousePos, EntityManager); + coordinates = EntityCoordinates.FromMap(grid.Owner, mousePos, _transform, EntityManager); } else { - coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, EntityManager); + coordinates = EntityCoordinates.FromMap(MapManager.GetMapEntityId(mousePos.MapId), mousePos, _transform, EntityManager); } EntityUid? target = null; @@ -194,13 +193,13 @@ public sealed partial class MeleeWeaponSystem : SharedMeleeWeaponSystem target = screen.GetClickedEntity(mousePos); } - RaisePredictiveEvent(new LightAttackEvent(target, weapon.Owner, coordinates)); + RaisePredictiveEvent(new LightAttackEvent(target, weaponUid, coordinates)); return; } if (weapon.Attacking) { - RaisePredictiveEvent(new StopAttackEvent(weapon.Owner)); + RaisePredictiveEvent(new StopAttackEvent(weaponUid)); } } diff --git a/Content.Client/Weapons/Melee/MeleeWindupOverlay.cs b/Content.Client/Weapons/Melee/MeleeWindupOverlay.cs index aaf744a2fc..6f80077252 100644 --- a/Content.Client/Weapons/Melee/MeleeWindupOverlay.cs +++ b/Content.Client/Weapons/Melee/MeleeWindupOverlay.cs @@ -44,9 +44,7 @@ public sealed class MeleeWindupOverlay : Overlay return; } - var comp = _melee.GetWeapon(owner.Value); - - if (comp == null) + if (!_melee.TryGetWeapon(owner.Value, out var meleeUid, out var comp)) return; var handle = args.WorldHandle; @@ -67,7 +65,7 @@ public sealed class MeleeWindupOverlay : Overlay return; } - if (!xformQuery.TryGetComponent(comp.Owner, out var xform) || + if (!xformQuery.TryGetComponent(meleeUid, out var xform) || xform.MapID != args.MapId) { return; @@ -84,7 +82,7 @@ public sealed class MeleeWindupOverlay : Overlay // Use the sprite itself if we know its bounds. This means short or tall sprites don't get overlapped // by the bar. float yOffset; - if (spriteQuery.TryGetComponent(comp.Owner, out var sprite)) + if (spriteQuery.TryGetComponent(meleeUid, out var sprite)) { yOffset = -sprite.Bounds.Height / 2f - 0.05f; } @@ -106,11 +104,11 @@ public sealed class MeleeWindupOverlay : Overlay const float endX = 22f; // Area marking where to release - var ReleaseWidth = 2f * SharedMeleeWeaponSystem.GracePeriod / (float) comp.WindupTime.TotalSeconds * EyeManager.PixelsPerMeter; - var releaseMiddle = (endX - startX) / 2f + startX; + var releaseWidth = 2f * SharedMeleeWeaponSystem.GracePeriod / (float) comp.WindupTime.TotalSeconds * EyeManager.PixelsPerMeter; + const float releaseMiddle = (endX - startX) / 2f + startX; - var releaseBox = new Box2(new Vector2(releaseMiddle - ReleaseWidth / 2f, 3f) / EyeManager.PixelsPerMeter, - new Vector2(releaseMiddle + ReleaseWidth / 2f, 4f) / EyeManager.PixelsPerMeter); + var releaseBox = new Box2(new Vector2(releaseMiddle - releaseWidth / 2f, 3f) / EyeManager.PixelsPerMeter, + new Vector2(releaseMiddle + releaseWidth / 2f, 4f) / EyeManager.PixelsPerMeter); releaseBox = releaseBox.Translated(position); handle.DrawRect(releaseBox, Color.LimeGreen); @@ -131,11 +129,11 @@ public sealed class MeleeWindupOverlay : Overlay var xPos = (endX - startX) * fraction + startX; // In pixels - const float Width = 2f; + const float width = 2f; // If we hit the end we won't draw half the box so we need to subtract the end pos from it - var endPos = xPos + Width / 2f; + var endPos = xPos + width / 2f; - var box = new Box2(new Vector2(Math.Max(startX, endPos - Width), 3f) / EyeManager.PixelsPerMeter, + var box = new Box2(new Vector2(Math.Max(startX, endPos - width), 3f) / EyeManager.PixelsPerMeter, new Vector2(Math.Min(endX, endPos), 4f) / EyeManager.PixelsPerMeter); box = box.Translated(position); diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs index 5acf856145..a2e8a67075 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs @@ -124,7 +124,7 @@ public sealed partial class NPCSteeringSystem // Breaking behaviours and the likes. lock (_obstacles) { - status = TryHandleFlags(steering, node, bodyQuery); + status = TryHandleFlags(uid, steering, node, bodyQuery); } // TODO: Need to handle re-pathing in case the target moves around. diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs index d8c32482ce..06aa9f7ca9 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Obstacles.cs @@ -32,7 +32,7 @@ public sealed partial class NPCSteeringSystem */ - private SteeringObstacleStatus TryHandleFlags(NPCSteeringComponent component, PathPoly poly, EntityQuery bodyQuery) + private SteeringObstacleStatus TryHandleFlags(EntityUid uid, NPCSteeringComponent component, PathPoly poly, EntityQuery bodyQuery) { DebugTools.Assert(!poly.Data.IsFreeSpace); // TODO: Store PathFlags on the steering comp @@ -41,9 +41,9 @@ public sealed partial class NPCSteeringSystem var layer = 0; var mask = 0; - if (TryComp(component.Owner, out var manager)) + if (TryComp(uid, out var manager)) { - (layer, mask) = _physics.GetHardCollision(component.Owner, manager); + (layer, mask) = _physics.GetHardCollision(uid, manager); } else { @@ -76,7 +76,7 @@ public sealed partial class NPCSteeringSystem { if (door.State != DoorState.Opening) { - _interaction.InteractionActivate(component.Owner, ent); + _interaction.InteractionActivate(uid, ent); return SteeringObstacleStatus.Continuing; } } @@ -100,7 +100,7 @@ public sealed partial class NPCSteeringSystem { // TODO: Use the verb. if (door.State != DoorState.Opening && !door.BeingPried) - _doors.TryPryDoor(ent, component.Owner, component.Owner, door, true); + _doors.TryPryDoor(ent, uid, uid, door, true); return SteeringObstacleStatus.Continuing; } @@ -112,9 +112,7 @@ public sealed partial class NPCSteeringSystem // Try smashing obstacles. else if ((component.Flags & PathFlags.Smashing) != 0x0) { - var meleeWeapon = _melee.GetWeapon(component.Owner); - - if (meleeWeapon != null && meleeWeapon.NextAttack <= _timing.CurTime && TryComp(component.Owner, out var combatMode)) + if (_melee.TryGetWeapon(uid, out var meleeUid, out var meleeWeapon) && meleeWeapon.NextAttack <= _timing.CurTime && TryComp(uid, out var combatMode)) { combatMode.IsInCombatMode = true; var destructibleQuery = GetEntityQuery(); @@ -127,7 +125,7 @@ public sealed partial class NPCSteeringSystem // TODO: Validate we can damage it if (destructibleQuery.HasComponent(ent)) { - _melee.AttemptLightAttack(component.Owner, component.Owner, meleeWeapon, ent); + _melee.AttemptLightAttack(uid, uid, meleeWeapon, ent); break; } } diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index f5fd861a02..13f824d1b5 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -236,7 +236,7 @@ public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem return; } - var hitBloodstreams = new List(); + var hitBloodstreams = new List<(EntityUid Entity, BloodstreamComponent Component)>(); var bloodQuery = GetEntityQuery(); foreach (var entity in args.HitEntities) @@ -245,7 +245,7 @@ public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem continue; if (bloodQuery.TryGetComponent(entity, out var bloodstream)) - hitBloodstreams.Add(bloodstream); + hitBloodstreams.Add((entity, bloodstream)); } if (!hitBloodstreams.Any()) @@ -256,10 +256,10 @@ public sealed class MeleeWeaponSystem : SharedMeleeWeaponSystem var solutionToInject = removedSolution.SplitSolution(removedVol * comp.TransferEfficiency); var volPerBloodstream = solutionToInject.Volume * (1 / hitBloodstreams.Count); - foreach (var bloodstream in hitBloodstreams) + foreach (var (ent, bloodstream) in hitBloodstreams) { var individualInjection = solutionToInject.SplitSolution(volPerBloodstream); - _bloodstream.TryAddToChemicals((bloodstream).Owner, individualInjection, bloodstream); + _bloodstream.TryAddToChemicals(ent, individualInjection, bloodstream); } } } diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index a96699260e..2f9113cc50 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.ActionBlocker; using Content.Shared.Administration.Logs; @@ -34,13 +35,13 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem [Dependency] protected readonly ISharedAdminLogManager AdminLogger = default!; [Dependency] protected readonly ActionBlockerSystem Blocker = default!; [Dependency] protected readonly DamageableSystem Damageable = default!; - [Dependency] protected readonly InventorySystem Inventory = default!; + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] protected readonly SharedAudioSystem Audio = default!; [Dependency] protected readonly SharedCombatModeSystem CombatMode = default!; [Dependency] protected readonly SharedInteractionSystem Interaction = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] protected readonly SharedPopupSystem PopupSystem = default!; - [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] protected readonly SharedTransformSystem _transform = default!; [Dependency] private readonly StaminaSystem _stamina = default!; protected ISawmill Sawmill = default!; @@ -106,10 +107,11 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem if (user == null) return; - var weapon = GetWeapon(user.Value); - - if (weapon?.Owner != msg.Weapon) + if (!TryGetWeapon(user.Value, out var weaponUid, out var weapon) || + weaponUid != msg.Weapon) + { return; + } if (!weapon.Attacking) return; @@ -125,10 +127,11 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem if (user == null) return; - var weapon = GetWeapon(user.Value); - - if (weapon?.Owner != msg.Weapon) + if (!TryGetWeapon(user.Value, out var weaponUid, out var weapon) || + weaponUid != msg.Weapon) + { return; + } DebugTools.Assert(weapon.WindUpStart == null); weapon.WindUpStart = Timing.CurTime; @@ -144,26 +147,27 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem if (user == null) return; - var weapon = GetWeapon(user.Value); - - if (weapon?.Owner != msg.Weapon) + if (!TryGetWeapon(user.Value, out var weaponUid, out var weapon) || + weaponUid != msg.Weapon) + { return; + } AttemptAttack(args.SenderSession.AttachedEntity!.Value, msg.Weapon, weapon, msg, args.SenderSession); } private void OnStopHeavyAttack(StopHeavyAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity == null || - !TryComp(msg.Weapon, out var weapon)) + if (args.SenderSession.AttachedEntity == null) { return; } - var userWeapon = GetWeapon(args.SenderSession.AttachedEntity.Value); - - if (userWeapon != weapon) + if (!TryGetWeapon(args.SenderSession.AttachedEntity.Value, out var weaponUid, out var weapon) || + weaponUid != msg.Weapon) + { return; + } if (weapon.WindUpStart.Equals(null)) { @@ -176,16 +180,16 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem private void OnHeavyAttack(HeavyAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity == null || - !TryComp(msg.Weapon, out var weapon)) + if (args.SenderSession.AttachedEntity == null) { return; } - var userWeapon = GetWeapon(args.SenderSession.AttachedEntity.Value); - - if (userWeapon != weapon) + if (!TryGetWeapon(args.SenderSession.AttachedEntity.Value, out var weaponUid, out var weapon) || + weaponUid != msg.Weapon) + { return; + } AttemptAttack(args.SenderSession.AttachedEntity.Value, msg.Weapon, weapon, msg, args.SenderSession); } @@ -197,12 +201,12 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem return; } - var userWeapon = GetWeapon(args.SenderSession.AttachedEntity.Value); - - if (userWeapon == null) + if (!TryGetWeapon(args.SenderSession.AttachedEntity.Value, out var weaponUid, out var weapon)) + { return; + } - AttemptAttack(args.SenderSession.AttachedEntity.Value, userWeapon.Owner, userWeapon, msg, args.SenderSession); + AttemptAttack(args.SenderSession.AttachedEntity.Value, weaponUid, weapon, msg, args.SenderSession); } private void OnGetState(EntityUid uid, MeleeWeaponComponent component, ref ComponentGetState args) @@ -226,15 +230,22 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem component.Range = state.Range; } - public MeleeWeaponComponent? GetWeapon(EntityUid entity) + public bool TryGetWeapon(EntityUid entity, out EntityUid weaponUid, [NotNullWhen(true)] out MeleeWeaponComponent? melee) { - MeleeWeaponComponent? melee; + weaponUid = default; + melee = null; var ev = new GetMeleeWeaponEvent(); RaiseLocalEvent(entity, ev); if (ev.Handled) { - return EntityManager.GetComponentOrNull(ev.Weapon); + if (TryComp(ev.Weapon, out melee)) + { + weaponUid = ev.Weapon.Value; + return true; + } + + return false; } // Use inhands entity if we got one. @@ -243,26 +254,30 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem { if (EntityManager.TryGetComponent(held, out melee)) { - return melee; + weaponUid = held; + return true; } - return null; + return false; } // Use hands clothing if applicable. - if (Inventory.TryGetSlotEntity(entity, "gloves", out var gloves) && + if (_inventory.TryGetSlotEntity(entity, "gloves", out var gloves) && TryComp(gloves, out var glovesMelee)) { - return glovesMelee; + weaponUid = gloves.Value; + melee = glovesMelee; + return true; } // Use our own melee if (TryComp(entity, out melee)) { - return melee; + weaponUid = entity; + return true; } - return null; + return false; } public void AttemptLightAttackMiss(EntityUid user, EntityUid weaponUid, MeleeWeaponComponent weapon, EntityCoordinates coordinates) @@ -345,7 +360,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem throw new NotImplementedException(); } - DoLungeAnimation(user, weapon.Angle, attack.Coordinates.ToMap(EntityManager), weapon.Range, animation); + DoLungeAnimation(user, weapon.Angle, attack.Coordinates.ToMap(EntityManager, _transform), weapon.Range, animation); weapon.Attacking = true; Dirty(weapon); } @@ -441,7 +456,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem // If the target has stamina and is taking blunt damage, they should also take stamina damage based on their blunt to stamina factor if (damageResult.DamageDict.TryGetValue("Blunt", out var bluntDamage)) { - _stamina.TakeStaminaDamage(ev.Target.Value, (bluntDamage * component.BluntStaminaDamageFactor).Float(), source:user, with:(component.Owner == user ? null : component.Owner)); + _stamina.TakeStaminaDamage(ev.Target.Value, (bluntDamage * component.BluntStaminaDamageFactor).Float(), source:user, with:meleeUid == user ? null : meleeUid); } if (meleeUid == user) @@ -452,7 +467,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem else { AdminLogger.Add(LogType.MeleeHit, - $"{ToPrettyString(user):user} melee attacked {ToPrettyString(ev.Target.Value):target} using {ToPrettyString(component.Owner):used} and dealt {damageResult.Total:damage} damage"); + $"{ToPrettyString(user):user} melee attacked {ToPrettyString(ev.Target.Value):target} using {ToPrettyString(meleeUid):used} and dealt {damageResult.Total:damage} damage"); } PlayHitSound(ev.Target.Value, user, GetHighestDamageSound(modifiedDamage, _protoManager), hitEvent.HitSoundOverride, component.HitSound); @@ -489,7 +504,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem return; } - var targetMap = ev.Coordinates.ToMap(EntityManager); + var targetMap = ev.Coordinates.ToMap(EntityManager, _transform); if (targetMap.MapId != userXform.MapID) { @@ -570,7 +585,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem else { AdminLogger.Add(LogType.MeleeHit, - $"{ToPrettyString(user):user} melee attacked {ToPrettyString(entity):target} using {ToPrettyString(component.Owner):used} and dealt {damageResult.Total:damage} damage"); + $"{ToPrettyString(user):user} melee attacked {ToPrettyString(entity):target} using {ToPrettyString(meleeUid):used} and dealt {damageResult.Total:damage} damage"); } } } @@ -729,7 +744,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem if (!TryComp(user, out var userXform)) return; - var invMatrix = userXform.InvWorldMatrix; + var invMatrix = _transform.GetInvWorldMatrix(userXform); var localPos = invMatrix.Transform(coordinates.Position); if (localPos.LengthSquared <= 0f) @@ -738,8 +753,8 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem localPos = userXform.LocalRotation.RotateVec(localPos); // We'll play the effect just short visually so it doesn't look like we should be hitting but actually aren't. - const float BufferLength = 0.2f; - var visualLength = length - BufferLength; + const float bufferLength = 0.2f; + var visualLength = length - bufferLength; if (localPos.Length > visualLength) localPos = localPos.Normalized * visualLength;