]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Make buckle mint (#32370)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 22 Sep 2024 08:21:40 +0000 (18:21 +1000)
committerGitHub <noreply@github.com>
Sun, 22 Sep 2024 08:21:40 +0000 (18:21 +1000)
- Fix the unbuckle mispredicts.
- Fix unbuckle offset existing.
- Fix interaction range not aligning with interactionoutline system.

Content.Client/Buckle/BuckleSystem.cs
Content.Shared/Buckle/Components/BuckleComponent.cs
Content.Shared/Buckle/Components/StrapComponent.cs
Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs
Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml

index 6770899e0aa293fac14fd0f2cb9cc271337d58c1..035e1300ca5394fa9fc37e7e559275b01eb2e6cf 100644 (file)
@@ -15,7 +15,6 @@ internal sealed class BuckleSystem : SharedBuckleSystem
     {
         base.Initialize();
 
-        SubscribeLocalEvent<BuckleComponent, ComponentHandleState>(OnHandleState);
         SubscribeLocalEvent<BuckleComponent, AppearanceChangeEvent>(OnAppearanceChange);
         SubscribeLocalEvent<StrapComponent, MoveEvent>(OnStrapMoveEvent);
     }
@@ -57,21 +56,6 @@ internal sealed class BuckleSystem : SharedBuckleSystem
         }
     }
 
-    private void OnHandleState(Entity<BuckleComponent> ent, ref ComponentHandleState args)
-    {
-        if (args.Current is not BuckleState state)
-            return;
-
-        ent.Comp.DontCollide = state.DontCollide;
-        ent.Comp.BuckleTime = state.BuckleTime;
-        var strapUid = EnsureEntity<BuckleComponent>(state.BuckledTo, ent);
-
-        SetBuckledTo(ent, strapUid == null ? null : new (strapUid.Value, null));
-
-        var (uid, component) = ent;
-
-    }
-
     private void OnAppearanceChange(EntityUid uid, BuckleComponent component, ref AppearanceChangeEvent args)
     {
         if (!TryComp<RotationVisualsComponent>(uid, out var rotVisuals))
index c4810e8af085bc88b9faa6eb9ffa143d374c5be0..1518ccea9ba8f25bbe06e4d68ac217f00d969a11 100644 (file)
@@ -10,7 +10,7 @@ namespace Content.Shared.Buckle.Components;
 /// <summary>
 /// This component allows an entity to be buckled to an entity with a <see cref="StrapComponent"/>.
 /// </summary>
-[RegisterComponent, NetworkedComponent]
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause]
 [Access(typeof(SharedBuckleSystem))]
 public sealed partial class BuckleComponent : Component
 {
@@ -20,7 +20,7 @@ public sealed partial class BuckleComponent : Component
     /// across a table two tiles away" problem.
     /// </summary>
     [DataField]
-    public float Range = SharedInteractionSystem.InteractionRange / 1.4f;
+    public float Range = SharedInteractionSystem.InteractionRange;
 
     /// <summary>
     /// True if the entity is buckled, false otherwise.
@@ -31,7 +31,7 @@ public sealed partial class BuckleComponent : Component
     /// <summary>
     /// Whether or not collisions should be possible with the entity we are strapped to
     /// </summary>
-    [DataField]
+    [DataField, AutoNetworkedField]
     public bool DontCollide;
 
     /// <summary>
@@ -50,13 +50,13 @@ public sealed partial class BuckleComponent : Component
     /// <summary>
     /// The time that this entity buckled at.
     /// </summary>
-    [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
+    [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField, AutoNetworkedField]
     public TimeSpan? BuckleTime;
 
     /// <summary>
     /// The strap that this component is buckled to.
     /// </summary>
-    [DataField]
+    [DataField, AutoNetworkedField]
     public EntityUid? BuckledTo;
 
     /// <summary>
@@ -72,14 +72,6 @@ public sealed partial class BuckleComponent : Component
     [ViewVariables] public int? OriginalDrawDepth;
 }
 
-[Serializable, NetSerializable]
-public sealed class BuckleState(NetEntity? buckledTo, bool dontCollide, TimeSpan? buckleTime) : ComponentState
-{
-    public readonly NetEntity? BuckledTo = buckledTo;
-    public readonly bool DontCollide = dontCollide;
-    public readonly TimeSpan? BuckleTime = buckleTime;
-}
-
 public sealed partial class UnbuckleAlertEvent : BaseAlertEvent;
 
 /// <summary>
index 101c388a8bfcf80fc3aa7cbf87d31451b162b719..ad5031356e5e4a7fbb676332fd4fb00d28881411 100644 (file)
@@ -15,7 +15,7 @@ public sealed partial class StrapComponent : Component
     /// <summary>
     /// The entities that are currently buckled to this strap.
     /// </summary>
-    [ViewVariables]
+    [DataField, AutoNetworkedField]
     public HashSet<EntityUid> BuckledEntities = new();
 
     /// <summary>
@@ -61,12 +61,6 @@ public sealed partial class StrapComponent : Component
     [DataField, AutoNetworkedField]
     public bool Enabled = true;
 
-    /// <summary>
-    /// You can specify the offset the entity will have after unbuckling.
-    /// </summary>
-    [DataField]
-    public Vector2 UnbuckleOffset = Vector2.Zero;
-
     /// <summary>
     /// The sound to be played when a mob is buckled
     /// </summary>
index 8b35f677f1856d10673a112a840c0d9d81b870b8..1745730647d0f6657c709cbf4bb1771f62b5c082 100644 (file)
@@ -58,13 +58,6 @@ public abstract partial class SharedBuckleSystem
         {
             BuckleDoafterEarly((uid, comp), ev.Event, ev);
         });
