Crowbar floor tiles and placement (#429)

* Adds tile removing behavior to CrowbarComponent.
Add FloorTileItemComponent.
Add genhit.ogg
Add tile.png for testing

* fixes

* Gives ContentTileDefinition a default value for tile item to drop.
Adds a few more tileitems.

* Changes per review request

* move stack.use and if statement
This commit is contained in:
Ephememory
2019-11-23 16:10:05 -05:00
committed by Pieter-Jan Briers
parent 35f9de3366
commit d63c879404
76 changed files with 176 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
using Content.Server.GameObjects.Components.Stack;
using Content.Server.GameObjects.EntitySystems;
using Content.Shared.Maps;
using Robust.Server.GameObjects.EntitySystems;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Map;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;
namespace Content.Server.GameObjects.Components.Items
{
[RegisterComponent]
public class FloorTileItemComponent : Component, IAfterAttack
{
#pragma warning disable 649
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager;
[Dependency] private readonly IEntitySystemManager _entitySystemManager;
[Dependency] private readonly IMapManager _mapManager;
#pragma warning restore 649
public override string Name => "FloorTile";
private StackComponent Stack;
public string _outputTile;
public override void ExposeData(ObjectSerializer serializer)
{
base.ExposeData(serializer);
serializer.DataField(ref _outputTile, "output", "floor_steel");
}
public override void Initialize()
{
base.Initialize();
Stack = Owner.GetComponent<StackComponent>();
}
public void AfterAttack(AfterAttackEventArgs eventArgs)
{
var attacked = eventArgs.Attacked;
var mapGrid = _mapManager.GetGrid(eventArgs.ClickLocation.GridID);
var tile = mapGrid.GetTileRef(eventArgs.ClickLocation);
var coordinates = mapGrid.GridTileToLocal(tile.GridIndices);
float distance = coordinates.Distance(_mapManager, Owner.Transform.GridPosition);
if (distance > InteractionSystem.InteractionRange)
{
return;
}
var tileDef = (ContentTileDefinition)_tileDefinitionManager[tile.Tile.TypeId];
if (tileDef.IsSubFloor && attacked == null && Stack.Use(1))
{
var desiredTile = _tileDefinitionManager[_outputTile];
mapGrid.SetTile(eventArgs.ClickLocation, new Tile(desiredTile.TileId));
_entitySystemManager.GetEntitySystem<AudioSystem>().Play("/Audio/items/genhit.ogg", Owner);
if(Stack.Count < 1){
Owner.Delete();
}
}
}
}
}