#nullable enable
using System.Collections.Generic;
using Content.Server.Body.Mechanisms.Behaviors;
using Content.Server.GameObjects.Components.Body;
using Content.Shared.GameObjects.Components.Body;
namespace Content.Server.Body.Mechanisms
{
public interface IMechanism
{
string Id { get; }
string Name { get; set; }
///
/// Professional description of the .
///
string Description { get; set; }
///
/// The message to display upon examining a mob with this Mechanism installed.
/// If the string is empty (""), no message will be displayed.
///
string ExamineMessage { get; set; }
// TODO: Make RSI properties sane
///
/// Path to the RSI that represents this .
///
string RSIPath { get; set; }
///
/// RSI state that represents this .
///
string RSIState { get; set; }
///
/// Max HP of this .
///
int MaxDurability { get; set; }
///
/// Current HP of this .
///
int CurrentDurability { get; set; }
///
/// At what HP this is completely destroyed.
///
int DestroyThreshold { get; set; }
///
/// Armor of this against attacks.
///
int Resistance { get; set; }
///
/// Determines a handful of things - mostly whether this
/// can fit into a .
///
// TODO: OnSizeChanged
int Size { get; set; }
///
/// What kind of this can be
/// easily installed into.
///
BodyPartCompatibility Compatibility { get; set; }
IReadOnlyList Behaviors { get; }
IBodyManagerComponent? Body { get; }
IBodyPart? Part { get; set; }
void EnsureInitialize();
void InstalledIntoBody();
void RemovedFromBody(IBodyManagerComponent old);
///
/// This method is called by before
/// is called.
///
void PreMetabolism(float frameTime);
///
/// This method is called by after
/// is called.
///
void PostMetabolism(float frameTime);
void AddBehavior(MechanismBehavior behavior);
///
/// Removes a behavior from this mechanism.
///
/// The behavior to remove.
/// True if it was removed, false otherwise.
bool RemoveBehavior(MechanismBehavior behavior);
}
}