Status Effect Alerts and Time Bugfixes (#39529)
* Bugefix * Clean up --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
7825d30562
commit
458e2d222c
@@ -69,7 +69,7 @@ public sealed partial class StatusEffectsSystem
|
|||||||
if (!TryGetStatusEffect(target, effectProto, out statusEffect))
|
if (!TryGetStatusEffect(target, effectProto, out statusEffect))
|
||||||
return TryAddStatusEffect(target, effectProto, out statusEffect, duration);
|
return TryAddStatusEffect(target, effectProto, out statusEffect, duration);
|
||||||
|
|
||||||
SetStatusEffectTime(statusEffect.Value, duration);
|
SetStatusEffectEndTime(statusEffect.Value, duration);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -291,7 +291,7 @@ public sealed partial class StatusEffectsSystem
|
|||||||
var meta = MetaData(effect);
|
var meta = MetaData(effect);
|
||||||
if (meta.EntityPrototype is not null && meta.EntityPrototype == effectProto)
|
if (meta.EntityPrototype is not null && meta.EntityPrototype == effectProto)
|
||||||
{
|
{
|
||||||
SetStatusEffectTime(effect, time);
|
SetStatusEffectEndTime(effect, time);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,47 +125,6 @@ public sealed partial class StatusEffectsSystem : EntitySystem
|
|||||||
PredictedQueueDel(ent.Owner);
|
PredictedQueueDel(ent.Owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetStatusEffectTime(EntityUid effect, TimeSpan? duration)
|
|
||||||
{
|
|
||||||
if (!_effectQuery.TryComp(effect, out var effectComp))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (duration is null)
|
|
||||||
{
|
|
||||||
if(effectComp.EndEffectTime is null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
effectComp.EndEffectTime = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
effectComp.EndEffectTime = _timing.CurTime + duration;
|
|
||||||
|
|
||||||
Dirty(effect, effectComp);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateStatusEffectTime(EntityUid effect, TimeSpan? duration)
|
|
||||||
{
|
|
||||||
if (!_effectQuery.TryComp(effect, out var effectComp))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// It's already infinitely long
|
|
||||||
if (effectComp.EndEffectTime is null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (duration is null)
|
|
||||||
effectComp.EndEffectTime = null;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var newEndTime = _timing.CurTime + duration;
|
|
||||||
if (effectComp.EndEffectTime >= newEndTime)
|
|
||||||
return;
|
|
||||||
|
|
||||||
effectComp.EndEffectTime = newEndTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dirty(effect, effectComp);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CanAddStatusEffect(EntityUid uid, EntProtoId effectProto)
|
public bool CanAddStatusEffect(EntityUid uid, EntProtoId effectProto)
|
||||||
{
|
{
|
||||||
if (!_proto.TryIndex(effectProto, out var effectProtoData))
|
if (!_proto.TryIndex(effectProto, out var effectProtoData))
|
||||||
@@ -227,13 +186,39 @@ public sealed partial class StatusEffectsSystem : EntitySystem
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddStatusEffectTime(EntityUid effect, TimeSpan delta)
|
private void UpdateStatusEffectTime(Entity<StatusEffectComponent?> effect, TimeSpan? duration)
|
||||||
{
|
{
|
||||||
if (!_effectQuery.TryComp(effect, out var effectComp))
|
if (!_effectQuery.Resolve(effect, ref effect.Comp))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// If we don't have an end time set, we want to just make the status effect end in delta time from now.
|
// It's already infinitely long
|
||||||
SetStatusEffectEndTime((effect, effectComp), (effectComp.EndEffectTime ?? _timing.CurTime) + delta);
|
if (effect.Comp.EndEffectTime is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TimeSpan? newEndTime = null;
|
||||||
|
|
||||||
|
if (duration is not null)
|
||||||
|
{
|
||||||
|
// Don't update time to a smaller timespan...
|
||||||
|
newEndTime = _timing.CurTime + duration;
|
||||||
|
if (effect.Comp.EndEffectTime >= newEndTime)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetStatusEffectEndTime(effect, newEndTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddStatusEffectTime(Entity<StatusEffectComponent?> effect, TimeSpan delta)
|
||||||
|
{
|
||||||
|
if (!_effectQuery.Resolve(effect, ref effect.Comp))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// It's already infinitely long can't add or subtract from infinity...
|
||||||
|
if (effect.Comp.EndEffectTime is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Add to the current end effect time, if we're here we should have one set already, and if it's null it's probably infinite.
|
||||||
|
SetStatusEffectEndTime((effect, effect.Comp), effect.Comp.EndEffectTime.Value + delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetStatusEffectEndTime(Entity<StatusEffectComponent?> ent, TimeSpan? endTime)
|
private void SetStatusEffectEndTime(Entity<StatusEffectComponent?> ent, TimeSpan? endTime)
|
||||||
|
|||||||
Reference in New Issue
Block a user