]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix and update VehicleSystem.cs (#15284)
authorDaniil Sikinami <60344369+VigersRay@users.noreply.github.com>
Sat, 15 Apr 2023 06:02:03 +0000 (09:02 +0300)
committerGitHub <noreply@github.com>
Sat, 15 Apr 2023 06:02:03 +0000 (23:02 -0700)
Content.Server/Vehicle/VehicleSystem.cs
Content.Shared/Vehicle/Components/VehicleComponent.cs
Content.Shared/Vehicle/SharedVehicleSystem.cs
Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml

index e01c6993e03197651b6168bcbe5399e0d92400e9..737c7ff3593ed49ffc0712b8c06424f85d7160f7 100644 (file)
@@ -7,6 +7,7 @@ using Content.Shared.Movement.Components;
 using Content.Shared.Movement.Systems;
 using Content.Shared.Vehicle;
 using Content.Shared.Vehicle.Components;
+using Robust.Server.GameObjects;
 using Robust.Shared.Audio;
 using Robust.Shared.Physics.Systems;
 using Robust.Shared.Player;
@@ -89,7 +90,8 @@ namespace Content.Server.Vehicle
 
                 // Update appearance stuff, add actions
                 UpdateBuckleOffset(Transform(uid), component);
-                UpdateDrawDepth(uid, GetDrawDepth(Transform(uid), component.NorthOnly));
+                if (TryComp<InputMoverComponent>(uid, out var mover))
+                    UpdateDrawDepth(uid, GetDrawDepth(Transform(uid), component, mover.RelativeRotation.Degrees));
 
                 if (TryComp<ActionsComponent>(args.BuckledEntity, out var actions) && TryComp<UnpoweredFlashlightComponent>(uid, out var flashlight))
                 {
index aefbbdd8faf8df17a384c04638fe005f35d555c1..f4b75e731a54a1c45c5a909e2d7cc9a15c189196 100644 (file)
@@ -58,15 +58,24 @@ namespace Content.Shared.Vehicle.Components
         /// <summary>
         /// Whether the vehicle has a key currently inside it or not.
         /// </summary>
-        [ViewVariables]
+        [DataField("hasKey")]
         public bool HasKey = false;
 
-        // TODO: Fix this
         /// <summary>
-        /// Whether the vehicle should treat north as its unique direction in its visualizer
+        /// Determines from which side the vehicle will be displayed on top of the player.
         /// </summary>
-        [DataField("northOnly")]
-        public bool NorthOnly = false;
+
+        [DataField("southOver")]
+        public bool SouthOver = false;
+
+        [DataField("northOver")]
+        public bool NorthOver = false;
+
+        [DataField("westOver")]
+        public bool WestOver = false;
+
+        [DataField("eastOver")]
+        public bool EastOver = false;
 
         /// <summary>
         /// What the y buckle offset should be in north / south
index aaf28e54b26652dd25611f85b71203e14f3b559e..622b1bfdfb8e2126e9fefe8d9f39eabeb9528c29 100644 (file)
@@ -11,6 +11,7 @@ using Robust.Shared.Serialization;
 using Robust.Shared.Containers;
 using Content.Shared.Tag;
 using Content.Shared.Audio;
+using Serilog;
 
 namespace Content.Shared.Vehicle;
 
@@ -50,7 +51,8 @@ public abstract partial class SharedVehicleSystem : EntitySystem
     private void OnEntInserted(EntityUid uid, VehicleComponent component, EntInsertedIntoContainerMessage args)
     {
         if (args.Container.ID != KeySlot ||
-            !_tagSystem.HasTag(args.Entity, "VehicleKey")) return;
+            !_tagSystem.HasTag(args.Entity, "VehicleKey"))
+            return;
 
         // Enable vehicle
         var inVehicle = EnsureComp<InVehicleComponent>(args.Entity);
@@ -107,7 +109,8 @@ public abstract partial class SharedVehicleSystem : EntitySystem
         }
 
         UpdateBuckleOffset(args.Component, component);
-        UpdateDrawDepth(uid, GetDrawDepth(args.Component, component.NorthOnly));
+        if (TryComp<InputMoverComponent>(uid, out var mover))
+            UpdateDrawDepth(uid, GetDrawDepth(args.Component, component, mover.RelativeRotation));
     }
 
     private void OnVehicleStartup(EntityUid uid, VehicleComponent component, ComponentStartup args)
