private void OnProviderStarted(EntityUid uid, ExtensionCableProviderComponent provider, ComponentStartup args) { foreach (var receiver in FindAvailableReceivers(uid, provider.TransferRange)) { receiver.Provider?.LinkedReceivers.Remove(receiver); receiver.Provider = provider; provider.LinkedReceivers.Add(receiver); RaiseLocalEvent(receiver.Owner, new ProviderConnectedEvent(provider), broadcast: false); RaiseLocalEvent(uid, new ReceiverConnectedEvent(receiver), broadcast: false); } }
private void OnProviderAnchorStateChanged(EntityUid uid, ExtensionCableProviderComponent provider, ref AnchorStateChangedEvent args) { if (args.Anchored) { Connect(uid, provider); } else { Disconnect(uid, provider); } }
private void OnProviderShutdown(EntityUid uid, ExtensionCableProviderComponent provider, ComponentShutdown args) { var xform = Transform(uid); // If grid deleting no need to update power. if (_mapManager.TryGetGrid(xform.GridUid, out var grid)) { if (MetaData(grid.GridEntityId).EntityLifeStage > EntityLifeStage.MapInitialized) { return; } } Disconnect(uid, provider); }
private void ResetReceivers(ExtensionCableProviderComponent provider) { var receivers = provider.LinkedReceivers.ToArray(); foreach (var receiver in receivers) { receiver.Provider = null; RaiseLocalEvent(receiver.Owner.Uid, new ProviderDisconnectedEvent(provider), broadcast: false); RaiseLocalEvent(provider.Owner.Uid, new ReceiverDisconnectedEvent(receiver), broadcast: false); } foreach (var receiver in receivers) { TryFindAndSetProvider(receiver); } }
private void OnProviderAnchorStateChanged(EntityUid uid, ExtensionCableProviderComponent provider, ref AnchorStateChangedEvent args) { if (args.Anchored) { provider.Connectable = true; // same as OnProviderStarted foreach (var receiver in FindAvailableReceivers(uid, provider.TransferRange)) { receiver.Provider?.LinkedReceivers.Remove(receiver); receiver.Provider = provider; provider.LinkedReceivers.Add(receiver); RaiseLocalEvent(receiver.Owner, new ProviderConnectedEvent(provider), broadcast: false); RaiseLocalEvent(uid, new ReceiverConnectedEvent(receiver), broadcast: false); } } else { // same as OnProviderShutdown provider.Connectable = false; ResetReceivers(provider); } }
private void ResetReceivers(ExtensionCableProviderComponent provider) { var receivers = provider.LinkedReceivers.ToArray(); foreach (var receiver in receivers) { receiver.Provider = null; RaiseLocalEvent(receiver.Owner, new ProviderDisconnectedEvent(provider), broadcast: false); RaiseLocalEvent(provider.Owner, new ReceiverDisconnectedEvent(receiver), broadcast: false); } foreach (var receiver in receivers) { // No point resetting what the receiver is doing if it's deleting, plus significant perf savings // in not doing needless lookups if (MetaData(receiver.Owner).EntityLifeStage > EntityLifeStage.MapInitialized) { continue; } TryFindAndSetProvider(receiver); } }
public ProviderConnectedEvent(ExtensionCableProviderComponent provider) { Provider = provider; }
private void OnProviderReAnchor(EntityUid uid, ExtensionCableProviderComponent component, ref ReAnchorEvent args) { Disconnect(uid, component); Connect(uid, component); }
private void Disconnect(EntityUid uid, ExtensionCableProviderComponent provider) { // same as OnProviderShutdown provider.Connectable = false; ResetReceivers(provider); }
private void OnProviderStarted(EntityUid uid, ExtensionCableProviderComponent provider, ComponentStartup args) { Connect(uid, provider); }
private void OnProviderShutdown(EntityUid uid, ExtensionCableProviderComponent provider, ComponentShutdown args) { provider.Connectable = false; ResetReceivers(provider); }