Add fultons (#18958)
This commit is contained in:
@@ -7,7 +7,6 @@ namespace Content.Server.Entry
|
||||
"ConstructionGhost",
|
||||
"IconSmooth",
|
||||
"InteractionOutline",
|
||||
"ItemStatus",
|
||||
"Marker",
|
||||
"GuidebookControlsTest",
|
||||
"GuideHelp",
|
||||
|
||||
70
Content.Server/Salvage/FultonSystem.cs
Normal file
70
Content.Server/Salvage/FultonSystem.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using System.Numerics;
|
||||
using Content.Shared.Salvage.Fulton;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server.Salvage;
|
||||
|
||||
public sealed class FultonSystem : SharedFultonSystem
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<FultonedComponent, ComponentStartup>(OnFultonedStartup);
|
||||
SubscribeLocalEvent<FultonedComponent, ComponentShutdown>(OnFultonedShutdown);
|
||||
}
|
||||
|
||||
private void OnFultonedShutdown(EntityUid uid, FultonedComponent component, ComponentShutdown args)
|
||||
{
|
||||
Del(component.Effect);
|
||||
component.Effect = EntityUid.Invalid;
|
||||
}
|
||||
|
||||
private void OnFultonedStartup(EntityUid uid, FultonedComponent component, ComponentStartup args)
|
||||
{
|
||||
if (Exists(component.Effect))
|
||||
return;
|
||||
|
||||
component.Effect = Spawn(EffectProto, new EntityCoordinates(uid, EffectOffset));
|
||||
Dirty(uid, component);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
var query = EntityQueryEnumerator<FultonedComponent>();
|
||||
var curTime = Timing.CurTime;
|
||||
|
||||
while (query.MoveNext(out var uid, out var comp))
|
||||
{
|
||||
if (comp.NextFulton > curTime)
|
||||
continue;
|
||||
|
||||
Fulton(uid, comp);
|
||||
}
|
||||
}
|
||||
|
||||
private void Fulton(EntityUid uid, FultonedComponent component)
|
||||
{
|
||||
if (!Deleted(component.Beacon))
|
||||
{
|
||||
var xform = Transform(uid);
|
||||
var oldCoords = xform.Coordinates;
|
||||
var offset = _random.NextVector2(1.5f);
|
||||
TransformSystem.SetCoordinates(uid, new EntityCoordinates(component.Beacon.Value, offset));
|
||||
|
||||
RaiseNetworkEvent(new FultonAnimationMessage()
|
||||
{
|
||||
Entity = uid,
|
||||
Coordinates = oldCoords,
|
||||
});
|
||||
}
|
||||
|
||||
Audio.PlayPvs(component.Sound, uid);
|
||||
RemCompDeferred<FultonedComponent>(uid);
|
||||
}
|
||||
}
|
||||
@@ -155,24 +155,24 @@ public sealed partial class SalvageSystem
|
||||
{
|
||||
var remaining = comp.EndTime - _timing.CurTime;
|
||||
|
||||
if (comp.Stage < ExpeditionStage.FinalCountdown && remaining < TimeSpan.FromSeconds(30))
|
||||
if (comp.Stage < ExpeditionStage.FinalCountdown && remaining < TimeSpan.FromSeconds(45))
|
||||
{
|
||||
comp.Stage = ExpeditionStage.FinalCountdown;
|
||||
Dirty(comp);
|
||||
Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-seconds", ("duration", TimeSpan.FromSeconds(30).Seconds)));
|
||||
Dirty(uid, comp);
|
||||
Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-seconds", ("duration", TimeSpan.FromSeconds(45).Seconds)));
|
||||
}
|
||||
else if (comp.Stage < ExpeditionStage.MusicCountdown && remaining < TimeSpan.FromMinutes(2))
|
||||
{
|
||||
// TODO: Some way to play audio attached to a map for players.
|
||||
comp.Stream = _audio.PlayGlobal(comp.Sound, Filter.BroadcastMap(Comp<MapComponent>(uid).MapId), true);
|
||||
comp.Stage = ExpeditionStage.MusicCountdown;
|
||||
Dirty(comp);
|
||||
Dirty(uid, comp);
|
||||
Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-minutes", ("duration", TimeSpan.FromMinutes(2).Minutes)));
|
||||
}
|
||||
else if (comp.Stage < ExpeditionStage.Countdown && remaining < TimeSpan.FromMinutes(5))
|
||||
{
|
||||
comp.Stage = ExpeditionStage.Countdown;
|
||||
Dirty(comp);
|
||||
Dirty(uid, comp);
|
||||
Announce(uid, Loc.GetString("salvage-expedition-announcement-countdown-minutes", ("duration", TimeSpan.FromMinutes(5).Minutes)));
|
||||
}
|
||||
// Auto-FTL out any shuttles
|
||||
|
||||
Reference in New Issue
Block a user