fix singulo decay (#28743)

This commit is contained in:
Nemanja
2024-06-08 10:36:47 -04:00
committed by GitHub
parent 33e68dc51f
commit 4089d6a664
3 changed files with 7 additions and 81 deletions

View File

@@ -49,7 +49,7 @@ public sealed partial class ParticleAcceleratorSystem
ParticleAcceleratorPowerState.Level0 => 1, ParticleAcceleratorPowerState.Level0 => 1,
ParticleAcceleratorPowerState.Level1 => 2, ParticleAcceleratorPowerState.Level1 => 2,
ParticleAcceleratorPowerState.Level2 => 3, ParticleAcceleratorPowerState.Level2 => 3,
ParticleAcceleratorPowerState.Level3 => 10, ParticleAcceleratorPowerState.Level3 => 6,
_ => 0, _ => 0,
} * 10; } * 10;
} }

View File

@@ -55,14 +55,12 @@ public sealed class SingularitySystem : SharedSingularitySystem
var vvHandle = Vvm.GetTypeHandler<SingularityComponent>(); var vvHandle = Vvm.GetTypeHandler<SingularityComponent>();
vvHandle.AddPath(nameof(SingularityComponent.Energy), (_, comp) => comp.Energy, SetEnergy); vvHandle.AddPath(nameof(SingularityComponent.Energy), (_, comp) => comp.Energy, SetEnergy);
vvHandle.AddPath(nameof(SingularityComponent.TargetUpdatePeriod), (_, comp) => comp.TargetUpdatePeriod, SetUpdatePeriod);
} }
public override void Shutdown() public override void Shutdown()
{ {
var vvHandle = Vvm.GetTypeHandler<SingularityComponent>(); var vvHandle = Vvm.GetTypeHandler<SingularityComponent>();
vvHandle.RemovePath(nameof(SingularityComponent.Energy)); vvHandle.RemovePath(nameof(SingularityComponent.Energy));
vvHandle.RemovePath(nameof(SingularityComponent.TargetUpdatePeriod));
base.Shutdown(); base.Shutdown();
} }
@@ -78,39 +76,10 @@ public sealed class SingularitySystem : SharedSingularitySystem
var query = EntityQueryEnumerator<SingularityComponent>(); var query = EntityQueryEnumerator<SingularityComponent>();
while (query.MoveNext(out var uid, out var singularity)) while (query.MoveNext(out var uid, out var singularity))
{ {
var curTime = _timing.CurTime; AdjustEnergy(uid, -singularity.EnergyDrain * frameTime, singularity: singularity);
if (singularity.NextUpdateTime <= curTime)
Update(uid, curTime - singularity.LastUpdateTime, singularity);
} }
} }
/// <summary>
/// Handles the gradual energy loss and dissipation of singularity.
/// </summary>
/// <param name="uid">The uid of the singularity to update.</param>
/// <param name="singularity">The state of the singularity to update.</param>
public void Update(EntityUid uid, SingularityComponent? singularity = null)
{
if (Resolve(uid, ref singularity))
Update(uid, _timing.CurTime - singularity.LastUpdateTime, singularity);
}
/// <summary>
/// Handles the gradual energy loss and dissipation of a singularity.
/// </summary>
/// <param name="uid">The uid of the singularity to update.</param>
/// <param name="frameTime">The amount of time that has elapsed since the last update.</param>
/// <param name="singularity">The state of the singularity to update.</param>
public void Update(EntityUid uid, TimeSpan frameTime, SingularityComponent? singularity = null)
{
if(!Resolve(uid, ref singularity))
return;
singularity.LastUpdateTime = _timing.CurTime;
singularity.NextUpdateTime = singularity.LastUpdateTime + singularity.TargetUpdatePeriod;
AdjustEnergy(uid, -singularity.EnergyDrain * (float)frameTime.TotalSeconds, singularity: singularity);
}
#region Getters/Setters #region Getters/Setters
/// <summary> /// <summary>
@@ -166,28 +135,6 @@ public sealed class SingularitySystem : SharedSingularitySystem
SetEnergy(uid, MathHelper.Clamp(newValue, min, max), singularity); SetEnergy(uid, MathHelper.Clamp(newValue, min, max), singularity);
} }
/// <summary>
/// Setter for <see cref="SingularityComponent.TargetUpdatePeriod"/>.
/// If the new target time implies that the singularity should have updated it does so immediately.
/// </summary>
/// <param name="uid">The uid of the singularity to set the update period for.</param>
/// <param name="value">The new update period for the singularity.</param>
/// <param name="singularity">The state of the singularity to set the update period for.</param>
public void SetUpdatePeriod(EntityUid uid, TimeSpan value, SingularityComponent? singularity = null)
{
if(!Resolve(uid, ref singularity))
return;
if (MathHelper.CloseTo(singularity.TargetUpdatePeriod.TotalSeconds, value.TotalSeconds))
return;
singularity.TargetUpdatePeriod = value;
singularity.NextUpdateTime = singularity.LastUpdateTime + singularity.TargetUpdatePeriod;
var curTime = _timing.CurTime;
if (singularity.NextUpdateTime <= curTime)
Update(uid, curTime - singularity.LastUpdateTime, singularity);
}
#endregion Getters/Setters #endregion Getters/Setters
@@ -203,9 +150,6 @@ public sealed class SingularitySystem : SharedSingularitySystem
/// <param name="args">The event arguments.</param> /// <param name="args">The event arguments.</param>
protected override void OnSingularityStartup(EntityUid uid, SingularityComponent comp, ComponentStartup args) protected override void OnSingularityStartup(EntityUid uid, SingularityComponent comp, ComponentStartup args)
{ {
comp.LastUpdateTime = _timing.CurTime;
comp.NextUpdateTime = comp.LastUpdateTime + comp.TargetUpdatePeriod;
MetaDataComponent? metaData = null; MetaDataComponent? metaData = null;
if (Resolve(uid, ref metaData) && metaData.EntityLifeStage <= EntityLifeStage.Initializing) if (Resolve(uid, ref metaData) && metaData.EntityLifeStage <= EntityLifeStage.Initializing)
_audio.PlayPvs(comp.FormationSound, uid); _audio.PlayPvs(comp.FormationSound, uid);
@@ -223,7 +167,7 @@ public sealed class SingularitySystem : SharedSingularitySystem
/// <param name="args">The event arguments.</param> /// <param name="args">The event arguments.</param>
public void OnDistortionStartup(EntityUid uid, SingularityDistortionComponent comp, ComponentStartup args) public void OnDistortionStartup(EntityUid uid, SingularityDistortionComponent comp, ComponentStartup args)
{ {
_pvs.AddGlobalOverride(GetNetEntity(uid)); _pvs.AddGlobalOverride(uid);
} }
/// <summary> /// <summary>
@@ -269,6 +213,10 @@ public sealed class SingularitySystem : SharedSingularitySystem
/// <param name="args">The event arguments.</param> /// <param name="args">The event arguments.</param>
public void OnConsumedEntity(EntityUid uid, SingularityComponent comp, ref EntityConsumedByEventHorizonEvent args) public void OnConsumedEntity(EntityUid uid, SingularityComponent comp, ref EntityConsumedByEventHorizonEvent args)
{ {
// Don't double count singulo food
if (HasComp<SinguloFoodComponent>(args.Entity))
return;
AdjustEnergy(uid, BaseEntityEnergy, singularity: comp); AdjustEnergy(uid, BaseEntityEnergy, singularity: comp);
} }

View File

@@ -81,26 +81,4 @@ public sealed partial class SingularityComponent : Component
); );
#endregion Audio #endregion Audio
#region Update Timing
/// <summary>
/// The amount of time that should elapse between automated updates to this singularity.
/// </summary>
[DataField("updatePeriod")]
[ViewVariables(VVAccess.ReadWrite)]
public TimeSpan TargetUpdatePeriod = TimeSpan.FromSeconds(1.0);
/// <summary>
/// </summary>
[ViewVariables(VVAccess.ReadOnly)]
public TimeSpan NextUpdateTime = default!;
/// <summary>
/// The last time this singularity was updated.
/// </summary>
[ViewVariables(VVAccess.ReadOnly)]
public TimeSpan LastUpdateTime = default!;
#endregion Update Timing
} }