diff --git a/Content.Server/Salvage/SalvageMagnetComponent.cs b/Content.Server/Salvage/SalvageMagnetComponent.cs index af2d354fd4..a6b9e75cf7 100644 --- a/Content.Server/Salvage/SalvageMagnetComponent.cs +++ b/Content.Server/Salvage/SalvageMagnetComponent.cs @@ -47,6 +47,34 @@ namespace Content.Server.Salvage [DataField("magnetState")] public MagnetState MagnetState = MagnetState.Inactive; + /// + /// How long it takes for the magnet to pull in the debris + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("attachingTime")] + public TimeSpan AttachingTime = TimeSpan.FromSeconds(10); + + /// + /// How long the magnet can hold the debris until it starts losing the lock + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("holdTime")] + public TimeSpan HoldTime = TimeSpan.FromSeconds(10); + + /// + /// How long the magnet can hold the debris while losing the lock + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("detachingTime")] + public TimeSpan DetachingTime = TimeSpan.FromSeconds(10); + + /// + /// How long the magnet has to cool down after use + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("cooldownTime")] + public TimeSpan CooldownTime = TimeSpan.FromSeconds(10); + [DataField("salvageChannel", customTypeSerializer: typeof(PrototypeIdSerializer))] public string SalvageChannel = "Supply"; diff --git a/Content.Server/Salvage/SalvageSystem.cs b/Content.Server/Salvage/SalvageSystem.cs index 5e33fb55f4..739eb3431b 100644 --- a/Content.Server/Salvage/SalvageSystem.cs +++ b/Content.Server/Salvage/SalvageSystem.cs @@ -30,10 +30,6 @@ namespace Content.Server.Salvage [Dependency] private readonly RadioSystem _radioSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; - private static readonly TimeSpan AttachingTime = TimeSpan.FromSeconds(30); - private static readonly TimeSpan HoldTime = TimeSpan.FromMinutes(4); - private static readonly TimeSpan DetachingTime = TimeSpan.FromSeconds(30); - private static readonly TimeSpan CooldownTime = TimeSpan.FromMinutes(1); private static readonly int SalvageLocationPlaceAttempts = 16; // TODO: This is probably not compatible with multi-station @@ -76,18 +72,18 @@ namespace Content.Server.Salvage if (!Resolve(uid, ref component, false)) return; - int timeLeft = (component.MagnetState.Until.Minutes * 60 + component.MagnetState.Until.Seconds) - (currentTime.Minutes * 60 + currentTime.Seconds); + int timeLeft = Convert.ToInt32(component.MagnetState.Until.TotalSeconds - currentTime.TotalSeconds); if (component.MagnetState.StateType == MagnetStateType.Inactive) component.ChargeRemaining = 5; else if (component.MagnetState.StateType == MagnetStateType.Holding) { - component.ChargeRemaining = (timeLeft / ((HoldTime.Minutes * 60 + HoldTime.Seconds) / component.ChargeCapacity)) + 1; + component.ChargeRemaining = (timeLeft / (Convert.ToInt32(component.HoldTime.TotalSeconds) / component.ChargeCapacity)) + 1; } else if (component.MagnetState.StateType == MagnetStateType.Detaching) component.ChargeRemaining = 0; else if (component.MagnetState.StateType == MagnetStateType.CoolingDown) { - component.ChargeRemaining = component.ChargeCapacity - (timeLeft / ((CooldownTime.Minutes * 60 + CooldownTime.Seconds) / component.ChargeCapacity)) - 1; + component.ChargeRemaining = component.ChargeCapacity - (timeLeft / (Convert.ToInt32(component.CooldownTime.TotalSeconds) / component.ChargeCapacity)) - 1; } if (component.PreviousCharge != component.ChargeRemaining) { @@ -202,7 +198,7 @@ namespace Content.Server.Salvage _salvageGridStates[gridId] = gridState; } gridState.ActiveMagnets.Add(component); - component.MagnetState = new MagnetState(MagnetStateType.Attaching, gridState.CurrentTime + AttachingTime); + component.MagnetState = new MagnetState(MagnetStateType.Attaching, gridState.CurrentTime + component.AttachingTime); RaiseLocalEvent(new SalvageMagnetActivatedEvent(component.Owner)); Report(component.Owner, component.SalvageChannel, "salvage-system-report-activate-success"); break; @@ -348,7 +344,7 @@ namespace Content.Server.Salvage var pulledTransform = EntityManager.GetComponent(salvageEntityId.Value); pulledTransform.WorldRotation = spAngle; - Report(component.Owner, component.SalvageChannel, "salvage-system-announcement-arrived", ("timeLeft", HoldTime.TotalSeconds)); + Report(component.Owner, component.SalvageChannel, "salvage-system-announcement-arrived", ("timeLeft", component.HoldTime.TotalSeconds)); return true; } @@ -368,16 +364,16 @@ namespace Content.Server.Salvage case MagnetStateType.Attaching: if (SpawnSalvage(magnet)) { - magnet.MagnetState = new MagnetState(MagnetStateType.Holding, currentTime + HoldTime); + magnet.MagnetState = new MagnetState(MagnetStateType.Holding, currentTime + magnet.HoldTime); } else { - magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + CooldownTime); + magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + magnet.CooldownTime); } break; case MagnetStateType.Holding: - Report(magnet.Owner, magnet.SalvageChannel, "salvage-system-announcement-losing", ("timeLeft", DetachingTime.TotalSeconds)); - magnet.MagnetState = new MagnetState(MagnetStateType.Detaching, currentTime + DetachingTime); + Report(magnet.Owner, magnet.SalvageChannel, "salvage-system-announcement-losing", ("timeLeft", magnet.DetachingTime.TotalSeconds)); + magnet.MagnetState = new MagnetState(MagnetStateType.Detaching, currentTime + magnet.DetachingTime); break; case MagnetStateType.Detaching: if (magnet.AttachedEntity.HasValue) @@ -389,7 +385,7 @@ namespace Content.Server.Salvage Logger.ErrorS("salvage", "Salvage detaching was expecting attached entity but it was null"); } Report(magnet.Owner, magnet.SalvageChannel, "salvage-system-announcement-lost"); - magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + CooldownTime); + magnet.MagnetState = new MagnetState(MagnetStateType.CoolingDown, currentTime + magnet.CooldownTime); break; case MagnetStateType.CoolingDown: magnet.MagnetState = MagnetState.Inactive; diff --git a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml index da578d9877..522e10297d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/salvage.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/salvage.yml @@ -62,6 +62,10 @@ offset: 0, 0 offsetRadiusMin: 24 offsetRadiusMax: 48 + attachingTime: 30 + holdTime: 240 + detachingTime: 30 + cooldownTime: 60 - type: ApcPowerReceiver powerLoad: 2500 # TODO change this to a HV power draw that really hits the grid hard WHEN active