Add new Dirty() override for Component.Owner removal (#4144)

This commit is contained in:
Leon Friedrich
2023-06-18 05:19:40 +12:00
committed by GitHub
parent 3bd7309536
commit a9eafd4025
4 changed files with 21 additions and 13 deletions

View File

@@ -81,11 +81,11 @@ namespace Robust.Client.GameObjects
}
/// <inheritdoc />
public override void Dirty(Component component, MetaDataComponent? meta = null)
public override void Dirty(EntityUid uid, Component component, MetaDataComponent? meta = null)
{
// Client only dirties during prediction
if (_gameTiming.InPrediction)
base.Dirty(component, meta);
base.Dirty(uid, component, meta);
}
public override EntityStringRepresentation ToPrettyString(EntityUid uid)

View File

@@ -404,21 +404,18 @@ namespace Robust.Shared.GameObjects
}
}
public virtual void Dirty(Component component, MetaDataComponent? meta = null)
[Obsolete("use override with an EntityUid")]
public void Dirty(Component component, MetaDataComponent? meta = null)
{
#pragma warning disable CS0618
var owner = component.Owner;
#pragma warning restore CS0618
Dirty(component.Owner, component, meta);
}
// Deserialization will cause this to be true.
// ReSharper disable once ConditionIsAlwaysTrueOrFalse
if (!owner.IsValid() || component.LifeStage >= ComponentLifeStage.Removing)
public virtual void Dirty(EntityUid uid, Component component, MetaDataComponent? meta = null)
{
if (component.LifeStage >= ComponentLifeStage.Removing || !component.NetSyncEnabled)
return;
if (!component.NetSyncEnabled)
return;
DirtyEntity(owner, meta);
DirtyEntity(uid, meta);
component.LastModifiedTick = CurrentTick;
}

View File

@@ -200,6 +200,15 @@ public partial class EntitySystem
EntityManager.Dirty(component, meta);
}
/// <summary>
/// Marks a component as dirty. This also implicitly dirties the entity this component belongs to.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
protected void Dirty(EntityUid uid, Component component, MetaDataComponent? meta = null)
{
EntityManager.Dirty(uid, component, meta);
}
/// <summary>
/// Retrieves the name of an entity.
/// </summary>

View File

@@ -102,6 +102,8 @@ namespace Robust.Shared.GameObjects
public void Dirty(Component component, MetaDataComponent? metadata = null);
public void Dirty(EntityUid uid, Component component, MetaDataComponent? meta = null);
public void QueueDeleteEntity(EntityUid uid);
public bool IsQueuedForDeletion(EntityUid uid);