-
-        SubscribeLocalEvent<BuckleComponent, ComponentGetState>(OnGetState);
-    }
-
-    private void OnGetState(Entity<BuckleComponent> ent, ref ComponentGetState args)
-    {
-        args.State = new BuckleState(GetNetEntity(ent.Comp.BuckledTo), ent.Comp.DontCollide, ent.Comp.BuckleTime);
     }
 
     private void OnBuckleComponentShutdown(Entity<BuckleComponent> ent, ref ComponentShutdown args)
@@ -196,11 +189,15 @@ public abstract partial class SharedBuckleSystem
     protected void SetBuckledTo(Entity<BuckleComponent> buckle, Entity<StrapComponent?>? strap)
     {
         if (TryComp(buckle.Comp.BuckledTo, out StrapComponent? old))
+        {
             old.BuckledEntities.Remove(buckle);
+            Dirty(buckle.Comp.BuckledTo.Value, old);
+        }
 
         if (strap is {} strapEnt && Resolve(strapEnt.Owner, ref strapEnt.Comp))
         {
             strapEnt.Comp.BuckledEntities.Add(buckle);
+            Dirty(strapEnt);
             _alerts.ShowAlert(buckle, strapEnt.Comp.BuckledAlertType);
         }
         else
@@ -463,13 +460,17 @@ public abstract partial class SharedBuckleSystem
 
         if (buckleXform.ParentUid == strap.Owner && !Terminating(buckleXform.ParentUid))
         {
-            _container.AttachParentToContainerOrGrid((buckle, buckleXform));
+            _transform.PlaceNextTo((buckle, buckleXform), (strap.Owner, oldBuckledXform));
+            buckleXform.ActivelyLerping = false;
 
             var oldBuckledToWorldRot = _transform.GetWorldRotation(strap);
-            _transform.SetWorldRotation(buckleXform, oldBuckledToWorldRot);
+            _transform.SetWorldRotationNoLerp((buckle, buckleXform), oldBuckledToWorldRot);
 
-            if (strap.Comp.UnbuckleOffset != Vector2.Zero)
-                buckleXform.Coordinates = oldBuckledXform.Coordinates.Offset(strap.Comp.UnbuckleOffset);
+            // TODO: This is doing 4 moveevents this is why I left the warning in, if you're going to remove it make it only do 1 moveevent.
+            if (strap.Comp.BuckleOffset != Vector2.Zero)
+            {
+                buckleXform.Coordinates = oldBuckledXform.Coordinates.Offset(strap.Comp.BuckleOffset);
+            }
         }
 
         _rotationVisuals.ResetHorizontalAngle(buckle.Owner);
index 965c8261cceb44acefc8973e4f42ffc9e31f066e..9f3fbd7c455b563e5336566f42c13804d3bf1568 100644 (file)
@@ -54,7 +54,6 @@
       position: Down
       rotation: -90
       buckleOffset: "0,0.15"
-      unbuckleOffset: "0,0.15"
       buckleOnInteractHand: False
     - type: Appearance
     - type: GenericVisualizer