Skip to content

Sensors And Detection

se5a edited this page Mar 28, 2020 · 4 revisions

Sensors And Detection

Emissions:

Some Entities emit an EM signature which consists of one (or more? - capability is there but I may remove it) triangular waveforms. the data for a waveform consists of: double WavelengthAverage_nm; double WavelengthMin_nm; double WavelengthMax_nm;

names should give a good indication of what they do, except possibly for WavelengthAverage_nm which I may rename, it's really the wavelength that has the highest magnitude. These are stored in SensorProfileDB.EmittedEMSpectra as a Dictionary<EMWaveForm, double> the value is the magnitude of the signal. Note that because we store the WavelenghtMin and WavelengthMax, note that the waveform does not have to be an Isosceles triangle.

Changing Emmissions

for entities which will change the emission magnitude, change the value of SensorProfileDB.EmittedEMSpectra[EMWaveForm] in the SensorProfile

Reflections:

Entities can also reflect emissions from other entities, this is somewhat expensive to do so currently it only gets calculated if the last time it was calculated is more than 30min or the position from last time it was calculated is > 0.1Au these numbers may need tweaking in the future. it is stored in SensorProfileDB.ReflectedEMSpectra

Detecting An Emission

If an entity has the SensorReceverAtbDB it can detect entities that are emitting or reflecting. Like emitters, SensorRecevers also have an EMWaveForm. this EMWaveForm defines the ideal waveform that the sensor can detect. if the emission waveform falls outside the receivers detection capability then it doesn't get detected. note that the SensorReceverAtbDB takes variables in the init to create an Isosceles triangle for the there are two values that are important to a detection: SignalStrength_kW and SignalQuality

when a receiver is attempting to detect an emitter, the processor first adjusts the signal, attenuating it for distance. after that, it checks if the SignalStrength_kW falls into the capability of the receiver. if so, it then calculates the actual received SignalStrength, and the Distortion. the SignalQuality is then calculated as a percentage, using the difference between the peak signal wavelength (WavelengthAverage_nm) and the maximum wavelength (WavelengthMax_nm) and the Distortion. Note that Distortion gets a 2 * penalty if the peak signal falls outside the receivers capability.

An ideal detection looks like this:


An less ideal but not too bad looks like this:

A poor quality detection looks like this:

Position and movement accuracy is entirely based off the SignalStrength. Quality is (will be) used for more detailed information, such as mass, total thrust, component info etc. Resolution is also currently unused, but will eventually be used to help differentiate between multiple ships in close proximity, differentiating between components, etc.

Still to do: Systems need a list of sensor entities that are made up from a detection, I've sort of got sensor entities being made, but I need to create a system faction entity to store system specific info for that faction. Need to check planets, I don't think they're currently being detected (Sol is getting detected just fine however) Need to maybe add a time/history component to sensor entities, some things need to be up to date to the latest detection regardless of strength and quality, and some things need to go with the best quality even if it is older. Orbits for example need to be refined over time to get a perfect orbit from a number of poor signals. once this has been gotten we need to no longer try improve the orbit, unless the orbit has changed (which is more than possible if the entity is a ship)
Components need to have emissions and need to update the magnitude depending on what they're doing. Planetary details need to be gotten and refined from sensors. resolution and maybe specific wavelengths should come into play here. Tech research areas need to be added. ActiveSensors - this will likely just be linking up an emitter with a receiver and getting the reflected signal. might have to redactor the current code to make this work efficiently though.

Clone this wiki locally