diff --git a/Content.Server/Vehicle/VehicleSystem.cs b/Content.Server/Vehicle/VehicleSystem.cs index e01c6993e0..737c7ff359 100644 --- a/Content.Server/Vehicle/VehicleSystem.cs +++ b/Content.Server/Vehicle/VehicleSystem.cs @@ -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(uid, out var mover)) + UpdateDrawDepth(uid, GetDrawDepth(Transform(uid), component, mover.RelativeRotation.Degrees)); if (TryComp(args.BuckledEntity, out var actions) && TryComp(uid, out var flashlight)) { diff --git a/Content.Shared/Vehicle/Components/VehicleComponent.cs b/Content.Shared/Vehicle/Components/VehicleComponent.cs index aefbbdd8fa..f4b75e731a 100644 --- a/Content.Shared/Vehicle/Components/VehicleComponent.cs +++ b/Content.Shared/Vehicle/Components/VehicleComponent.cs @@ -58,15 +58,24 @@ namespace Content.Shared.Vehicle.Components /// /// Whether the vehicle has a key currently inside it or not. /// - [ViewVariables] + [DataField("hasKey")] public bool HasKey = false; - // TODO: Fix this /// - /// 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. /// - [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; /// /// What the y buckle offset should be in north / south diff --git a/Content.Shared/Vehicle/SharedVehicleSystem.cs b/Content.Shared/Vehicle/SharedVehicleSystem.cs index aaf28e54b2..622b1bfdfb 100644 --- a/Content.Shared/Vehicle/SharedVehicleSystem.cs +++ b/Content.Shared/Vehicle/SharedVehicleSystem.cs @@ -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(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(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. /// - 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 }; } + /// /// 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 diff --git a/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml b/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml index 74b47bde84..9e925c158c 100644 --- a/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml +++ b/Resources/Prototypes/Entities/Objects/Vehicles/buckleable.yml @@ -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 @@ -175,7 +179,9 @@ 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: @@ -222,6 +228,8 @@ description: All-Tile Vehicle. components: - type: Vehicle + southOver: true + northOver: true northOverride: -0.1 southOverride: 0.1 - type: Sprite @@ -275,7 +283,9 @@ 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: @@ -317,6 +327,8 @@ description: Bad to the Bone. components: - type: Vehicle + southOver: true + northOver: true northOverride: -0.1 southOverride: 0.1 - type: Sprite