Stop medium behaviors retaining configs

This commit is contained in:
Meta Vens 2026-06-15 17:54:59 +01:00
commit 85eca69d37
13 changed files with 83 additions and 58 deletions

View file

@ -28,7 +28,8 @@ public class CapacitorConfig : RuntimeBehaviorConfig
public class Capacitor : Behavior
{
private CapacitorConfig _data;
private readonly PerformanceStat _capacity;
private readonly PerformanceStat _efficiency;
public float Charge { get; private set; }
public float Capacity { get; private set; }
@ -42,18 +43,20 @@ public class Capacitor : Behavior
public Capacitor(CapacitorConfig data, EquippedItem item) : base(data, item)
{
_data = data;
_capacity = data.Capacity;
_efficiency = data.Efficiency;
}
public Capacitor(CapacitorConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
_capacity = data.Capacity;
_efficiency = data.Efficiency;
}
public override bool Execute(float dt)
{
Capacity = Evaluate(_data.Capacity);
Efficiency = Evaluate(_data.Efficiency);
Capacity = Evaluate(_capacity);
Efficiency = Evaluate(_efficiency);
return true;
}
}
}

View file

@ -21,15 +21,11 @@ public class CockpitConfig : RuntimeBehaviorConfig
public class Cockpit : Behavior
{
private CockpitConfig _data;
public Cockpit(CockpitConfig data, EquippedItem item) : base(data, item)
{
_data = data;
}
public Cockpit(CockpitConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
}
}
}

View file

@ -21,15 +21,11 @@ public class HeatStorageConfig : RuntimeBehaviorConfig
public class HeatStorage : Behavior
{
private HeatStorageConfig _data;
public HeatStorage(HeatStorageConfig data, EquippedItem item) : base(data, item)
{
_data = data;
}
public HeatStorage(HeatStorageConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
}
}
}

View file

@ -37,22 +37,31 @@ public class MiningTool : Behavior
public Guid AsteroidBelt;
public int Asteroid;
private MiningToolConfig _data;
private readonly PerformanceStat _damagePerSecond;
private readonly PerformanceStat _efficiency;
private readonly PerformanceStat _penetration;
private readonly PerformanceStat _range;
public float Range { get; private set; }
public MiningTool(MiningToolConfig data, EquippedItem item) : base(data, item)
{
_data = data;
_damagePerSecond = data.DamagePerSecond;
_efficiency = data.Efficiency;
_penetration = data.Penetration;
_range = data.Range;
}
public MiningTool(MiningToolConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
_damagePerSecond = data.DamagePerSecond;
_efficiency = data.Efficiency;
_penetration = data.Penetration;
_range = data.Range;
}
public override bool Execute(float dt)
{
Range = Evaluate(_data.Range);
Range = Evaluate(_range);
var belt = Entity.Zone.AsteroidBelts[AsteroidBelt];
if (AsteroidBelt != Guid.Empty &&
Entity.Zone.AsteroidExists(AsteroidBelt, Asteroid) &&
@ -62,12 +71,12 @@ public class MiningTool : Behavior
Entity,
AsteroidBelt,
Asteroid,
Evaluate(_data.DamagePerSecond) * dt,
Evaluate(_data.Efficiency),
Evaluate(_data.Penetration));
Evaluate(_damagePerSecond) * dt,
Evaluate(_efficiency),
Evaluate(_penetration));
return true;
}
return false;
}
}
}

View file

@ -34,7 +34,9 @@ public class ResourceScanner : Behavior, IAlwaysUpdatedBehavior
{
public int Asteroid = -1;
private ResourceScannerConfig _data;
private readonly PerformanceStat _range;
private readonly PerformanceStat _minimumDensity;
private readonly PerformanceStat _scanDuration;
private float _scanTime;
private Guid _scanTarget;
@ -58,12 +60,16 @@ public class ResourceScanner : Behavior, IAlwaysUpdatedBehavior
public ResourceScanner(ResourceScannerConfig data, EquippedItem item) : base(data, item)
{
_data = data;
_range = data.Range;
_minimumDensity = data.MinimumDensity;
_scanDuration = data.ScanDuration;
}
public ResourceScanner(ResourceScannerConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
_range = data.Range;
_minimumDensity = data.MinimumDensity;
_scanDuration = data.ScanDuration;
}
public override bool Execute(float dt)
@ -100,8 +106,8 @@ public class ResourceScanner : Behavior, IAlwaysUpdatedBehavior
public void Update(float delta)
{
Range = Evaluate(_data.Range);
MinimumDensity = Evaluate(_data.MinimumDensity);
ScanDuration = Evaluate(_data.ScanDuration);
Range = Evaluate(_range);
MinimumDensity = Evaluate(_minimumDensity);
ScanDuration = Evaluate(_scanDuration);
}
}

View file

