Remove drop argument in part removal methods and reorganize code (#2289)

* Remove IBodyPart.Drop and move attach/detach logic to body part code

* Fix stack overflow
This commit is contained in:
DrSmugleaf
2020-10-18 11:12:17 +02:00
committed by GitHub
parent 7053352e18
commit 34e0330187
9 changed files with 47 additions and 49 deletions

View File

@@ -45,18 +45,12 @@ namespace Content.Shared.GameObjects.Components.Body.Part
if (old != null)
{
foreach (var mechanism in _mechanisms)
{
mechanism.RemovedFromBody(old);
}
RemovedFromBody(old);
}
if (value != null)
{
foreach (var mechanism in _mechanisms)
{
mechanism.AddedToBody();
}
AddedToBody();
}
}
}
@@ -189,13 +183,6 @@ namespace Content.Shared.GameObjects.Components.Body.Part
}
}
public bool Drop()
{
Body = null;
Owner.Transform.AttachToGridOrMap();
return true;
}
public bool SurgeryCheck(SurgeryType surgery)
{
return SurgeryDataComponent?.CheckSurgery(surgery) ?? false;
@@ -301,6 +288,36 @@ namespace Content.Shared.GameObjects.Components.Body.Part
mechanism.Owner.Delete();
return true;
}
private void AddedToBody()
{
Owner.Transform.AttachParent(Body!.Owner);
OnAddedToBody();
foreach (var mechanism in _mechanisms)
{
mechanism.AddedToBody();
}
}
private void RemovedFromBody(IBody old)
{
if (!Owner.Transform.Deleted)
{
Owner.Transform.AttachToGridOrMap();
}
OnRemovedFromBody(old);
foreach (var mechanism in _mechanisms)
{
mechanism.RemovedFromBody(old);
}
}
protected virtual void OnAddedToBody() { }
protected virtual void OnRemovedFromBody(IBody old) { }
}
[Serializable, NetSerializable]