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;
// 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))
{
/// <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
using Robust.Shared.Containers;
using Content.Shared.Tag;
using Content.Shared.Audio;
+using Serilog;
namespace Content.Shared.Vehicle;
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);
}
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)
/// 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