コード例 #1
0
 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);
     }
 }
コード例 #2
0
 private void OnProviderAnchorStateChanged(EntityUid uid, ExtensionCableProviderComponent provider, ref AnchorStateChangedEvent args)
 {
     if (args.Anchored)
     {
         Connect(uid, provider);
     }
     else
     {
         Disconnect(uid, provider);
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
 public ProviderConnectedEvent(ExtensionCableProviderComponent provider)
 {
     Provider = provider;
 }
コード例 #8
0
 private void OnProviderReAnchor(EntityUid uid, ExtensionCableProviderComponent component, ref ReAnchorEvent args)
 {
     Disconnect(uid, component);
     Connect(uid, component);
 }
コード例 #9
0
 private void Disconnect(EntityUid uid, ExtensionCableProviderComponent provider)
 {
     // same as OnProviderShutdown
     provider.Connectable = false;
     ResetReceivers(provider);
 }
コード例 #10
0
 private void OnProviderStarted(EntityUid uid, ExtensionCableProviderComponent provider, ComponentStartup args)
 {
     Connect(uid, provider);
 }
コード例 #11
0
 private void OnProviderShutdown(EntityUid uid, ExtensionCableProviderComponent provider, ComponentShutdown args)
 {
     provider.Connectable = false;
     ResetReceivers(provider);
 }