Adds Basic Tools (#27)

* Basic Tools

* Adds tool prototypes
This commit is contained in:
clusterfack
2018-02-06 19:03:36 -06:00
committed by GitHub
parent 1452502fbf
commit 059832d324
18 changed files with 308 additions and 5 deletions

View File

@@ -25,6 +25,13 @@ namespace Content.Client
factory.RegisterIgnore("PowerStorage");
factory.RegisterIgnore("PowerGenerator");
factory.RegisterIgnore("Wirecutter");
factory.RegisterIgnore("Screwdriver");
factory.RegisterIgnore("Multitool");
factory.RegisterIgnore("Welder");
factory.RegisterIgnore("Wrench");
factory.RegisterIgnore("Crowbar");
factory.Register<HandsComponent>();
factory.RegisterReference<HandsComponent, IHandsComponent>();

View File

@@ -57,6 +57,13 @@
<ItemGroup>
<Compile Include="EntryPoint.cs" />
<Compile Include="GameObjects\Components\Doors\ServerDoorComponent.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\BaseTool.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\CrowbarComponent.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\MultitoolComponent.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\ScrewdriverComponent.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\WelderComponent.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\WirecutterComponent.cs" />
<Compile Include="GameObjects\Components\Interactable\Tools\WrenchComponent.cs" />
<Compile Include="GameObjects\Components\Power\PowerStorageComponent.cs" />
<Compile Include="GameObjects\Components\Power\PowerGeneratorComponent.cs" />
<Compile Include="GameObjects\Components\Power\PowerDevice.cs" />
@@ -108,7 +115,5 @@
<ContentAssemblies Include="$(OutputPath)Content.Server.pdb" Condition="'$(Configuration)' == 'Debug'" />
<ContentAssemblies Include="$(OutputPath)Content.Shared.pdb" Condition="'$(Configuration)' == 'Debug'" />
</ItemGroup>
<ItemGroup>
<Folder Include="GameObjects\Components\Interactable\" />
</ItemGroup>
<ItemGroup />
</Project>

View File

@@ -1,6 +1,7 @@

using Content.Server.GameObjects;
using Content.Server.GameObjects.Components.Power;
using Content.Server.GameObjects.Components.Interactable.Tools;
using Content.Server.Interfaces.GameObjects;
using SS14.Server;
using SS14.Server.Interfaces;
@@ -8,7 +9,6 @@ using SS14.Server.Interfaces.Chat;
using SS14.Server.Interfaces.Maps;
using SS14.Server.Interfaces.Player;
using SS14.Server.Player;
using SS14.Shared;
using SS14.Shared.Console;
using SS14.Shared.ContentPack;
using SS14.Shared.Enums;
@@ -57,12 +57,22 @@ namespace Content.Server
factory.Register<DestructibleComponent>();
factory.Register<TemperatureComponent>();
factory.Register<ServerDoorComponent>();
//Power Components
factory.Register<PowerTransferComponent>();
factory.Register<PowerProviderComponent>();
factory.Register<PowerNodeComponent>();
factory.Register<PowerStorageComponent>();
factory.Register<PowerDeviceComponent>();
factory.Register<PowerGeneratorComponent>();
//Tools
factory.Register<MultitoolComponent>();
factory.Register<WirecutterComponent>();
factory.Register<WrenchComponent>();
factory.Register<WelderComponent>();
factory.Register<ScrewdriverComponent>();
factory.Register<CrowbarComponent>();
}
/// <inheritdoc />

View File

@@ -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;
}
}
}

View File

@@ -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";
}
}

View File

@@ -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";
}
}

View File

@@ -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";
}
}

View File

@@ -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;
}
}
}
}

View File

@@ -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";
}
}

View File

@@ -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";
}
}

View File

@@ -49,7 +49,7 @@ namespace Content.Server.GameObjects.EntitySystems
public void UserInteraction(object sender, EntityEventArgs arg)
{
ClickedOnEntityEventArgs e = (ClickedOnEntityEventArgs)arg;
if (e.MouseButton != Clicktype.Left)
if (e.MouseButton != ClickType.Left)
return;
IEntity user = EntityManager.GetEntity(e.Clicker);

View File

@@ -0,0 +1,71 @@
- type: entity
name: Wirecutter
parent: BaseItem
id: Wirecutter
components:
- type: Wirecutter
- type: WearableAnimatedSprite
notWornSprite: wirecutter
sprite: wirecutter
- type: Icon
icon: wirecutter
- type: entity
name: Screwdriver
parent: BaseItem
id: Screwdriver
components:
- type: Screwdriver
- type: WearableAnimatedSprite
notWornSprite: screwdriver
sprite: screwdriver
- type: Icon
icon: screwdriver
- type: entity
name: Welder
parent: BaseItem
id: Welder
components:
- type: Welder
- type: WearableAnimatedSprite
notWornSprite: welder
sprite: welder
- type: Icon
icon: welder
- type: entity
name: Wrench
parent: BaseItem
id: Wrench
components:
- type: Wrench
- type: WearableAnimatedSprite
notWornSprite: wrench
sprite: wrench
- type: Icon
icon: wrench
- type: entity
name: Crowbar
parent: BaseItem
id: Crowbar
components:
- type: Crowbar
- type: WearableAnimatedSprite
notWornSprite: crowbar
sprite: crowbar
- type: Icon
icon: crowbar
- type: entity
name: Multitool
parent: BaseItem
id: Multitool
components:
- type: Multitool
- type: WearableAnimatedSprite
notWornSprite: multitool
sprite: multitool
- type: Icon
icon: multitool

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B