@@ -129,26 +132,36 @@ public abstract partial class SharedVehicleSystem : EntitySystem
     /// change its draw depth. Vehicles can choose between special drawdetph
     /// when facing north or south. East and west are easy.
     /// </summary>
-    protected int GetDrawDepth(TransformComponent xform, bool northOnly)
+    protected int GetDrawDepth(TransformComponent xform, VehicleComponent component, Angle cameraAngle)
     {
-        // TODO: I can't even
-        if (northOnly)
+        var itemDirection = cameraAngle.GetDir() switch
         {
-            return xform.LocalRotation.Degrees switch
-            {
-                < 135f => (int) DrawDepth.DrawDepth.Doors,
-                <= 225f => (int) DrawDepth.DrawDepth.WallMountedItems,
-                _ => 5
-            };
-        }
-        return xform.LocalRotation.Degrees switch
+            Direction.South => xform.LocalRotation.GetDir(),
+            Direction.North => xform.LocalRotation.RotateDir(Direction.North),
+            Direction.West => xform.LocalRotation.RotateDir(Direction.East),
+            Direction.East => xform.LocalRotation.RotateDir(Direction.West),
+            _ => Direction.South
+        };
+
+        return itemDirection switch
         {
-            < 45f =>  (int) DrawDepth.DrawDepth.Doors,
-            <= 315f =>  (int) DrawDepth.DrawDepth.WallMountedItems,
-            _ =>  (int) DrawDepth.DrawDepth.Doors,
+            Direction.North => component.NorthOver
+                ? (int) DrawDepth.DrawDepth.Doors
+                : (int) DrawDepth.DrawDepth.WallMountedItems,
+            Direction.South => component.SouthOver
+                ? (int) DrawDepth.DrawDepth.Doors
+                : (int) DrawDepth.DrawDepth.WallMountedItems,
+            Direction.West => component.WestOver
+                ? (int) DrawDepth.DrawDepth.Doors
+                : (int) DrawDepth.DrawDepth.WallMountedItems,
+            Direction.East => component.EastOver
+                ? (int) DrawDepth.DrawDepth.Doors
+                : (int) DrawDepth.DrawDepth.WallMountedItems,
+            _ => (int) DrawDepth.DrawDepth.WallMountedItems
         };
     }
 
+
     /// <summary>
     /// Change the buckle offset based on what direction the vehicle is facing and
     /// teleport any buckled entities to it. This is the most crucial part of making
index 74b47bde84b8d6de161ed1db541ab71aaf8249e7..9e925c158c1108bf8d19be9b8478eeb88ad000e4 100644 (file)
@@ -79,6 +79,7 @@
   - type: StaticPrice
     price: 750 # Grand Theft Auto.
 
+
 - type: entity
   id: VehicleJanicart
   parent: BaseVehicle
@@ -86,6 +87,9 @@
   description: The janitor's trusty steed.
   components:
   - type: Vehicle
+    southOver: true
+    westOver: true
+    eastOver: true
     northOverride: -0.15
     southOverride: 0.22
   - type: Sprite
   description: The future of transportation. Popularized by St. James, the patron saint of security officers and internet forum moderators.
   components:
   - type: Vehicle
-    northOnly: true
+    northOver: true
+    westOver: true
+    eastOver: true
     northOverride: -0.1
     southOverride: 0.1
     hornSound:
   description: All-Tile Vehicle.
   components:
   - type: Vehicle
+    southOver: true
+    northOver: true
     northOverride: -0.1
     southOverride: 0.1
   - type: Sprite
   description: Be an enemy of the corporation, in style.
   components:
     - type: Vehicle
-      northOnly: true
+      southOver: true
+      westOver: true
+      eastOver: true
       northOverride: -0.1
       southOverride: 0.1
       hornSound:
   description: Bad to the Bone.
   components:
     - type: Vehicle
+      southOver: true
+      northOver: true
       northOverride: -0.1
       southOverride: 0.1
     - type: Sprite