var vvHandle = Vvm.GetTypeHandler<SingularityComponent>();
vvHandle.AddPath(nameof(SingularityComponent.Energy), (_, comp) => comp.Energy, SetEnergy);
- vvHandle.AddPath(nameof(SingularityComponent.TargetUpdatePeriod), (_, comp) => comp.TargetUpdatePeriod, SetUpdatePeriod);
}
public override void Shutdown()
{
var vvHandle = Vvm.GetTypeHandler<SingularityComponent>();
vvHandle.RemovePath(nameof(SingularityComponent.Energy));
- vvHandle.RemovePath(nameof(SingularityComponent.TargetUpdatePeriod));
base.Shutdown();
}
var query = EntityQueryEnumerator<SingularityComponent>();
while (query.MoveNext(out var uid, out var singularity))
{
- var curTime = _timing.CurTime;
- if (singularity.NextUpdateTime <= curTime)
- Update(uid, curTime - singularity.LastUpdateTime, singularity);
+ AdjustEnergy(uid, -singularity.EnergyDrain * frameTime, singularity: 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
/// <summary>
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
/// <param name="args">The event arguments.</param>
protected override void OnSingularityStartup(EntityUid uid, SingularityComponent comp, ComponentStartup args)
{
- comp.LastUpdateTime = _timing.CurTime;
- comp.NextUpdateTime = comp.LastUpdateTime + comp.TargetUpdatePeriod;
-
MetaDataComponent? metaData = null;
if (Resolve(uid, ref metaData) && metaData.EntityLifeStage <= EntityLifeStage.Initializing)
_audio.PlayPvs(comp.FormationSound, uid);
/// <param name="args">The event arguments.</param>
public void OnDistortionStartup(EntityUid uid, SingularityDistortionComponent comp, ComponentStartup args)
{
- _pvs.AddGlobalOverride(GetNetEntity(uid));
+ _pvs.AddGlobalOverride(uid);
}
/// <summary>
/// <param name="args">The event arguments.</param>
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);
}