/// <summary> /// Serialize suit sensor status into device network package. /// </summary> public NetworkPayload SuitSensorToPacket(SuitSensorStatus status) { var payload = new NetworkPayload() { [DeviceNetworkConstants.Command] = DeviceNetworkConstants.CmdUpdatedState, [SuitSensorConstants.NET_NAME] = status.Name, [SuitSensorConstants.NET_JOB] = status.Job, [SuitSensorConstants.NET_IS_ALIVE] = status.IsAlive, }; if (status.TotalDamage != null) { payload.Add(SuitSensorConstants.NET_TOTAL_DAMAGE, status.TotalDamage); } if (status.Coordinates != null) { payload.Add(SuitSensorConstants.NET_CORDINATES, status.Coordinates); } return(payload); }
/// <summary> /// Try to deserialize device network message into suit sensor status /// </summary> public SuitSensorStatus?PacketToSuitSensor(NetworkPayload payload) { // check command if (!payload.TryGetValue(DeviceNetworkConstants.Command, out string?command)) { return(null); } if (command != DeviceNetworkConstants.CmdUpdatedState) { return(null); } // check name, job and alive if (!payload.TryGetValue(SuitSensorConstants.NET_NAME, out string?name)) { return(null); } if (!payload.TryGetValue(SuitSensorConstants.NET_JOB, out string?job)) { return(null); } if (!payload.TryGetValue(SuitSensorConstants.NET_IS_ALIVE, out bool?isAlive)) { return(null); } // try get total damage and cords (optionals) payload.TryGetValue(SuitSensorConstants.NET_TOTAL_DAMAGE, out int?totalDamage); payload.TryGetValue(SuitSensorConstants.NET_CORDINATES, out MapCoordinates? cords); var status = new SuitSensorStatus(name, job) { IsAlive = isAlive.Value, TotalDamage = totalDamage, Coordinates = cords }; return(status); }
public SuitSensorStatus?GetSensorState(EntityUid uid, SuitSensorComponent?sensor = null, TransformComponent?transform = null) { if (!Resolve(uid, ref sensor, ref transform)) { return(null); } // check if sensor is enabled and worn by user if (sensor.Mode == SuitSensorMode.SensorOff || sensor.User == null) { return(null); } // try to get mobs id from ID slot var userName = Loc.GetString("suit-sensor-component-unknown-name"); var userJob = Loc.GetString("suit-sensor-component-unknown-job"); if (_idCardSystem.TryFindIdCard(sensor.User.Value, out var card)) { if (card.FullName != null) { userName = card.FullName; } if (card.JobTitle != null) { userJob = card.JobTitle; } } // get health mob state var isAlive = false; if (EntityManager.TryGetComponent(sensor.User.Value, out MobStateComponent? mobState)) { isAlive = mobState.IsAlive(); } // get mob total damage var totalDamage = 0; if (EntityManager.TryGetComponent(sensor.User.Value, out DamageableComponent? damageable)) { totalDamage = damageable.TotalDamage.Int(); } // finally, form suit sensor status var status = new SuitSensorStatus(userName, userJob); switch (sensor.Mode) { case SuitSensorMode.SensorBinary: status.IsAlive = isAlive; break; case SuitSensorMode.SensorVitals: status.IsAlive = isAlive; status.TotalDamage = totalDamage; break; case SuitSensorMode.SensorCords: status.IsAlive = isAlive; status.TotalDamage = totalDamage; status.Coordinates = transform.MapPosition; break; } return(status); }