@@ -0,0 +1,31 @@
|
||||
using SS14.Shared.GameObjects;
|
||||
using SS14.Shared.Utility;
|
||||
using YamlDotNet.RepresentationModel;
|
||||
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
public abstract class ToolComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// For tool interactions that have a delay before action this will modify the rate, time to wait is divided by this value
|
||||
/// </summary>
|
||||
public float SpeedModifier { get; set; } = 1;
|
||||
|
||||
public override void LoadParameters(YamlMappingNode mapping)
|
||||
{
|
||||
if (mapping.TryGetNode("Speed", out YamlNode node))
|
||||
{
|
||||
SpeedModifier = node.AsFloat();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Status modifier which determines whether or not we can act as a tool at this time
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public virtual bool CanUse()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
public class CrowbarComponent : ToolComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// Tool that can be used to crowbar things apart, such as deconstructing
|
||||
/// </summary>
|
||||
public override string Name => "Crowbar";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
/// <summary>
|
||||
/// Tool used for interfacing/hacking into configurable computers
|
||||
/// </summary>
|
||||
public class MultitoolComponent : ToolComponent
|
||||
{
|
||||
public override string Name => "Multitool";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
public class ScrewdriverComponent : ToolComponent
|
||||
{
|
||||
/// <summary>
|
||||
/// Tool that interacts with technical components that need to be screwed in
|
||||
/// </summary>
|
||||
public override string Name => "Screwdriver";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using System;
|
||||
using SS14.Shared.Interfaces.GameObjects;
|
||||
using SS14.Shared.Utility;
|
||||
using YamlDotNet.RepresentationModel;
|
||||
using SS14.Server.GameObjects;
|
||||
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
/// <summary>
|
||||
/// Tool used to weld metal together, light things on fire, or melt into constituent parts
|
||||
/// </summary>
|
||||
class WelderComponent : ToolComponent, EntitySystems.IUse
|
||||
{
|
||||
public override string Name => "Welder";
|
||||
|
||||
/// <summary>
|
||||
/// Maximum fuel capacity the welder can hold
|
||||
/// </summary>
|
||||
public float FuelCapacity { get; set; } = 50;
|
||||
|
||||
/// <summary>
|
||||
/// Fuel the welder has to do tasks
|
||||
/// </summary>
|
||||
public float Fuel { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Default Cost of using the welder fuel for an action
|
||||
/// </summary>
|
||||
public const float DefaultFuelCost = 5;
|
||||
|
||||
/// <summary>
|
||||
/// Rate at which we expunge fuel from ourselves when activated
|
||||
/// </summary>
|
||||
public const float FuelLossRate = 0.2f;
|
||||
|
||||
/// <summary>
|
||||
/// Status of welder, whether it is ignited
|
||||
/// </summary>
|
||||
public bool Activated { get; private set; } = false;
|
||||
|
||||
//private string OnSprite { get; set; }
|
||||
//private string OffSprite { get; set; }
|
||||
|
||||
public override void LoadParameters(YamlMappingNode mapping)
|
||||
{
|
||||
base.LoadParameters(mapping);
|
||||
|
||||
if (mapping.TryGetNode("Capacity", out YamlNode node))
|
||||
{
|
||||
FuelCapacity = node.AsFloat();
|
||||
}
|
||||
|
||||
//if (mapping.TryGetNode("On", out node))
|
||||
//{
|
||||
// OnSprite = node.AsString();
|
||||
//}
|
||||
|
||||
//if (mapping.TryGetNode("Off", out node))
|
||||
//{
|
||||
// OffSprite = node.AsString();
|
||||
//}
|
||||
|
||||
if (mapping.TryGetNode("Fuel", out node))
|
||||
{
|
||||
Fuel = node.AsFloat();
|
||||
}
|
||||
else
|
||||
{
|
||||
Fuel = FuelCapacity;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
Fuel = Math.Min(Fuel - FuelLossRate, 0);
|
||||
|
||||
if(Activated && Fuel == 0)
|
||||
{
|
||||
ToggleStatus();
|
||||
}
|
||||
}
|
||||
|
||||
public bool CanUse(float value)
|
||||
{
|
||||
return Fuel > value;
|
||||
}
|
||||
|
||||
public override bool CanUse()
|
||||
{
|
||||
return CanUse(DefaultFuelCost);
|
||||
}
|
||||
|
||||
public bool CanActivate()
|
||||
{
|
||||
return Fuel > 0;
|
||||
}
|
||||
|
||||
public bool UseEntity(IEntity user)
|
||||
{
|
||||
return ToggleStatus();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deactivates welding tool if active, activates welding tool if possible
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool ToggleStatus()
|
||||
{
|
||||
if(Activated)
|
||||
{
|
||||
Activated = false;
|
||||
|
||||
//TODO : Change sprite on deactivation
|
||||
return true;
|
||||
}
|
||||
else if(CanActivate())
|
||||
{
|
||||
Activated = true;
|
||||
|
||||
//TODO : Change sprite on activation
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
/// <summary>
|
||||
/// Tool that can be used for some cutting interactions such as wires or hacking
|
||||
/// </summary>
|
||||
public class WirecutterComponent : ToolComponent
|
||||
{
|
||||
public override string Name => "Wirecutter";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
/// <summary>
|
||||
/// Wrenches bolts, and interacts with things that have been bolted
|
||||
/// </summary>
|
||||
public class WrenchComponent : ToolComponent
|
||||
{
|
||||
public override string Name => "Wrench";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user