Revert no device stacking (#16608)

This commit is contained in:
deltanedas
2023-05-19 14:39:37 +00:00
committed by GitHub
parent 36cd2046a8
commit 04b2dab4e9
11 changed files with 12 additions and 159 deletions

View File

@@ -14,6 +14,7 @@ namespace Content.Client.Atmos.UI
{
private GasFilterWindow? _window;
private const float MaxTransferRate = Atmospherics.MaxTransferRate;
public GasFilterBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey)
{
@@ -48,6 +49,7 @@ namespace Content.Client.Atmos.UI
private void OnFilterTransferRatePressed(string value)
{
float rate = float.TryParse(value, out var parsed) ? parsed : 0f;
if (rate > MaxTransferRate) rate = MaxTransferRate;
SendMessage(new GasFilterChangeRateMessage(rate));
}

View File

@@ -9,7 +9,7 @@
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
<Label Text="{Loc comp-gas-filter-ui-filter-transfer-rate}"/>
<LineEdit Name="FilterTransferRateInput" MinSize="60 0" />
<LineEdit Name="FilterTransferRateInput" MinSize="40 0" />
<Button Name="SetFilterRate" Text="{Loc comp-gas-filter-ui-filter-set-rate}" Disabled="True"/>
</BoxContainer>

View File

@@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis;
using Content.Client.Popups;
using Content.Shared.Construction;
using Content.Shared.Construction.Prototypes;
using Content.Shared.Examine;
@@ -25,7 +24,6 @@ namespace Content.Client.Construction
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
private readonly Dictionary<int, ConstructionGhostComponent> _ghosts = new();
private readonly Dictionary<string, ConstructionGuide> _guideCache = new();
@@ -190,8 +188,11 @@ namespace Content.Client.Construction
if (!_interactionSystem.InRangeUnobstructed(user, loc, 20f, predicate: predicate))
return false;
if (!CheckConstructionConditions(prototype, loc, dir, user))
foreach (var condition in prototype.Conditions)
{
if (!condition.Condition(user, loc, dir))
return false;
}
ghost = EntityManager.SpawnEntity("constructionghost", loc);
var comp = EntityManager.GetComponent<ConstructionGhostComponent>(ghost.Value);
@@ -216,27 +217,6 @@ namespace Content.Client.Construction
return true;
}
private bool CheckConstructionConditions(ConstructionPrototype prototype, EntityCoordinates loc, Direction dir,
EntityUid user)
{
foreach (var condition in prototype.Conditions)
{
if (!condition.Condition(user, loc, dir))
{
var message = condition.GenerateGuideEntry()?.Localization;
if (message != null)
{
// Show the reason to the user:
_popupSystem.PopupCoordinates(Loc.GetString(message), loc);
}
return false;
}
}
return true;
}
/// <summary>
/// Checks if any construction ghosts are present at the given position
/// </summary>

View File

@@ -1,16 +1,13 @@
using Content.Server.Administration.Logs;
using Content.Server.Construction.Components;
using Content.Server.Coordinates.Helpers;
using Content.Server.Popups;
using Content.Server.Pulling;
using Content.Shared.Construction.Components;
using Content.Shared.Construction.Conditions;
using Content.Shared.Construction.EntitySystems;
using Content.Shared.Database;
using Content.Shared.DoAfter;
using Content.Shared.Examine;
using Content.Shared.Pulling.Components;
using Content.Shared.Tag;
using Content.Shared.Tools;
using Content.Shared.Tools.Components;
using Robust.Shared.Map;
@@ -27,7 +24,6 @@ namespace Content.Server.Construction
[Dependency] private readonly SharedToolSystem _tool = default!;
[Dependency] private readonly PullingSystem _pulling = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly TagSystem _tagSystem = default!;
public override void Initialize()
{
@@ -89,26 +85,7 @@ namespace Content.Server.Construction
// TODO: Anchoring snaps rn anyway!
if (component.Snap)
{
var coordinates = xform.Coordinates.SnapToGrid(EntityManager, _mapManager);
if (_tagSystem.HasTag(uid, "Unstackable"))
{
// Need to enforce the unstackable rules on anchoring also.
var condition = new NoUnstackableInTile();
if (NoUnstackableInTile.AnyUnstackableTiles(coordinates, _tagSystem))
{
var message = condition.GenerateGuideEntry()?.Localization;
if (message != null)
{
// Show the reason to the user:
_popup.PopupEntity(Loc.GetString(message), uid, args.User);
}
return;
}
}
_transform.SetCoordinates(uid, coordinates);
_transform.SetCoordinates(uid, xform.Coordinates.SnapToGrid(EntityManager, _mapManager));
}
RaiseLocalEvent(uid, new BeforeAnchoredEvent(args.User, used));

View File

@@ -1,44 +0,0 @@
using Content.Shared.Maps;
using Content.Shared.Tag;
using JetBrains.Annotations;
using Robust.Shared.Map;
namespace Content.Shared.Construction.Conditions
{
[UsedImplicitly]
[DataDefinition]
public sealed class NoUnstackableInTile : IConstructionCondition
{
public bool Condition(EntityUid user, EntityCoordinates location, Direction direction)
{
var tagSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<TagSystem>();
if (AnyUnstackableTiles(location, tagSystem))
return false;
return true;
}
public static bool AnyUnstackableTiles(EntityCoordinates location, TagSystem tagSystem)
{
var lookup = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<EntityLookupSystem>();
foreach (var entity in lookup.GetEntitiesIntersecting(location, LookupFlags.Approximate | LookupFlags.Static |
LookupFlags.Sundries))
{
if (tagSystem.HasTag(entity, "Unstackable"))
return true;
}
return false;
}
public ConstructionGuideEntry GenerateGuideEntry()
{
return new ConstructionGuideEntry
{
Localization = "construction-step-condition-no-unstackable-in-tile"
};
}
}
}

View File

@@ -12,9 +12,8 @@ namespace Content.Shared.Construction.Conditions
public bool Condition(EntityUid user, EntityCoordinates location, Direction direction)
{
var tagSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<TagSystem>();
var lookup = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<EntityLookupSystem>();
foreach (var entity in lookup.GetEntitiesIntersecting(location, LookupFlags.Approximate | LookupFlags.Static))
foreach (var entity in location.GetEntitiesInTile(LookupFlags.Approximate | LookupFlags.Static))
{
if (tagSystem.HasTag(entity, "Window"))
return false;

View File

@@ -1 +0,0 @@
construction-step-condition-no-unstackable-in-tile = You cannot make a stack of similar devices.

View File

@@ -6,9 +6,6 @@
mode: SnapgridCenter
components:
- type: AtmosDevice
- type: Tag
tags:
- Unstackable
- type: SubFloorHide
blockInteractions: false
blockAmbience: false

View File

@@ -6,9 +6,6 @@
mode: SnapgridCenter
components:
- type: AtmosDevice
- type: Tag
tags:
- Unstackable
- type: SubFloorHide
blockInteractions: false
blockAmbience: false
@@ -58,16 +55,11 @@
type: GasFilterBoundUserInterface
- type: GasFilter
enabled: false
transferRate: 1000
maxTransferRate: 1000
- type: Flippable
mirrorEntity: GasFilterFlipped
- type: Construction
graph: GasTrinary
node: filter
conditions:
- !type:TileNotBlocked
- !type:NoUnstackableInTile
- type: AmbientSound
enabled: false
volume: -9
@@ -213,9 +205,6 @@
mode: SnapgridCenter
components:
- type: AtmosDevice
- type: Tag
tags:
- Unstackable
- type: SubFloorHide
blockInteractions: false
blockAmbience: false

View File

@@ -516,7 +516,6 @@
state: pumpPressure
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
name: volumetric gas pump
@@ -538,7 +537,6 @@
state: pumpVolume
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: GasPassiveGate
@@ -560,7 +558,6 @@
state: pumpPassiveGate
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: GasValve
@@ -582,7 +579,6 @@
state: pumpManualValve
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: SignalControlledValve
@@ -604,7 +600,6 @@
state: pumpSignalValve
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: GasPort
@@ -626,7 +621,6 @@
state: gasCanisterPort
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: GasDualPortVentPump
@@ -684,24 +678,6 @@
mirror: GasFilter
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: GasFilterFlipped
name: gas filter [flipped]
description: Very useful for filtering gases.
graph: GasTrinary
startNode: start
targetNode: filter
category: construction-category-utilities
placementMode: SnapgridCenter
canBuildInImpassable: false
icon:
sprite: Structures/Piping/Atmospherics/gasfilter.rsi
state: gasFilterF
conditions:
- !type:TileNotBlocked {}
- !type:NoUnstackableInTile
- type: construction
id: GasMixer
@@ -736,25 +712,7 @@
state: gasMixerF
mirror: GasMixer
conditions:
- !type:TileNotBlocked
- !type:NoUnstackableInTile
- type: construction
id: GasMixerFlipped
name: gas mixer [flipped]
description: Very useful for mixing gases.
graph: GasTrinary
startNode: start
targetNode: mixer
category: construction-category-utilities
placementMode: SnapgridCenter
canBuildInImpassable: false
icon:
sprite: Structures/Piping/Atmospherics/gasmixer.rsi
state: gasMixerF
conditions:
- !type:TileNotBlocked
- !type:NoUnstackableInTile
- !type:TileNotBlocked {}
- type: construction
id: PressureControlledValve
@@ -770,8 +728,7 @@
sprite: Structures/Piping/Atmospherics/pneumaticvalve.rsi
state: off
conditions:
- !type:TileNotBlocked
- !type:NoUnstackableInTile
- !type:TileNotBlocked {}
# INTERCOM
- type: construction

View File

@@ -694,9 +694,6 @@
- type: Tag
id: TrashBag
- type: Tag
id: Unstackable # To prevent things like atmos devices (filters etc) being stacked on one tile. See NoUnstackableInTile
- type: Tag
id: VehicleKey