using System.Linq;
using Content.Shared.Construction.Prototypes;
using Robust.Client.GameObjects;
using Robust.Client.Placement;
using Robust.Client.ResourceManagement;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
namespace Content.Client.Construction
{
public sealed class ConstructionPlacementHijack : PlacementHijack
{
private readonly ConstructionSystem _constructionSystem;
private readonly ConstructionPrototype? _prototype;
public ConstructionSystem? CurrentConstructionSystem { get { return _constructionSystem; } }
public ConstructionPrototype? CurrentPrototype { get { return _prototype; } }
public override bool CanRotate { get; }
public ConstructionPlacementHijack(ConstructionSystem constructionSystem, ConstructionPrototype? prototype)
{
_constructionSystem = constructionSystem;
_prototype = prototype;
CanRotate = prototype?.CanRotate ?? true;
}
///
public override bool HijackPlacementRequest(EntityCoordinates coordinates)
{
if (_prototype != null)
{
var dir = Manager.Direction;
_constructionSystem.SpawnGhost(_prototype, coordinates, dir);
}
return true;
}
///
public override bool HijackDeletion(EntityUid entity)
{
if (IoCManager.Resolve().HasComponent(entity))
{
_constructionSystem.ClearGhost(entity.GetHashCode());
}
return true;
}
///
public override void StartHijack(PlacementManager manager)
{
base.StartHijack(manager);
if (_prototype is null || !_constructionSystem.TryGetRecipePrototype(_prototype.ID, out var targetProtoId))
return;
if (!IoCManager.Resolve().TryIndex(targetProtoId, out EntityPrototype? proto))
return;
manager.CurrentTextures = SpriteComponent.GetPrototypeTextures(proto, IoCManager.Resolve()).ToList();
}
}
}