Action Bar (WIP)

Refactor item instance to use DatabaseLink
Labels now pop up when aiming at loot
Yeeted HUD trigger group UI into the abyss
Created rebindable action bar (missing: assigning actions)
Created Consumable Items
Refactored behaviors to work on consumable items
Implemented Velocity Conversion Behavior
This commit is contained in:
Reinier Vens 2021-04-18 05:13:20 +01:00
commit 4489b18452
217 changed files with 5105 additions and 5703 deletions

View file

@ -39,13 +39,18 @@ public class SensorData : BehaviorData
[Inspectable, JsonProperty("pingRadiusExponent"), Key(11)]
public float PingRadiusExponent = .5f;
public override IBehavior CreateInstance(EquippedItem item)
public override Behavior CreateInstance(EquippedItem item)
{
return new Sensor(this, item);
}
public override Behavior CreateInstance(ConsumableItemEffect item)
{
return new Sensor(this, item);
}
}
public class Sensor : IBehavior, IEventBehavior
public class Sensor : Behavior, IEventBehavior
{
private SensorData _data;
private float _pingCooldown;
@ -54,10 +59,6 @@ public class Sensor : IBehavior, IEventBehavior
private float _pingRadius;
private HashSet<Entity> _pingedEntities = new HashSet<Entity>();
private EquippedItem Item { get; }
public BehaviorData Data => _data;
public float Cooldown
{
get => saturate(_pingCooldown);
@ -81,9 +82,9 @@ public class Sensor : IBehavior, IEventBehavior
public void Ping()
{
if(_pingCooldown < 0 && Item.Entity.TryConsumeEnergy(Item.Evaluate(_data.PingEnergy)))
if(_pingCooldown < 0 && Entity.TryConsumeEnergy(Evaluate(_data.PingEnergy)))
{
Item.Entity.VisibilitySources[this] = Item.Evaluate(_data.PingVisibility);
Entity.VisibilitySources[this] = Evaluate(_data.PingVisibility);
_pinging = true;
_pingCooldown = 1;
_pingLerp = 0;
@ -93,18 +94,22 @@ public class Sensor : IBehavior, IEventBehavior
}
}
public Sensor(SensorData data, EquippedItem item)
public Sensor(SensorData data, EquippedItem item) : base(data, item)
{
_data = data;
Item = item;
}
public bool Execute(float dt)
public Sensor(SensorData data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
}
public override bool Execute(float dt)
{
if (_pinging)
{
_pingLerp += dt / _data.PingDuration;
_pingRadius = lerp(0, Item.Evaluate(_data.PingRange), pow(_pingLerp, _data.PingRadiusExponent));
_pingRadius = lerp(0, Evaluate(_data.PingRange), pow(_pingLerp, _data.PingRadiusExponent));
if (_pingLerp > 1)
{
_pinging = false;
@ -112,30 +117,27 @@ public class Sensor : IBehavior, IEventBehavior
}
}
_pingCooldown -= dt / Item.Evaluate(_data.PingCooldown);
_pingCooldown -= dt / Evaluate(_data.PingCooldown);
// TODO: Handle Active Detection / Visibility From Reflected Radiance
var hardpoint = Item.Entity.Hardpoints[Item.Position.x, Item.Position.y];
var forward = hardpoint != null && Item.Entity.HardpointTransforms.ContainsKey(hardpoint) ?
normalize(Item.Entity.HardpointTransforms[hardpoint].direction.xz) :
Item.Entity.Direction;
foreach (var entity in Item.Entity.Zone.Entities)
var forward = Direction.xz;
foreach (var entity in Entity.Zone.Entities)
{
if (entity == Item.Entity) continue;
if (entity == Entity) continue;
var diff = entity.Position.xz - Item.Entity.Position.xz;
var diff = entity.Position.xz - Entity.Position.xz;
var angle = acos(dot(forward, normalize(diff)));
var dist = length(diff);
float previous, next;
Item.Entity.EntityInfoGathered.TryGetValue(entity, out previous);
Entity.EntityInfoGathered.TryGetValue(entity, out previous);
if (!_pingedEntities.Contains(entity) && dist < _pingRadius)
{
_pingedEntities.Add(entity);
next = saturate(
previous +
entity.Visibility *
Item.Evaluate(_data.Sensitivity) *
Item.Evaluate(_data.PingBoost) *
Evaluate(_data.Sensitivity) *
Evaluate(_data.PingBoost) *
dist);
}
else
@ -143,13 +145,13 @@ public class Sensor : IBehavior, IEventBehavior
next = saturate(
previous +
entity.Visibility *
Item.Evaluate(_data.Sensitivity) *
Evaluate(_data.Sensitivity) *
_data.SensitivityCurve.Evaluate(angle / PI) *
dt / dist);
}
next *= 1 - Item.ItemManager.GameplaySettings.TargetInfoDecay * dt;
next *= 1 - ItemManager.GameplaySettings.TargetInfoDecay * dt;
//Context.Log($"{entity.Name} visibility {(int)(previous * 100)}% -> {(int)(next * 100)}%");
Item.Entity.EntityInfoGathered[entity] = next;
Entity.EntityInfoGathered[entity] = next;
}
return true;
}