Exemplo n.º 1
0
        private void OnInteract(EntityUid uid, AirAlarmComponent component, InteractHandEvent args)
        {
            if (!_interactionSystem.InRangeUnobstructed(args.User, args.Target))
            {
                return;
            }

            if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor))
            {
                return;
            }

            if (EntityManager.TryGetComponent(uid, out WiresComponent wire) && wire.IsPanelOpen)
            {
                args.Handled = false;
                return;
            }

            if (EntityManager.TryGetComponent(uid, out ApcPowerReceiverComponent recv) && !recv.Powered)
            {
                return;
            }

            _uiSystem.GetUiOrNull(component.Owner, SharedAirAlarmInterfaceKey.Key)?.Open(actor.PlayerSession);
            component.ActivePlayers.Add(actor.PlayerSession.UserId);
            AddActiveInterface(uid);
            SendAddress(uid);
            SendAlarmMode(uid);
            SendThresholds(uid);
            SyncAllDevices(uid);
            SendAirData(uid);
        }
Exemplo n.º 2
0
        private void OnAtmosAlarm(EntityUid uid, AirAlarmComponent component, AtmosMonitorAlarmEvent args)
        {
            if (component.ActivePlayers.Count != 0)
            {
                SyncAllDevices(uid);
                SendAirData(uid);
            }

            string addr = string.Empty;

            if (EntityManager.TryGetComponent(uid, out DeviceNetworkComponent netConn))
            {
                addr = netConn.Address;
            }


            if (args.HighestNetworkType == AtmosMonitorAlarmType.Danger)
            {
                SetMode(uid, addr, AirAlarmMode.None, true);
                // set mode to off to mimic the vents/scrubbers being turned off
                // update UI
                //
                // no, the mode isn't processed here - it's literally just
                // set to what mimics 'off'
            }
            else if (args.HighestNetworkType == AtmosMonitorAlarmType.Normal)
            {
                // if the mode is still set to off, set it to filtering instead
                // alternatively, set it to the last saved mode
                //
                // no, this still doesn't execute the mode
                SetMode(uid, addr, AirAlarmMode.Filtering, true);
            }
        }
Exemplo n.º 3
0
 private void OnResyncAll(EntityUid uid, AirAlarmComponent component, AirAlarmResyncAllDevicesMessage args)
 {
     if (AccessCheck(uid, args.Session.AttachedEntity, component))
     {
         component.DeviceData.Clear();
         SyncAllDevices(uid);
     }
 }
Exemplo n.º 4
0
 private void OnClose(EntityUid uid, AirAlarmComponent component, BoundUIClosedEvent args)
 {
     component.ActivePlayers.Remove(args.Session.UserId);
     if (component.ActivePlayers.Count == 0)
     {
         RemoveActiveInterface(uid);
     }
 }
Exemplo n.º 5
0
        private void OnPacketRecv(EntityUid uid, AirAlarmComponent controller, PacketSentEvent args)
        {
            if (!args.Data.TryGetValue(DeviceNetworkConstants.Command, out string?cmd))
            {
                return;
            }

            switch (cmd)
            {
            case AirAlarmSyncData:
                if (!args.Data.TryGetValue(AirAlarmSyncData, out IAtmosDeviceData? data) ||
                    data == null ||
                    !controller.CanSync)
                {
                    break;
                }

                // Save into component.
                // Sync data to interface.
                // _airAlarmDataSystem.UpdateDeviceData(uid, args.SenderAddress, data);
                //
                _uiSystem.TrySendUiMessage(uid, SharedAirAlarmInterfaceKey.Key, new AirAlarmUpdateDeviceDataMessage(args.SenderAddress, data));
                if (HasComp <WiresComponent>(uid))
                {
                    controller.UpdateWires();
                }
                if (!controller.DeviceData.TryAdd(args.SenderAddress, data))
                {
                    controller.DeviceData[args.SenderAddress] = data;
                }

                return;

            case AirAlarmSetDataStatus:
                if (!args.Data.TryGetValue(AirAlarmSetDataStatus, out bool dataStatus))
                {
                    break;
                }

                // Sync data to interface.
                // This should say if the result
                // failed, or succeeded. Don't save it.l
                SyncDevice(uid, args.SenderAddress);

                return;

            case AirAlarmSetMode:
                if (!args.Data.TryGetValue(AirAlarmSetMode, out AirAlarmMode alarmMode))
                {
                    break;
                }

                SetMode(uid, args.SenderAddress, alarmMode);

                return;
            }
        }
Exemplo n.º 6
0
 private void OnPowerChanged(EntityUid uid, AirAlarmComponent component, PowerChangedEvent args)
 {
     if (!args.Powered)
     {
         ForceCloseAllInterfaces(uid);
         component.CurrentModeUpdater = null;
         component.DeviceData.Clear();
     }
 }
Exemplo n.º 7
0
 private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateDeviceDataMessage args)
 {
     if (AccessCheck(uid, args.Session.AttachedEntity, component))
     {
         SetDeviceData(uid, args.Address, args.Data);
     }
     else
     {
         SyncDevice(uid, args.Address);
     }
 }
Exemplo n.º 8
0
 private void OnUpdateThreshold(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmThresholdMessage args)
 {
     if (AccessCheck(uid, args.Session.AttachedEntity, component))
     {
         SetThreshold(uid, args.Threshold, args.Type, args.Gas);
     }
     else
     {
         SendThresholds(uid);
     }
 }
Exemplo n.º 9
0
        private void OnUpdateAlarmMode(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateAlarmModeMessage args)
        {
            string addr = string.Empty;

            if (EntityManager.TryGetComponent(uid, out DeviceNetworkComponent netConn))
            {
                addr = netConn.Address;
            }
            if (AccessCheck(uid, args.Session.AttachedEntity, component))
            {
                SetMode(uid, addr, args.Mode, true, false);
            }
            else
            {
                SendAlarmMode(uid);
            }
        }
Exemplo n.º 10
0
 private void OnShutdown(EntityUid uid, AirAlarmComponent component, ComponentShutdown args)
 {
     _activeUserInterfaces.Remove(uid);
 }