Correct anchor events (#6140)
This commit is contained in:
@@ -22,8 +22,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
|
|||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
SubscribeLocalEvent<GasPortableComponent, AnchorAttemptEvent>(OnPortableAnchorAttempt);
|
SubscribeLocalEvent<GasPortableComponent, AnchorAttemptEvent>(OnPortableAnchorAttempt);
|
||||||
SubscribeLocalEvent<GasPortableComponent, AnchoredEvent>(OnPortableAnchored);
|
SubscribeLocalEvent<GasPortableComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||||
SubscribeLocalEvent<GasPortableComponent, UnanchoredEvent>(OnPortableUnanchored);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnPortableAnchorAttempt(EntityUid uid, GasPortableComponent component, AnchorAttemptEvent args)
|
private void OnPortableAnchorAttempt(EntityUid uid, GasPortableComponent component, AnchorAttemptEvent args)
|
||||||
@@ -36,7 +35,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
|
|||||||
args.Cancel();
|
args.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnPortableAnchored(EntityUid uid, GasPortableComponent portable, AnchoredEvent args)
|
private void OnAnchorChanged(EntityUid uid, GasPortableComponent portable, ref AnchorStateChangedEvent args)
|
||||||
{
|
{
|
||||||
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
|
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
|
||||||
return;
|
return;
|
||||||
@@ -44,27 +43,11 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
|
|||||||
if (!nodeContainer.TryGetNode(portable.PortName, out PipeNode? portableNode))
|
if (!nodeContainer.TryGetNode(portable.PortName, out PipeNode? portableNode))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
portableNode.ConnectionsEnabled = true;
|
portableNode.ConnectionsEnabled = args.Anchored;
|
||||||
|
|
||||||
if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance))
|
if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance))
|
||||||
{
|
{
|
||||||
appearance.SetData(GasPortableVisuals.ConnectedState, true);
|
appearance.SetData(GasPortableVisuals.ConnectedState, args.Anchored);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnPortableUnanchored(EntityUid uid, GasPortableComponent portable, UnanchoredEvent args)
|
|
||||||
{
|
|
||||||
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!nodeContainer.TryGetNode(portable.PortName, out PipeNode? portableNode))
|
|
||||||
return;
|
|
||||||
|
|
||||||
portableNode.ConnectionsEnabled = false;
|
|
||||||
|
|
||||||
if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance))
|
|
||||||
{
|
|
||||||
appearance.SetData(GasPortableVisuals.ConnectedState, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ namespace Content.Server.Construction
|
|||||||
|
|
||||||
transform.Anchored = true;
|
transform.Anchored = true;
|
||||||
|
|
||||||
RaiseLocalEvent(uid, new AnchoredEvent(userUid, usingUid), false);
|
RaiseLocalEvent(uid, new UserAnchoredEvent(userUid, usingUid), false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ namespace Content.Server.Construction
|
|||||||
|
|
||||||
transform.Anchored = false;
|
transform.Anchored = false;
|
||||||
|
|
||||||
RaiseLocalEvent(uid, new UnanchoredEvent(userUid, usingUid), false);
|
RaiseLocalEvent(uid, new UserUnanchoredEvent(userUid, usingUid), false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,9 +71,14 @@ namespace Content.Server.Construction.Components
|
|||||||
public BeforeAnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
public BeforeAnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AnchoredEvent : BaseAnchoredEvent
|
/// <summary>
|
||||||
|
/// Raised when an entity with an anchorable component is anchored. Note that you may instead want the more
|
||||||
|
/// general <see cref="AnchorStateChangedEvent"/>. This event has the benefit of having user & tool information,
|
||||||
|
/// as a result of interactions mediated by the <see cref="AnchorableSystem"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class UserAnchoredEvent : BaseAnchoredEvent
|
||||||
{
|
{
|
||||||
public AnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
public UserAnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -84,8 +89,14 @@ namespace Content.Server.Construction.Components
|
|||||||
public BeforeUnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
public BeforeUnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UnanchoredEvent : BaseAnchoredEvent
|
/// <summary>
|
||||||
|
/// Raised when an entity with an anchorable component is unanchored. Note that you will probably also need to
|
||||||
|
/// subscribe to the more general <see cref="AnchorStateChangedEvent"/>, which gets raised BEFORE this one. This
|
||||||
|
/// event has the benefit of having user & tool information, whereas the more general event may be due to
|
||||||
|
/// explosions or grid-destruction or other interactions not mediated by the <see cref="AnchorableSystem"/>.
|
||||||
|
/// </summary>
|
||||||
|
public class UserUnanchoredEvent : BaseAnchoredEvent
|
||||||
{
|
{
|
||||||
public UnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
public UserUnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,15 +45,14 @@ namespace Content.Server.Disposal.Unit.EntitySystems
|
|||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, AnchoredEvent>(OnAnchored);
|
SubscribeLocalEvent<DisposalUnitComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, UnanchoredEvent>(OnUnanchored);
|
|
||||||
// TODO: Predict me when hands predicted
|
// TODO: Predict me when hands predicted
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, RelayMovementEntityEvent>(HandleMovement);
|
SubscribeLocalEvent<DisposalUnitComponent, RelayMovementEntityEvent>(HandleMovement);
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, PowerChangedEvent>(HandlePowerChange);
|
SubscribeLocalEvent<DisposalUnitComponent, PowerChangedEvent>(HandlePowerChange);
|
||||||
|
|
||||||
// Component lifetime
|
// Component lifetime
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, ComponentInit>(HandleDisposalInit);
|
SubscribeLocalEvent<DisposalUnitComponent, ComponentInit>(HandleDisposalInit);
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, ComponentShutdown>(HandleDisposalShutdown);
|
SubscribeLocalEvent<DisposalUnitComponent, ComponentRemove>(HandleDisposalRemove);
|
||||||
|
|
||||||
SubscribeLocalEvent<DisposalUnitComponent, ThrowHitByEvent>(HandleThrowCollide);
|
SubscribeLocalEvent<DisposalUnitComponent, ThrowHitByEvent>(HandleThrowCollide);
|
||||||
|
|
||||||
@@ -244,7 +243,7 @@ namespace Content.Server.Disposal.Unit.EntitySystems
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleDisposalShutdown(EntityUid uid, DisposalUnitComponent component, ComponentShutdown args)
|
private void HandleDisposalRemove(EntityUid uid, DisposalUnitComponent component, ComponentRemove args)
|
||||||
{
|
{
|
||||||
foreach (var entity in component.Container.ContainedEntities.ToArray())
|
foreach (var entity in component.Container.ContainedEntities.ToArray())
|
||||||
{
|
{
|
||||||
@@ -313,15 +312,11 @@ namespace Content.Server.Disposal.Unit.EntitySystems
|
|||||||
Remove(component, args.Entity);
|
Remove(component, args.Entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnAnchored(EntityUid uid, DisposalUnitComponent component, AnchoredEvent args)
|
private void OnAnchorChanged(EntityUid uid, DisposalUnitComponent component, ref AnchorStateChangedEvent args)
|
||||||
{
|
{
|
||||||
UpdateVisualState(component);
|
UpdateVisualState(component);
|
||||||
}
|
if (!args.Anchored)
|
||||||
|
TryEjectContents(component);
|
||||||
private void OnUnanchored(EntityUid uid, DisposalUnitComponent component, UnanchoredEvent args)
|
|
||||||
{
|
|
||||||
UpdateVisualState(component);
|
|
||||||
TryEjectContents(component);
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace Content.Server.Fluids.EntitySystems
|
|||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
SubscribeLocalEvent<PuddleComponent, UnanchoredEvent>(OnUnanchored);
|
SubscribeLocalEvent<PuddleComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||||
SubscribeLocalEvent<PuddleComponent, ExaminedEvent>(HandlePuddleExamined);
|
SubscribeLocalEvent<PuddleComponent, ExaminedEvent>(HandlePuddleExamined);
|
||||||
SubscribeLocalEvent<PuddleComponent, SolutionChangedEvent>(OnUpdate);
|
SubscribeLocalEvent<PuddleComponent, SolutionChangedEvent>(OnUpdate);
|
||||||
SubscribeLocalEvent<PuddleComponent, ComponentInit>(OnInit);
|
SubscribeLocalEvent<PuddleComponent, ComponentInit>(OnInit);
|
||||||
@@ -95,12 +95,10 @@ namespace Content.Server.Fluids.EntitySystems
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnUnanchored(EntityUid uid, PuddleComponent puddle, UnanchoredEvent unanchoredEvent)
|
private void OnAnchorChanged(EntityUid uid, PuddleComponent puddle, ref AnchorStateChangedEvent args)
|
||||||
{
|
{
|
||||||
if (!EntityManager.GetComponent<TransformComponent>(puddle.Owner).Anchored)
|
if (!args.Anchored)
|
||||||
return;
|
QueueDel(uid);
|
||||||
|
|
||||||
EntityManager.QueueDeleteEntity(puddle.Owner);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -46,8 +46,7 @@ namespace Content.Server.Nuke
|
|||||||
// anchoring logic
|
// anchoring logic
|
||||||
SubscribeLocalEvent<NukeComponent, AnchorAttemptEvent>(OnAnchorAttempt);
|
SubscribeLocalEvent<NukeComponent, AnchorAttemptEvent>(OnAnchorAttempt);
|
||||||
SubscribeLocalEvent<NukeComponent, UnanchorAttemptEvent>(OnUnanchorAttempt);
|
SubscribeLocalEvent<NukeComponent, UnanchorAttemptEvent>(OnUnanchorAttempt);
|
||||||
SubscribeLocalEvent<NukeComponent, AnchoredEvent>(OnWasAnchored);
|
SubscribeLocalEvent<NukeComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||||
SubscribeLocalEvent<NukeComponent, UnanchoredEvent>(OnWasUnanchored);
|
|
||||||
|
|
||||||
// ui events
|
// ui events
|
||||||
SubscribeLocalEvent<NukeComponent, NukeEjectMessage>(OnEjectButtonPressed);
|
SubscribeLocalEvent<NukeComponent, NukeEjectMessage>(OnEjectButtonPressed);
|
||||||
@@ -154,12 +153,7 @@ namespace Content.Server.Nuke
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnWasUnanchored(EntityUid uid, NukeComponent component, UnanchoredEvent args)
|
private void OnAnchorChanged(EntityUid uid, NukeComponent component, ref AnchorStateChangedEvent args)
|
||||||
{
|
|
||||||
UpdateUserInterface(uid, component);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnWasAnchored(EntityUid uid, NukeComponent component, AnchoredEvent args)
|
|
||||||
{
|
{
|
||||||
UpdateUserInterface(uid, component);
|
UpdateUserInterface(uid, component);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user