@ -29,21 +29,24 @@ public class Shield : Behavior, IProgressBehavior
public float Efficiency { get; private set; }
public float EnergyUsage { get; private set; }
private ShieldConfig _data;
private readonly PerformanceStat _efficiency;
private readonly PerformanceStat _energyUsage;
public Shield(ShieldConfig data, EquippedItem item) : base(data, item)
{
_data = data;
_efficiency = data.Efficiency;
_energyUsage = data.EnergyUsage;
}
public Shield(ShieldConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
_efficiency = data.Efficiency;
_energyUsage = data.EnergyUsage;
}
public override bool Execute(float dt)
{
Efficiency = Evaluate(_data.Efficiency);
EnergyUsage = Evaluate(_data.EnergyUsage);
Efficiency = Evaluate(_efficiency);
EnergyUsage = Evaluate(_energyUsage);
return true;
}
@ -59,4 +62,4 @@ public class Shield : Behavior, IProgressBehavior
}
public virtual float Progress => Item.ThermalPerformance;
}
}

View file

@ -19,17 +19,13 @@ public class SwitchConfig : RuntimeBehaviorConfig
public class Switch : Behavior, IActivatedBehavior
{
private SwitchConfig _data;
public bool Activated { get; set; }
public Switch(SwitchConfig data, EquippedItem item) : base(data, item)
{
_data = data;
}
public Switch(SwitchConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
}
public override bool Execute(float dt)
@ -46,4 +42,4 @@ public class Switch : Behavior, IActivatedBehavior
{
Activated = false;
}
}
}

View file

@ -29,23 +29,24 @@ public class ThermotoggleConfig : RuntimeBehaviorConfig
public class Thermotoggle : Behavior
{
public float TargetTemperature;
private ThermotoggleConfig _data;
public ThermotoggleConfig ThermotoggleConfig => _data;
public bool Adjustable { get; }
private readonly bool _highPass;
public Thermotoggle(ThermotoggleConfig data, EquippedItem item) : base(data, item)
{
_data = data;
TargetTemperature = data.TargetTemperature;
_highPass = data.HighPass;
Adjustable = data.Adjustable;
}
public Thermotoggle(ThermotoggleConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
TargetTemperature = data.TargetTemperature;
_highPass = data.HighPass;
Adjustable = data.Adjustable;
}
public override bool Execute(float dt)
{
return Temperature < TargetTemperature ^ _data.HighPass;
return Temperature < TargetTemperature ^ _highPass;
}
}
}

View file

@ -46,13 +46,19 @@ public class Thruster : Behavior, IAnalogBehavior
set => _input = saturate(value);
}
private ThrusterConfig _data;
private readonly PerformanceStat _thrust;
private readonly PerformanceStat _visibility;
private readonly PerformanceStat _heat;
private readonly PerformanceStat _energyUsage;
private float _input;
public Thruster(ThrusterConfig data, EquippedItem item) : base(data, item)
{
_data = data;
_thrust = data.Thrust;
_visibility = data.Visibility;
_heat = data.Heat;
_energyUsage = data.EnergyUsage;
ParticlesPrefab = data.ParticlesPrefab;
var hullShape = ItemManager.GetRuntimeShape(Entity.Hull);
var itemShape = ItemManager.GetRuntimeShape(item.EquippableItem);
@ -60,28 +66,31 @@ public class Thruster : Behavior, IAnalogBehavior
var itemCenter = hullShape.Inset(itemShape, item.Position, item.EquippableItem.Rotation).CenterOfMass;
var toCenter = hullCenter - itemCenter;
Torque = -dot(normalize(toCenter), float2(1, 0).Rotate(item.EquippableItem.Rotation));
Thrust = Evaluate(_data.Thrust);
Thrust = Evaluate(_thrust);
}
public Thruster(ThrusterConfig data, ConsumableItemEffect item) : base(data, item)
{
_data = data;
_thrust = data.Thrust;
_visibility = data.Visibility;
_heat = data.Heat;
_energyUsage = data.EnergyUsage;
ParticlesPrefab = data.ParticlesPrefab;
Torque = 0;
Thrust = Evaluate(_data.Thrust);
Thrust = Evaluate(_thrust);
}
public override bool Execute(float dt)
{
Item.SetAudioParameter(SpecialAudioParameter.Intensity, _input);
if(_input > .01f && Entity.TryConsumeEnergy(_input * Evaluate(_data.EnergyUsage)))
if(_input > .01f && Entity.TryConsumeEnergy(_input * Evaluate(_energyUsage)))
{
Thrust = Evaluate(_data.Thrust);
Thrust = Evaluate(_thrust);
Entity.Velocity -= Direction.xz * _input * Thrust / Entity.Mass * dt;
Entity.Direction = mul(Entity.Direction,
Unity.Mathematics.float2x2.Rotate(_input * Torque * Thrust * ItemManager.GameplaySettings.TorqueMultiplier / Entity.Mass * dt));
AddHeat(_input * Evaluate(_data.Heat) * dt);
var vis = _input * Evaluate(_data.Visibility);
AddHeat(_input * Evaluate(_heat) * dt);
var vis = _input * Evaluate(_visibility);
if (!Entity.VisibilitySources.TryGetValue(this, out var existingVisibility) || vis > existingVisibility)
Entity.VisibilitySources[this] = vis;
return true;