Aetheria/Assets/Scripts/ServerShared/ItemBehaviors/Sensor.cs
hyperion51 0b46d5ee39 Database Support
Refactored almost everything, but most importantly we now integrate with RethinkDB for game data.
2020-03-22 19:05:26 +00:00

70 lines
No EOL
2.3 KiB
C#

using MessagePack;
using Newtonsoft.Json;
[InspectableField]
[MessagePackObject]
[JsonObject(MemberSerialization.OptIn)]
public class SensorBehaviorData : IItemBehaviorData
{
[InspectableField] [JsonProperty("radiance")] [Key(0)]
public PerformanceStat Radiance;
[InspectableField] [JsonProperty("masking")] [Key(1)]
public PerformanceStat RadianceMasking;
[InspectableField] [JsonProperty("sensitivity")] [Key(2)]
public PerformanceStat Sensitivity;
[InspectableField] [JsonProperty("range")] [Key(3)]
public PerformanceStat Range;
public IItemBehavior CreateInstance(GameContext context, Ship ship, Gear item)
{
return new SensorBehavior(context, this, ship, item);
}
}
public class SensorBehavior : IItemBehavior
{
private SensorBehaviorData _data;
public Ship Ship { get; }
public Gear Item { get; }
public GameContext Context { get; }
public IItemBehaviorData Data => _data;
public SensorBehavior(GameContext context, SensorBehaviorData data, Ship ship, Gear item)
{
_data = data;
Ship = ship;
Item = item;
Context = context;
}
public void Update(float delta)
{
// var ship = Hardpoint.Ship.Ship.transform;
// var contacts =
// Physics.OverlapSphere(ship.position, _data.Range.Evaluate(Hardpoint)).Where(c=>c.attachedRigidbody?.GetComponent<Targetable>()!=null).Select(c=>c.attachedRigidbody.GetComponent<Targetable>());
// foreach (var contact in contacts)
// {
// var diff = (contact.transform.position - ship.position).Flatland();
// var angle = acos(dot(ship.forward.Flatland().normalized,
// diff.normalized)) / (float)PI;
// var sens = _data.Sensitivity.Evaluate(Hardpoint) *
// Hardpoint.Ship.HullData.VisibilityCurve.Evaluate(saturate(angle));
// var vis = contact.Visibility / diff.sqrMagnitude;
// if(vis > 1/sens)
// Hardpoint.Ship.Contacts[contact] = Time.time;
// }
//
// Hardpoint.Ship.VisibilitySources[this] = _data.Radiance.Evaluate(Hardpoint) / _data.RadianceMasking.Evaluate(Hardpoint);
// TODO: Handle Active Detection / Visibility From Reflected Radiance
}
public void FixedUpdate(float delta)
{
}
}