Remove IBody, IBodyPart, IMechanism and IMechanismBehavior (#4187)
* Remove IBody, IBodyPart, IMechanism and IMechanismBehavior interfaces * Summary cleanup
This commit is contained in:
@@ -1,178 +0,0 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Content.Shared.Body.Behavior;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Part;
|
||||
using Robust.Shared.GameObjects;
|
||||
|
||||
namespace Content.Shared.Body.Mechanism
|
||||
{
|
||||
public interface IMechanism : IComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// The body that owns the <see cref="IBodyPart"/> in which this
|
||||
/// <see cref="IMechanism"/> is in.
|
||||
/// </summary>
|
||||
IBody? Body { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The part in which this <see cref="IMechanism"/> is in.
|
||||
/// </summary>
|
||||
IBodyPart? Part { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The behaviors attached to this <see cref="IMechanism"/>
|
||||
/// mapped by their type.
|
||||
/// </summary>
|
||||
IReadOnlyDictionary<Type, IMechanismBehavior> Behaviors { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Max HP of this <see cref="IMechanism"/>.
|
||||
/// </summary>
|
||||
int MaxDurability { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Current HP of this <see cref="IMechanism"/>.
|
||||
/// </summary>
|
||||
int CurrentDurability { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// At what HP this <see cref="IMechanism"/> is completely destroyed.
|
||||
/// </summary>
|
||||
int DestroyThreshold { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Armor of this <see cref="IMechanism"/> against attacks.
|
||||
/// </summary>
|
||||
int Resistance { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines a handful of things - mostly whether this
|
||||
/// <see cref="IMechanism"/> can fit into a <see cref="IBodyPart"/>.
|
||||
/// </summary>
|
||||
// TODO BODY OnSizeChanged
|
||||
int Size { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// What kind of <see cref="IBodyPart"/> this
|
||||
/// <see cref="IMechanism"/> can be easily installed into.
|
||||
/// </summary>
|
||||
BodyPartCompatibility Compatibility { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Adds a <see cref="IMechanismBehavior"/> if this
|
||||
/// <see cref="IMechanism"/> does not have it already.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The behavior type to add.</typeparam>
|
||||
/// <returns>
|
||||
/// True if the behavior already existed, false if it had to be created.
|
||||
/// </returns>
|
||||
bool EnsureBehavior<T>(out T behavior) where T : IMechanismBehavior, new();
|
||||
|
||||
/// <summary>
|
||||
/// Checks if this <see cref="IMechanism"/> has the specified
|
||||
/// <see cref="IMechanismBehavior"/>.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">
|
||||
/// The type of <see cref="IMechanismBehavior"/> to check for.
|
||||
/// </typeparam>
|
||||
/// <returns>
|
||||
/// true if it has the <see cref="IMechanismBehavior"/>, false otherwise.
|
||||
/// </returns>
|
||||
bool HasBehavior<T>() where T : IMechanismBehavior;
|
||||
|
||||
/// <summary>
|
||||
/// Removes the specified <see cref="IMechanismBehavior"/> from this
|
||||
/// <see cref="IMechanism"/> if it has it.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">
|
||||
/// The type of <see cref="IMechanismBehavior"/> to remove.
|
||||
/// </typeparam>
|
||||
/// <returns>true if it was removed, false otherwise.</returns>
|
||||
bool TryRemoveBehavior<T>() where T : IMechanismBehavior;
|
||||
|
||||
/// <summary>
|
||||
/// Runs an update cycle for this <see cref="IMechanism"/>.
|
||||
/// </summary>
|
||||
/// <param name="frameTime">
|
||||
/// The amount of seconds that passed since the last update.
|
||||
/// </param>
|
||||
void Update(float frameTime);
|
||||
|
||||
// TODO BODY Turn these into event listeners so they dont need to be exposed
|
||||
/// <summary>
|
||||
/// Called when the containing <see cref="IBodyPart"/> is attached to a
|
||||
/// <see cref="IBody"/>.
|
||||
/// For instance, attaching a head with a brain inside to a body.
|
||||
/// DO NOT CALL THIS DIRECTLY FROM OUTSIDE BODY SYSTEM CODE!
|
||||
/// </summary>
|
||||
/// <param name="body">
|
||||
/// The body that this <see cref="IMechanism"/> was added to.
|
||||
/// </param>
|
||||
void AddedToBody(IBody body);
|
||||
|
||||
/// <summary>
|
||||
/// Called when the parent <see cref="IMechanism"/> is
|
||||
/// added into a <see cref="IBodyPart"/> that is not attached to a
|
||||
/// <see cref="IBody"/>.
|
||||
/// For instance, adding a brain to a dismembered head.
|
||||
/// DO NOT CALL THIS DIRECTLY FROM OUTSIDE BODY SYSTEM CODE!
|
||||
/// </summary>
|
||||
/// <param name="part">
|
||||
/// The part that this <see cref="IMechanism"/> was added to.
|
||||
/// </param>
|
||||
void AddedToPart(IBodyPart part);
|
||||
|
||||
/// <summary>
|
||||
/// Called when the parent <see cref="IMechanism"/> is added to a
|
||||
/// <see cref="IBodyPart"/> that is attached to a <see cref="IBody"/>.
|
||||
/// For instance, adding a brain to a head that is attached to a body.
|
||||
/// DO NOT CALL THIS DIRECTLY FROM OUTSIDE BODY SYSTEM CODE!
|
||||
/// </summary>
|
||||
/// <param name="body">
|
||||
/// The body that this <see cref="IMechanism"/> was added to.
|
||||
/// </param>
|
||||
/// <param name="part">
|
||||
/// The part that this <see cref="IMechanism"/> was added to.
|
||||
/// </param>
|
||||
void AddedToPartInBody(IBody body, IBodyPart part);
|
||||
|
||||
/// <summary>
|
||||
/// Called when the parent <see cref="IBodyPart"/> is removed from a
|
||||
/// <see cref="IBody"/>.
|
||||
/// For instance, removing a head with a brain inside from a body.
|
||||
/// DO NOT CALL THIS DIRECTLY FROM OUTSIDE BODY SYSTEM CODE!
|
||||
/// </summary>
|
||||
/// <param name="old">
|
||||
/// The body that this <see cref="IMechanism"/> was removed from.
|
||||
/// </param>
|
||||
void RemovedFromBody(IBody old);
|
||||
|
||||
/// <summary>
|
||||
/// Called when the parent <see cref="IMechanism"/> is
|
||||
/// removed from a <see cref="IBodyPart"/> that is not attached to a
|
||||
/// <see cref="IBody"/>.
|
||||
/// For instance, removing a brain from a dismembered head.
|
||||
/// DO NOT CALL THIS DIRECTLY FROM OUTSIDE BODY SYSTEM CODE!
|
||||
/// </summary>
|
||||
/// <param name="old">
|
||||
/// The part that this <see cref="IMechanism"/> was removed from.
|
||||
/// </param>
|
||||
void RemovedFromPart(IBodyPart old);
|
||||
|
||||
/// <summary>
|
||||
/// Called when the parent <see cref="IMechanism"/> is removed from a
|
||||
/// <see cref="IBodyPart"/> that is attached to a <see cref="IBody"/>.
|
||||
/// For instance, removing a brain from a head that is attached to a body.
|
||||
/// DO NOT CALL THIS DIRECTLY FROM OUTSIDE BODY SYSTEM CODE!
|
||||
/// </summary>
|
||||
/// <param name="oldBody">
|
||||
/// The body that this <see cref="IMechanism"/> was removed from.
|
||||
/// </param>
|
||||
/// <param name="oldPart">
|
||||
/// The part that this <see cref="IMechanism"/> was removed from.
|
||||
/// </param>
|
||||
void RemovedFromPartInBody(IBody oldBody, IBodyPart oldPart);
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
foreach (var mechanism in ComponentManager.EntityQuery<IMechanism>(true))
|
||||
foreach (var mechanism in ComponentManager.EntityQuery<SharedMechanismComponent>(true))
|
||||
{
|
||||
mechanism.Update(frameTime);
|
||||
}
|
||||
|
||||
@@ -14,23 +14,23 @@ using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared.Body.Mechanism
|
||||
{
|
||||
public abstract class SharedMechanismComponent : Component, IMechanism, ISerializationHooks
|
||||
public abstract class SharedMechanismComponent : Component, ISerializationHooks
|
||||
{
|
||||
public override string Name => "Mechanism";
|
||||
|
||||
protected readonly Dictionary<int, object> OptionsCache = new();
|
||||
protected IBody? BodyCache;
|
||||
protected SharedBodyComponent? BodyCache;
|
||||
protected int IdHash;
|
||||
protected IEntity? PerformerCache;
|
||||
private IBodyPart? _part;
|
||||
private SharedBodyPartComponent? _part;
|
||||
|
||||
[DataField("behaviors", serverOnly: true)] private HashSet<IMechanismBehavior> _behaviorTypes = new();
|
||||
[DataField("behaviors", serverOnly: true)] private HashSet<SharedMechanismBehavior> _behaviorTypes = new();
|
||||
|
||||
private readonly Dictionary<Type, IMechanismBehavior> _behaviors = new();
|
||||
private readonly Dictionary<Type, SharedMechanismBehavior> _behaviors = new();
|
||||
|
||||
public IBody? Body => Part?.Body;
|
||||
public SharedBodyComponent? Body => Part?.Body;
|
||||
|
||||
public IBodyPart? Part
|
||||
public SharedBodyPartComponent? Part
|
||||
{
|
||||
get => _part;
|
||||
set
|
||||
@@ -69,7 +69,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public IReadOnlyDictionary<Type, IMechanismBehavior> Behaviors => _behaviors;
|
||||
public IReadOnlyDictionary<Type, SharedMechanismBehavior> Behaviors => _behaviors;
|
||||
|
||||
[DataField("maxDurability")] public int MaxDurability { get; set; } = 10;
|
||||
|
||||
@@ -82,8 +82,16 @@ namespace Content.Shared.Body.Mechanism
|
||||
[DataField("resistance")] public int Resistance { get; set; } = 0;
|
||||
|
||||
// TODO BODY OnSizeChanged
|
||||
/// <summary>
|
||||
/// Determines whether this
|
||||
/// <see cref="SharedMechanismComponent"/> can fit into a <see cref="SharedBodyPartComponent"/>.
|
||||
/// </summary>
|
||||
[DataField("size")] public int Size { get; set; } = 1;
|
||||
|
||||
/// <summary>
|
||||
/// What kind of <see cref="SharedBodyPartComponent"/> this
|
||||
/// <see cref="SharedMechanismComponent"/> can be easily installed into.
|
||||
/// </summary>
|
||||
[DataField("compatibility")]
|
||||
public BodyPartCompatibility Compatibility { get; set; } = BodyPartCompatibility.Universal;
|
||||
|
||||
@@ -128,7 +136,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public bool EnsureBehavior<T>(out T behavior) where T : IMechanismBehavior, new()
|
||||
public bool EnsureBehavior<T>(out T behavior) where T : SharedMechanismBehavior, new()
|
||||
{
|
||||
if (_behaviors.TryGetValue(typeof(T), out var rawBehavior))
|
||||
{
|
||||
@@ -144,12 +152,12 @@ namespace Content.Shared.Body.Mechanism
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool HasBehavior<T>() where T : IMechanismBehavior
|
||||
public bool HasBehavior<T>() where T : SharedMechanismBehavior
|
||||
{
|
||||
return _behaviors.ContainsKey(typeof(T));
|
||||
}
|
||||
|
||||
public bool TryRemoveBehavior<T>() where T : IMechanismBehavior
|
||||
public bool TryRemoveBehavior<T>() where T : SharedMechanismBehavior
|
||||
{
|
||||
return _behaviors.Remove(typeof(T));
|
||||
}
|
||||
@@ -162,7 +170,8 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public void AddedToBody(IBody body)
|
||||
// TODO BODY Turn these into event listeners so they dont need to be exposed
|
||||
public void AddedToBody(SharedBodyComponent body)
|
||||
{
|
||||
DebugTools.AssertNotNull(Body);
|
||||
DebugTools.AssertNotNull(body);
|
||||
@@ -173,7 +182,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public void AddedToPart(IBodyPart part)
|
||||
public void AddedToPart(SharedBodyPartComponent part)
|
||||
{
|
||||
DebugTools.AssertNotNull(Part);
|
||||
DebugTools.AssertNotNull(part);
|
||||
@@ -186,7 +195,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public void AddedToPartInBody(IBody body, IBodyPart part)
|
||||
public void AddedToPartInBody(SharedBodyComponent body, SharedBodyPartComponent part)
|
||||
{
|
||||
DebugTools.AssertNotNull(Body);
|
||||
DebugTools.AssertNotNull(body);
|
||||
@@ -201,7 +210,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public void RemovedFromBody(IBody old)
|
||||
public void RemovedFromBody(SharedBodyComponent old)
|
||||
{
|
||||
DebugTools.AssertNull(Body);
|
||||
DebugTools.AssertNotNull(old);
|
||||
@@ -212,7 +221,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public void RemovedFromPart(IBodyPart old)
|
||||
public void RemovedFromPart(SharedBodyPartComponent old)
|
||||
{
|
||||
DebugTools.AssertNull(Part);
|
||||
DebugTools.AssertNotNull(old);
|
||||
@@ -225,7 +234,7 @@ namespace Content.Shared.Body.Mechanism
|
||||
}
|
||||
}
|
||||
|
||||
public void RemovedFromPartInBody(IBody oldBody, IBodyPart oldPart)
|
||||
public void RemovedFromPartInBody(SharedBodyComponent oldBody, SharedBodyPartComponent oldPart)
|
||||
{
|
||||
DebugTools.AssertNull(Body);
|
||||
DebugTools.AssertNotNull(oldBody);
|
||||
|
||||
Reference in New Issue
Block a user