Files
OldThink/Content.Server/Tools/Components/WelderComponent.cs

70 lines
2.6 KiB
C#
Raw Normal View History

2021-06-09 22:19:39 +02:00
using Content.Shared.Chemistry.Reagent;
using Content.Shared.Damage;
using Content.Shared.FixedPoint;
using Content.Shared.Sound;
using Content.Shared.Tools.Components;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
2020-05-11 15:26:07 +02:00
2021-06-09 22:19:39 +02:00
namespace Content.Server.Tools.Components
2020-05-11 15:26:07 +02:00
{
[RegisterComponent]
public sealed class WelderComponent : SharedWelderComponent
2020-05-11 15:26:07 +02:00
{
/// <summary>
/// Solution on the entity that contains the fuel.
2020-05-11 15:26:07 +02:00
/// </summary>
[DataField("fuelSolution")]
public string FuelSolution { get; } = "Welder";
2020-05-11 15:26:07 +02:00
/// <summary>
/// Reagent that will be used as fuel for welding.
2020-05-11 15:26:07 +02:00
/// </summary>
[DataField("fuelReagent", customTypeSerializer:typeof(PrototypeIdSerializer<ReagentPrototype>))]
public string FuelReagent { get; } = "WeldingFuel";
2020-05-11 15:26:07 +02:00
/// <summary>
/// Fuel consumption per second, while the welder is active.
2020-05-11 15:26:07 +02:00
/// </summary>
[DataField("fuelConsumption")]
public FixedPoint2 FuelConsumption { get; } = FixedPoint2.New(0.05f);
2020-05-11 15:26:07 +02:00
/// <summary>
/// A fuel amount to be consumed when the welder goes from being unlit to being lit.
2020-05-11 15:26:07 +02:00
/// </summary>
[DataField("welderOnConsume")]
public FixedPoint2 FuelLitCost { get; } = FixedPoint2.New(0.5f);
/// <summary>
/// Sound played when the welder is turned off.
/// </summary>
[DataField("welderOffSounds")]
public SoundSpecifier WelderOffSounds { get; } = new SoundCollectionSpecifier("WelderOff");
A big hecking chemistry-related refactor. (#3055) * A big hecking chemistry-related refactor. Changed SolutionContainerCaps. It now describes "stock" behavior for interacting with solutions that is pre-implemented by SolutionContainerComponent. As such things like syringes do not check it anymore (on themselves) to see "can we remove reagent from ourselves". That's assumed by it... being a syringe. SolutionContainerCaps now has different flags more accurately describing possible reagent interaction behaviors. ISolutionInteractionsComponent is the interface that describes the common behaviors like "what happens when injected with a syringe". This is implemented by SolutionContainerComponent but could be implemented by other classes. One notable example that drove me to making this interface was the /vg/station circuit imprinter which splits reagent poured in into its two reservoir beakers. Having this interface allows us to do this "proxying" behavior hack-free. (the hacks in /vg/ code were somewhat dirty...). PourableComponent has been replaced SolutionTransferComponent. It now describes both give-and-take behavior for the common reagent containers. This is in line with /vg/'s /obj/item/weapon/reagent_containers architecture. "Taking" in this context is ONLY from reagent tanks like fuel tanks. Oh, should I mention that fuel tanks and such have a proper component now? They do. Because of this behavioral change, reagent tanks DO NOT have Pourable anymore. Removing from reagent tanks is now in the hands of the item used on them. Welders and fire extinguishers now have code for removing from them. This sounds bad at first but remember that all have quite unique behavior related to this: Welders cause explosions if lit and can ONLY be fueled at fuel tanks. Extinguishers can be filled at any tank, etc... The code for this is also simpler due to ISolutionInteractionsComponent now so... IAfterInteract now works like IInteractUsing with the Priority levels and "return true to block further handlers" behavior. This was necessary to make extinguishers prioritize taking from tanks over spraying. Explicitly coded interactions like welders refueling also means they refuse instantly to full now, which they didn't before. And it plays the sound. Etc... Probably more stuff I'm forgetting. * Review improvements.
2021-02-03 14:05:31 +01:00
/// <summary>
/// Sound played when the tool is turned on.
/// </summary>
[DataField("welderOnSounds")]
public SoundSpecifier WelderOnSounds { get; } = new SoundCollectionSpecifier("WelderOn");
[DataField("welderRefill")]
public SoundSpecifier WelderRefill { get; } = new SoundPathSpecifier("/Audio/Effects/refill.ogg");
/// <summary>
/// When the welder is lit, this damage is added to the base melee weapon damage.
/// </summary>
/// <remarks>
/// If this is a standard welder, this damage bonus should probably subtract the entity's standard melee weapon damage
/// and replace it all with heat damage.
/// </remarks>
[DataField("litMeleeDamageBonus")]
public DamageSpecifier LitMeleeDamageBonus = new();
/// <summary>
/// Whether the item is safe to refill while lit without exploding the tank.
/// </summary>
[DataField("tankSafe")]
public bool TankSafe = false; //I have no idea what I'm doing
2020-05-11 15:26:07 +02:00
}
}