Wires are now actually hidden by floor tiles. (#181)
This commit is contained in:
committed by
GitHub
parent
3b0ec7f695
commit
9f3f09871e
@@ -86,6 +86,7 @@
|
||||
<Compile Include="GameObjects\Components\Power\PowerCellVisualizer2D.cs" />
|
||||
<Compile Include="GameObjects\Components\Sound\SoundComponent.cs" />
|
||||
<Compile Include="GameObjects\Components\Storage\ClientStorageComponent.cs" />
|
||||
<Compile Include="GameObjects\Components\SubFloorHideComponent.cs" />
|
||||
<Compile Include="GameObjects\Components\Weapons\Ranged\BallisticMagazineVisualizer2D.cs" />
|
||||
<Compile Include="GameObjects\Components\Weapons\Ranged\BallisticMagazineWeaponVisualizer2D.cs" />
|
||||
<Compile Include="GameObjects\Components\Weapons\Ranged\ClientRangedWeaponComponent.cs" />
|
||||
@@ -93,6 +94,7 @@
|
||||
<Compile Include="GameObjects\EntitySystems\ClientNotifySystem.cs" />
|
||||
<Compile Include="GameObjects\EntitySystems\IconSmoothSystem.cs" />
|
||||
<Compile Include="GameObjects\EntitySystems\RangedWeaponSystem.cs" />
|
||||
<Compile Include="GameObjects\EntitySystems\SubFloorHideSystem.cs" />
|
||||
<Compile Include="GameObjects\EntitySystems\VerbSystem.cs" />
|
||||
<Compile Include="GameTicking\ClientGameTicker.cs" />
|
||||
<Compile Include="Graphics\Overlays\CircleMaskOverlay.cs" />
|
||||
|
||||
@@ -25,6 +25,7 @@ using SS14.Shared.Interfaces.GameObjects;
|
||||
using SS14.Shared.IoC;
|
||||
using SS14.Shared.Prototypes;
|
||||
using System;
|
||||
using Content.Client.GameObjects.Components;
|
||||
using Content.Client.GameObjects.Components.Mobs;
|
||||
using Content.Client.GameObjects.Components.Sound;
|
||||
using Content.Client.UserInterface;
|
||||
@@ -107,6 +108,8 @@ namespace Content.Client
|
||||
factory.Register<CameraRecoilComponent>();
|
||||
factory.RegisterReference<CameraRecoilComponent, SharedCameraRecoilComponent>();
|
||||
|
||||
factory.Register<SubFloorHideComponent>();
|
||||
|
||||
IoCManager.Register<IClientNotifyManager, ClientNotifyManager>();
|
||||
IoCManager.Register<ISharedNotifyManager, ClientNotifyManager>();
|
||||
IoCManager.Register<IClientGameTicker, ClientGameTicker>();
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
using Content.Shared.Maps;
|
||||
using SS14.Client.Interfaces.GameObjects.Components;
|
||||
using SS14.Shared.GameObjects;
|
||||
using SS14.Shared.GameObjects.Components.Transform;
|
||||
|
||||
namespace Content.Client.GameObjects.Components
|
||||
{
|
||||
/// <summary>
|
||||
/// Simple component that automatically hides the sibling <see cref="ISpriteComponent"/> when the tile it's on
|
||||
/// is not a sub floor (plating).
|
||||
/// </summary>
|
||||
/// <seealso cref="ContentTileDefinition.IsSubFloor"/>
|
||||
public sealed class SubFloorHideComponent : Component
|
||||
{
|
||||
private SnapGridComponent _snapGridComponent;
|
||||
|
||||
public override string Name => "SubFloorHide";
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
_snapGridComponent = Owner.GetComponent<SnapGridComponent>();
|
||||
}
|
||||
|
||||
public override void Startup()
|
||||
{
|
||||
base.Startup();
|
||||
|
||||
_snapGridComponent.OnPositionChanged += SnapGridOnPositionChanged;
|
||||
Owner.EntityManager.RaiseEvent(Owner, new SubFloorHideDirtyEvent());
|
||||
}
|
||||
|
||||
public override void Shutdown()
|
||||
{
|
||||
base.Shutdown();
|
||||
|
||||
_snapGridComponent.OnPositionChanged -= SnapGridOnPositionChanged;
|
||||
}
|
||||
|
||||
private void SnapGridOnPositionChanged()
|
||||
{
|
||||
Owner.EntityManager.RaiseEvent(Owner, new SubFloorHideDirtyEvent());
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class SubFloorHideDirtyEvent : EntitySystemMessage
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
using Content.Client.GameObjects.Components;
|
||||
using Content.Shared.Maps;
|
||||
using SS14.Client.Interfaces.GameObjects.Components;
|
||||
using SS14.Shared.GameObjects.Components.Transform;
|
||||
using SS14.Shared.GameObjects.Systems;
|
||||
using SS14.Shared.Interfaces.GameObjects;
|
||||
using SS14.Shared.Interfaces.Map;
|
||||
using SS14.Shared.IoC;
|
||||
using SS14.Shared.Map;
|
||||
|
||||
namespace Content.Client.GameObjects.EntitySystems
|
||||
{
|
||||
/// <summary>
|
||||
/// Entity system backing <see cref="SubFloorHideComponent"/>.
|
||||
/// </summary>
|
||||
internal sealed class SubFloorHideSystem : EntitySystem
|
||||
{
|
||||
#pragma warning disable 649
|
||||
[Dependency] private readonly IMapManager _mapManager;
|
||||
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager;
|
||||
#pragma warning restore 649
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
IoCManager.InjectDependencies(this);
|
||||
|
||||
_mapManager.GridChanged += MapManagerOnGridChanged;
|
||||
_mapManager.TileChanged += MapManagerOnTileChanged;
|
||||
|
||||
SubscribeEvent<SubFloorHideDirtyEvent>(HandleDirtyEvent);
|
||||
}
|
||||
|
||||
private void HandleDirtyEvent(object sender, SubFloorHideDirtyEvent ev)
|
||||
{
|
||||
if (!(sender is IEntity senderEnt))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var sprite = senderEnt.GetComponent<ISpriteComponent>();
|
||||
var grid = _mapManager.GetGrid(senderEnt.Transform.GridID);
|
||||
var position = senderEnt.Transform.GridPosition;
|
||||
var tileRef = grid.GetTile(position);
|
||||
var tileDef = (ContentTileDefinition) _tileDefinitionManager[tileRef.Tile.TileId];
|
||||
sprite.Visible = tileDef.IsSubFloor;
|
||||
}
|
||||
|
||||
private void MapManagerOnTileChanged(object sender, TileChangedEventArgs e)
|
||||
{
|
||||
UpdateTile(_mapManager.GetGrid(e.NewTile.GridIndex), e.NewTile.GridTile);
|
||||
}
|
||||
|
||||
private void MapManagerOnGridChanged(object sender, GridChangedEventArgs e)
|
||||
{
|
||||
foreach (var modified in e.Modified)
|
||||
{
|
||||
UpdateTile(e.Grid, modified.position);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateTile(IMapGrid grid, MapIndices position)
|
||||
{
|
||||
var tile = grid.GetTile(position);
|
||||
var tileDef = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TileId];
|
||||
foreach (var snapGridComponent in grid.GetSnapGridCell(position, SnapGridOffset.Center))
|
||||
{
|
||||
var entity = snapGridComponent.Owner;
|
||||
if (!entity.HasComponent<SubFloorHideComponent>() ||
|
||||
!entity.TryGetComponent(out ISpriteComponent spriteComponent))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
spriteComponent.Visible = tileDef.IsSubFloor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -140,6 +140,9 @@ namespace Content.Server
|
||||
factory.Register<CameraRecoilComponent>();
|
||||
factory.RegisterReference<CameraRecoilComponent, SharedCameraRecoilComponent>();
|
||||
|
||||
factory.RegisterIgnore("IconSmooth");
|
||||
factory.RegisterIgnore("SubFloorHide");
|
||||
|
||||
IoCManager.Register<ISharedNotifyManager, ServerNotifyManager>();
|
||||
IoCManager.Register<IServerNotifyManager, ServerNotifyManager>();
|
||||
IoCManager.Register<IGameTicker, GameTicker>();
|
||||
|
||||
@@ -1,10 +1,40 @@
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
using Content.Server.GameObjects.EntitySystems;
|
||||
using Content.Shared.Maps;
|
||||
using SS14.Server.GameObjects.EntitySystems;
|
||||
using SS14.Shared.Interfaces.GameObjects;
|
||||
using SS14.Shared.Interfaces.Map;
|
||||
using SS14.Shared.IoC;
|
||||
using SS14.Shared.Map;
|
||||
|
||||
namespace Content.Server.GameObjects.Components.Interactable.Tools
|
||||
{
|
||||
public class CrowbarComponent : ToolComponent
|
||||
public class CrowbarComponent : ToolComponent, IAfterAttack
|
||||
{
|
||||
#pragma warning disable 649
|
||||
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager;
|
||||
[Dependency] private readonly IEntitySystemManager _entitySystemManager;
|
||||
#pragma warning restore 649
|
||||
|
||||
/// <summary>
|
||||
/// Tool that can be used to crowbar things apart, such as deconstructing
|
||||
/// </summary>
|
||||
public override string Name => "Crowbar";
|
||||
|
||||
public CrowbarComponent()
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
}
|
||||
|
||||
public void Afterattack(IEntity user, GridCoordinates clicklocation, IEntity attacked)
|
||||
{
|
||||
var tile = clicklocation.Grid.GetTile(clicklocation);
|
||||
var tileDef = (ContentTileDefinition) tile.TileDef;
|
||||
if (tileDef.CanCrowbar)
|
||||
{
|
||||
var underplating = _tileDefinitionManager["underplating"];
|
||||
clicklocation.Grid.SetTile(clicklocation, underplating.TileId);
|
||||
_entitySystemManager.GetEntitySystem<AudioSystem>().Play("/Audio/items/crowbar.ogg", Owner);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,8 @@ namespace Content.Shared.Maps
|
||||
public ushort TileId { get; private set; }
|
||||
public string DisplayName { get; private set; }
|
||||
public string SpriteName { get; private set; }
|
||||
public bool IsSubFloor { get; private set; }
|
||||
public bool CanCrowbar { get; private set; }
|
||||
|
||||
public void AssignTileId(ushort id)
|
||||
{
|
||||
@@ -27,6 +29,16 @@ namespace Content.Shared.Maps
|
||||
Name = mapping.GetNode("name").ToString();
|
||||
DisplayName = mapping.GetNode("display_name").ToString();
|
||||
SpriteName = mapping.GetNode("texture").ToString();
|
||||
|
||||
if (mapping.TryGetNode("is_subfloor", out var node))
|
||||
{
|
||||
IsSubFloor = node.AsBool();
|
||||
}
|
||||
|
||||
if (mapping.TryGetNode("can_crowbar", out node))
|
||||
{
|
||||
CanCrowbar = node.AsBool();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
base: cable_
|
||||
key: power_cables
|
||||
mode: CardinalFlags
|
||||
- type: SubFloorHide
|
||||
|
||||
snap:
|
||||
- Wire
|
||||
|
||||
@@ -2,13 +2,19 @@
|
||||
name: floor
|
||||
display_name: Floor
|
||||
texture: "floor_steel"
|
||||
is_subfloor: false
|
||||
can_crowbar: true
|
||||
|
||||
- type: tile
|
||||
name: floor_white
|
||||
display_name: White Floor
|
||||
texture: "floor_white"
|
||||
is_subfloor: false
|
||||
can_crowbar: true
|
||||
|
||||
- type: tile
|
||||
name: floor_techmaint
|
||||
display_name: Techmaint Floor
|
||||
texture: "floor_techmaint"
|
||||
is_subfloor: false
|
||||
can_crowbar: true
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
name: plating
|
||||
display_name: Plating
|
||||
texture: plating
|
||||
is_subfloor: true
|
||||
|
||||
- type: tile
|
||||
name: underplating
|
||||
display_name: Underplating
|
||||
texture: underplating
|
||||
is_subfloor: true
|
||||
|
||||
Reference in New Issue
Block a user