Files
LuaCsForBarotraumaEP/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/ModuloComponent.cs
2022-02-26 02:43:01 +09:00

43 lines
1.4 KiB
C#

using System.Globalization;
using System.Xml.Linq;
namespace Barotrauma.Items.Components
{
class ModuloComponent : ItemComponent
{
private float modulus;
[InGameEditable, Serialize(1.0f, IsPropertySaveable.No, description: "The modulus of the operation. Must be non-zero.", alwaysUseInstanceValues: true)]
public float Modulus
{
get { return modulus; }
set
{
modulus = MathUtils.NearlyEqual(value, 0.0f) ? 1.0f : value;
}
}
public ModuloComponent(Item item, ContentXElement element) : base(item, element)
{
IsActive = true;
}
public override void ReceiveSignal(Signal signal, Connection connection)
{
switch (connection.Name)
{
case "set_modulus":
case "modulus":
float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out float newModulus);
Modulus = newModulus;
break;
case "signal_in":
float.TryParse(signal.value, NumberStyles.Float, CultureInfo.InvariantCulture, out float value);
signal.value = (value % modulus).ToString("G", CultureInfo.InvariantCulture);
item.SendSignal(signal, "signal_out");
break;
}
}
}
}