Snap to nearest cardinal on traversal (#10869)

This commit is contained in:
metalgearsloth
2022-08-29 15:59:19 +10:00
committed by GitHub
parent fe177f4a3e
commit 3fa666bd06
54 changed files with 222 additions and 49 deletions

View File

@@ -11,7 +11,6 @@ namespace Content.Client.Decals
public sealed class DecalOverlay : Overlay
{
private readonly DecalSystem _decals;
private readonly SharedTransformSystem _transform;
private readonly SpriteSystem _sprites;
private readonly IEntityManager _entManager;
private readonly IPrototypeManager _prototypeManager;
@@ -22,13 +21,11 @@ namespace Content.Client.Decals
public DecalOverlay(
DecalSystem decals,
SharedTransformSystem transforms,
SpriteSystem sprites,
IEntityManager entManager,
IPrototypeManager prototypeManager)
{
_decals = decals;
_transform = transforms;
_sprites = sprites;
_entManager = entManager;
_prototypeManager = prototypeManager;
@@ -39,10 +36,12 @@ namespace Content.Client.Decals
// Shouldn't need to clear cached textures unless the prototypes get reloaded.
var handle = args.WorldHandle;
var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
var eyeAngle = args.Viewport.Eye?.Rotation ?? Angle.Zero;
foreach (var (gridId, zIndexDictionary) in _decals.DecalRenderIndex)
{
if (zIndexDictionary.Count == 0) continue;
if (zIndexDictionary.Count == 0)
continue;
if (!xformQuery.TryGetComponent(gridId, out var xform))
{
@@ -53,7 +52,9 @@ namespace Content.Client.Decals
if (xform.MapID != args.MapId)
continue;
handle.SetTransform(_transform.GetWorldMatrix(xform, xformQuery));
var (_, worldRot, worldMatrix) = xform.GetWorldPositionRotationMatrix(xformQuery);
handle.SetTransform(worldMatrix);
foreach (var (_, decals) in zIndexDictionary)
{
@@ -66,10 +67,23 @@ namespace Content.Client.Decals
_cachedTextures[decal.Id] = texture;
}
if (decal.Angle.Equals(Angle.Zero))
if (!_prototypeManager.TryIndex<DecalPrototype>(decal.Id, out var decalProto))
continue;
var cardinal = Angle.Zero;
if (decalProto.SnapCardinals)
{
var worldAngle = eyeAngle + worldRot;
cardinal = worldAngle.GetCardinalDir().ToAngle();
}
var angle = decal.Angle - cardinal;
if (angle.Equals(Angle.Zero))
handle.DrawTexture(texture, decal.Coordinates, decal.Color);
else
handle.DrawTexture(texture, decal.Coordinates, decal.Angle, decal.Color);
handle.DrawTexture(texture, decal.Coordinates, angle, decal.Color);
}
}
}
@@ -81,11 +95,9 @@ namespace Content.Client.Decals
{
if (_prototypeManager.TryIndex<DecalPrototype>(id, out var proto))
return proto.Sprite;
else
{
Logger.Error($"Unknown decal prototype: {id}");
return new SpriteSpecifier.Texture(new ResourcePath("/Textures/noSprite.png"));
}
Logger.Error($"Unknown decal prototype: {id}");
return new SpriteSpecifier.Texture(new ResourcePath("/Textures/noSprite.png"));
}
}
}

View File

@@ -8,18 +8,17 @@ namespace Content.Client.Decals
public sealed class DecalSystem : SharedDecalSystem
{
[Dependency] private readonly IOverlayManager _overlayManager = default!;
[Dependency] private readonly SharedTransformSystem _transforms = default!;
[Dependency] private readonly SpriteSystem _sprites = default!;
private DecalOverlay _overlay = default!;
public Dictionary<EntityUid, SortedDictionary<int, SortedDictionary<uint, Decal>>> DecalRenderIndex = new();
private Dictionary<EntityUid, Dictionary<uint, int>> _decalZIndexIndex = new();
public readonly Dictionary<EntityUid, SortedDictionary<int, SortedDictionary<uint, Decal>>> DecalRenderIndex = new();
private readonly Dictionary<EntityUid, Dictionary<uint, int>> _decalZIndexIndex = new();
public override void Initialize()
{
base.Initialize();
_overlay = new DecalOverlay(this, _transforms, _sprites, EntityManager, PrototypeManager);
_overlay = new DecalOverlay(this, _sprites, EntityManager, PrototypeManager);
_overlayManager.AddOverlay(_overlay);
SubscribeNetworkEvent<DecalChunkUpdateEvent>(OnChunkUpdate);
@@ -108,7 +107,7 @@ namespace Content.Client.Decals
chunkCollection[indices] = newChunkData;
foreach (var (uid, decal) in newChunkData)
{
{
if (zIndexIndex.TryGetValue(uid, out var zIndex))
renderIndex[zIndex].Remove(uid);

View File

@@ -0,0 +1,31 @@
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.Movement.Systems;
using Robust.Shared.Console;
namespace Content.Server.Movement;
[AdminCommand(AdminFlags.Fun)]
public sealed class LockEyesCommand : IConsoleCommand
{
public string Command => $"lockeyes";
public string Description => Loc.GetString("lockeyes-command-description");
public string Help => Loc.GetString("lockeyes-command-help");
public void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length != 1)
{
shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
return;
}
if (!bool.TryParse(args[0], out var value))
{
shell.WriteError(Loc.GetString("parse-bool-fail", ("args", args[0])));
return;
}
var system = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<SharedMoverController>();
system.CameraRotationLocked = value;
}
}

View File

@@ -0,0 +1,44 @@
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.Movement.Components;
using Robust.Shared.Console;
namespace Content.Server.Movement;
[AdminCommand(AdminFlags.Fun)]
public sealed class RotateEyesCommand : IConsoleCommand
{
public string Command => "rotateeyes";
public string Description => Loc.GetString("rotateeyes-command-description");
public string Help => Loc.GetString("rotateeyes-command-help");
public void Execute(IConsoleShell shell, string argStr, string[] args)
{
var entManager = IoCManager.Resolve<IEntityManager>();
var rotation = Angle.Zero;
if (args.Length == 1)
{
if (!float.TryParse(args[0], out var degrees))
{
shell.WriteError(Loc.GetString("parse-float-fail", ("arg", args[0])));
return;
}
rotation = Angle.FromDegrees(degrees);
}
var count = 0;
foreach (var mover in entManager.EntityQuery<InputMoverComponent>(true))
{
if (mover.TargetRelativeRotation.Equals(rotation))
continue;
mover.TargetRelativeRotation = rotation;
entManager.Dirty(mover);
count++;
}
shell.WriteLine(Loc.GetString("rotateeyes-command-count", ("count", count)));
}
}

View File

@@ -916,7 +916,7 @@ namespace Content.Shared.CCVar
/// - When traversing grids it will snap to the nearest cardinal which will generally be imperceptible.
/// </summary>
public static readonly CVarDef<bool> CameraRotationLocked =
CVarDef.Create("shuttle.camera_rotation_locked", true, CVar.REPLICATED);
CVarDef.Create("shuttle.camera_rotation_locked", false, CVar.REPLICATED);
/// <summary>
/// Whether cargo shuttles are enabled.

View File

@@ -10,5 +10,10 @@ namespace Content.Shared.Decals
[DataField("sprite")] public SpriteSpecifier Sprite { get; } = SpriteSpecifier.Invalid;
[DataField("tags")] public List<string> Tags = new();
[DataField("showMenu")] public bool ShowMenu = true;
/// <summary>
/// If the decal is rotated compared to our eye should we snap it to south.
/// </summary>
[DataField("snapCardinals")] public bool SnapCardinals = false;
}
}

View File

@@ -10,6 +10,7 @@ using Content.Shared.Input;
using Content.Shared.Interaction.Components;
using Content.Shared.Interaction.Events;
using Content.Shared.Item;
using Content.Shared.Movement.Components;
using Content.Shared.Physics;
using Content.Shared.Popups;
using Content.Shared.Throwing;
@@ -797,7 +798,16 @@ namespace Content.Shared.Interaction
RaiseLocalEvent(item, dropMsg, true);
if (dropMsg.Handled)
_adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}");
Transform(item).LocalRotation = Angle.Zero;
// If the dropper is rotated then use their targetrelativerotation as the drop rotation
var rotation = Angle.Zero;
if (TryComp<InputMoverComponent>(user, out var mover))
{
rotation = mover.TargetRelativeRotation;
}
Transform(item).LocalRotation = rotation;
}
#endregion

View File

@@ -17,7 +17,7 @@ namespace Content.Shared.Movement.Systems
/// </summary>
public abstract partial class SharedMoverController
{
public bool CameraRotationLocked { get; private set; }
public bool CameraRotationLocked { get; set; }
private void InitializeInput()
{

View File

@@ -202,7 +202,7 @@ namespace Content.Shared.Movement.Systems
var angleDiff = Angle.ShortestDistance(mover.RelativeRotation, mover.TargetRelativeRotation);
// if we've just traversed then lerp to our target rotation.
if (!angleDiff.EqualsApprox(Angle.Zero, 0.005))
if (!angleDiff.EqualsApprox(Angle.Zero, 0.001))
{
var adjustment = angleDiff * 5f * frameTime;
var minAdjustment = 0.005 * frameTime;

View File

@@ -0,0 +1,10 @@
parse-bool-fail = Unable to parse {$arg} as a bool
parse-float-fail = Unable to parse {$arg} as a float
lockeyes-command-description = Prevents eyes from being rotated any further
lockeyes-command-help = lockeyes <true/false>
rotateeyes-command-description = Rotates every player's current eye to the specified rotation
rotateeyes-command-help = rotateeyes <degrees (default 0)>
rotateeyes-command-count = Set {$count} eye rotations

View File

@@ -9,6 +9,7 @@
- type: Sprite
sprite: Objects/Devices/nuke.rsi
netsync: false
noRot: true
state: nuclearbomb_base
- type: Physics
bodyType: Dynamic

View File

@@ -12,6 +12,7 @@
- type: Sprite
sprite: Objects/Misc/bedsheets.rsi
netsync: false
noRot: true
- type: Item
size: 10
- type: Clothing

View File

@@ -30,6 +30,7 @@
- type: Clickable
- type: Sprite
sprite: Objects/Specific/Janitorial/janitorial.rsi
noRot: true
layers:
- state: mopbucket
- state: mopbucket_water-1

View File

@@ -9,6 +9,7 @@
sprite: Structures/Decoration/banner.rsi
state: banner
netsync: false
noRot: true
- type: Transform
noRot: true
- type: Fixtures

View File

@@ -7,6 +7,7 @@
- type: Occluder
- type: Sprite
netsync: false
snapCardinals: true
sprite: Structures/Decoration/curtains.rsi
layers:
- state: closed

View File

@@ -7,6 +7,8 @@
- type: Sprite
sprite: Structures/dispensers.rsi
state: industrial-working
netsync: false
snapCardinals: true
- type: ReagentDispenser
pack: ChemDispenserStandardInventory
emagPack: ChemDispenserEmaggedInventory

View File

@@ -13,6 +13,7 @@
- type: Sprite
netsync: false
sprite: Structures/Doors/Airlocks/Standard/basic.rsi
snapCardinals: true
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]

View File

@@ -64,6 +64,7 @@
- type: Sprite
netsync: false
sprite: Structures/Doors/Airlocks/Glass/shuttle.rsi
snapCardinals: false
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
@@ -85,4 +86,4 @@
- type: PaintableAirlock
group: ShuttleGlass
- type: Door
occludes: false
occludes: false

View File

@@ -28,6 +28,7 @@
- type: Sprite
netsync: false
sprite: Structures/Doors/Airlocks/Standard/firelock.rsi
snapCardinals: true
layers:
- state: closed
map: ["enum.DoorVisualLayers.Base"]
@@ -128,6 +129,7 @@
components:
- type: Sprite
sprite: Structures/Doors/edge_door_hazard.rsi
snapCardinals: false
- type: Airtight
fixVacuum: true
airBlocked: false

View File

@@ -24,6 +24,7 @@
- TableLayer
- type: Sprite
netsync: false
snapCardinals: true
- type: Climbable
- type: Clickable

View File

@@ -25,6 +25,7 @@
sprite: Structures/Furniture/furniture.rsi
state: bed
netsync: false
noRot: true
- type: Strap
position: Down
rotation: -90

View File

@@ -6,6 +6,8 @@
components:
- type: Sprite
sprite: Structures/Furniture/bookshelf.rsi
snapCardinals: true
netsync: false
layers:
- state: base
- state: book-0

View File

@@ -22,6 +22,7 @@
drawdepth: Overdoors
offset: "0.0,0.3"
sprite: Structures/Furniture/potted_plants.rsi
noRot: true
- type: PottedPlantHide
- type: SecretStash
secretPartName: the plant
@@ -263,4 +264,4 @@
parent: PottedPlant26
components:
- type: Sprite
state: plant-29
state: plant-29

View File

@@ -49,6 +49,7 @@
node: tubeLight
- type: Sprite
sprite: Structures/Lighting/LightPosts/small_light_post.rsi
snapCardinals: true
layers:
- state: on
map: ["enum.PoweredLightLayers.Base"]

View File

@@ -9,6 +9,7 @@
- type: Sprite
sprite: Structures/Machines/mixer.rsi
netsync: false
snapCardinals: true
layers:
- state: mixer_empty
- state: mixer_screens

View File

@@ -11,6 +11,7 @@
- type: Sprite
netsync: false
sprite: Structures/Machines/cloning.rsi
snapCardinals: true
layers:
- state: pod_0
- type: Physics

View File

@@ -14,6 +14,7 @@
- type: Sprite
netsync: false
sprite: Structures/Machines/gravity_generator.rsi
snapCardinals: true
layers:
- state: on
map: ["enum.GravityGeneratorVisualLayers.Base"]
@@ -80,6 +81,7 @@
- type: Sprite
netsync: false
sprite: Structures/Machines/gravity_generator_mini.rsi
snapCardinals: true
layers:
- state: on
map: ["enum.GravityGeneratorVisualLayers.Base"]

View File

@@ -6,6 +6,7 @@
components:
- type: Sprite
sprite: Structures/Machines/autolathe.rsi
snapCardinals: true
netsync: false
layers:
- state: icon
@@ -90,6 +91,7 @@
components:
- type: Sprite
sprite: Structures/Machines/protolathe.rsi
snapCardinals: true
netsync: false
layers:
- state: icon
@@ -458,6 +460,7 @@
- type: Sprite
sprite: Structures/Machines/uniform_printer.rsi
netsync: false
snapCardinals: false
layers:
- state: icon
map: ["enum.LatheVisualLayers.IsRunning"]

View File

@@ -11,6 +11,7 @@
- type: Sprite
netsync: false
sprite: Structures/Machines/scanner.rsi
snapCardinals: true
layers:
- state: open
map: ["enum.MedicalScannerVisualLayers.Machine"]

View File

@@ -42,6 +42,7 @@
netsync: false
sprite: Structures/Machines/microwave.rsi
drawdepth: SmallObjects
snapCardinals: true
layers:
- state: mw0
map: ["enum.MicrowaveVisualizerLayers.Base"]

View File

@@ -40,6 +40,7 @@
sprite: Structures/Machines/juicer.rsi
state: juicer0
drawdepth: SmallObjects
snapCardinals: true
- type: ApcPowerReceiver
powerLoad: 300
- type: ItemSlots

View File

@@ -44,6 +44,7 @@
components:
- type: Sprite
sprite: Structures/Machines/rndpointsource.rsi
netsync: false
layers:
- state: rndpointsource-off
- state: rndpointsource

View File

@@ -6,6 +6,7 @@
components:
- type: Sprite
sprite: Structures/Machines/seed_extractor.rsi
snapCardinals: true
layers:
- state: seedextractor-off
- state: seedextractor-unlit

View File

@@ -9,6 +9,7 @@
- type: Sprite
sprite: Structures/Machines/stasis_bed.rsi
netsync: false
noRot: true
layers:
- state: icon
- state: unlit

View File

@@ -18,6 +18,7 @@
board: SurveillanceCameraRouterCircuitboard
- type: Sprite
sprite: Structures/Machines/server.rsi
snapCardinals: true
layers:
- state: server

View File

@@ -15,6 +15,7 @@
- type: Sprite
sprite: Structures/Machines/VendingMachines/empty.rsi
netsync: false
snapCardinals: true
- type: Physics
bodyType: Static
- type: Transform
@@ -574,7 +575,7 @@
radius: 1.5
energy: 1.6
color: "#326e3f"
- type: entity
parent: VendingMachineSeedsUnlocked
id: VendingMachineSeeds

View File

@@ -22,6 +22,7 @@
- type: Sprite
netsync: false
sprite: Structures/Piping/Atmospherics/Portable/portable_scrubber.rsi
noRot: true
layers:
- state: icon
map: ["enum.PortableScrubberVisualLayers.IsRunning"]

View File

@@ -11,6 +11,7 @@
- type: Sprite
netsync: false
sprite: Structures/Piping/disposal.rsi
snapCardinals: true
layers:
- state: condisposal
map: ["enum.DisposalUnitVisualLayers.Base"]

View File

@@ -25,6 +25,7 @@
- type: Sprite
sprite: Structures/Power/Generation/Singularity/collector.rsi
netsync: false
snapCardinals: true
layers:
- state: ca_on
map: ["enum.RadiationCollectorVisualLayers.Main"]

View File

@@ -9,6 +9,7 @@
- type: InteractionOutline
- type: Sprite
netsync: false
snapCardinals: true
sprite: Structures/Power/Generation/ame.rsi
state: control
- type: Physics

View File

@@ -32,6 +32,8 @@
- type: Sprite
sprite: Structures/Power/power.rsi
state: generator
netsync: false
snapCardinals: true
- type: NodeContainer
examinable: true
nodes:

View File

@@ -10,6 +10,7 @@
netsync: false
sprite: Structures/Power/cell_recharger.rsi
drawdepth: SmallObjects
snapCardinals: true
- type: Charger
chargerSlot:
ejectOnInteract: true

View File

@@ -16,6 +16,7 @@
- type: Sprite
netsync: false
sprite: Structures/Power/smes.rsi
snapCardinals: true
layers:
- state: smes
- type: Smes

View File

@@ -10,6 +10,7 @@
components:
- type: Sprite # TODO: add sprite for maintenance panel open
sprite: Structures/Power/substation.rsi
snapCardinals: true
layers:
- state: substation
- state: screen

View File

@@ -91,6 +91,7 @@
- type: Sprite
# Listen I'm not the biggest fan of the sprite but it was the most appropriate thing I could find.
sprite: Structures/Shuttles/gyroscope.rsi
snapCardinals: true
layers:
- state: base
map: ["enum.ThrusterVisualLayers.Base"]
@@ -122,7 +123,7 @@
needsPower: false
powerLoad: 0
- type: Sprite
sprite: Structures/Shuttles/thruster.rsi
sprite: Structures/Shuttles/gyroscope.rsi
layers:
- state: base
map: ["enum.ThrusterVisualLayers.Base"]

View File

@@ -9,6 +9,7 @@
- type: Sprite
netsync: false
sprite: Structures/Storage/canister.rsi
noRot: true
layers:
- state: grey
- type: Appearance

View File

@@ -10,6 +10,7 @@
noRot: true
- type: Sprite
netsync: false
noRot: true
sprite: Structures/Storage/Crates/generic.rsi
layers:
- state: crate
@@ -76,6 +77,7 @@
- type: Sprite
netsync: false
sprite: Structures/Storage/Crates/generic.rsi
snapCardinals: true
layers:
- state: crate
- state: crate_door

View File

@@ -7,6 +7,7 @@
components:
- type: Sprite
netsync: false
snapCardinals: true
- type: InteractionOutline
- type: Physics
- type: Fixtures

View File

@@ -19,6 +19,7 @@
sprite: Structures/Furniture/furniture.rsi
state: rack
netsync: false
snapCardinals: true
- type: Fixtures
fixtures:
- shape:

View File

@@ -32,3 +32,4 @@
drawdepth: WallTops
sprite: Structures/Wallmounts/signs.rsi
netsync: false
snapCardinals: true

View File

@@ -8,6 +8,7 @@
- type: Sprite
drawdepth: WallTops
sprite: Structures/Wallmounts/posters.rsi
snapCardinals: true
- type: Destructible
thresholds:
- trigger:

View File

@@ -8,9 +8,16 @@
state: monkey_painting
# Directional Station Guide Signs
- type: entity
parent: BaseSign
id: BaseSignDirectional
abstract: true
components:
- type: Sprite
snapCardinals: false
- type: entity
parent: BaseSignDirectional
id: SignDirectionalBar
name: bar sign
description: A direction sign, pointing out which way the bar is.
@@ -19,7 +26,7 @@
state: direction_bar
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalBridge
name: bridge sign
description: A direction sign, pointing out which way the Bridge is.
@@ -28,7 +35,7 @@
state: direction_bridge
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalBrig
name: brig sign
description: A direction sign, pointing out which way the Brig is.
@@ -37,7 +44,7 @@
state: direction_brig
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalChapel
name: chapel sign
description: A direction sign, pointing out which way the Chapel is.
@@ -46,7 +53,7 @@
state: direction_chapel
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalChemistry
name: chemistry sign
description: A direction sign, pointing out which way the chemistry lab is.
@@ -55,7 +62,7 @@
state: direction_chemistry
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalCryo
name: cryo sign
description: A direction sign, pointing out the way to cryogenics.
@@ -64,7 +71,7 @@
state: direction_cryo
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalDorms
name: dorms sign
description: A direction sign, pointing out which way the Dorms are.
@@ -73,7 +80,7 @@
state: direction_dorms
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalEng
name: engineering sign
description: A direction sign, pointing out which way the Engineering department is.
@@ -82,7 +89,7 @@
state: direction_eng
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalEvac
name: evac sign
description: A direction sign, pointing out which way evac is.
@@ -91,7 +98,7 @@
state: direction_evac
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalFood
name: food sign
description: A direction sign, pointing out which way the kitchen is.
@@ -100,7 +107,7 @@
state: direction_food
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalGravity
name: gravity sign
description: A direction sign, pointing out which way the gravity generator is.
@@ -109,7 +116,7 @@
state: direction_gravity
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalHop
name: hop sign
description: A direction sign, pointing out which way Head of Personnel's office is.
@@ -118,7 +125,7 @@
state: direction_hop
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalHydro
name: hydro sign
description: A direction sign, pointing out which way hydroponics is.
@@ -127,7 +134,7 @@
state: direction_hydro
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalJanitor
name: janitor sign
description: A direction sign, pointing out which way the janitor's closet is.
@@ -136,7 +143,7 @@
state: direction_janitor
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalLibrary
name: library sign
description: A direction sign, pointing out which way the library is.
@@ -145,7 +152,7 @@
state: direction_library
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalMed
name: medical sign
description: A direction sign, pointing out which way the Medical department is.
@@ -154,7 +161,7 @@
state: direction_med
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalSalvage
name: salvage sign
description: A direction sign, pointing out which way the Salvage department is.
@@ -163,7 +170,7 @@
state: direction_salvage
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalSci
name: science sign
description: A direction sign, pointing out which way the Science department is.
@@ -172,7 +179,7 @@
state: direction_sci
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalSec
name: sec sign
description: A direction sign, pointing out which way Security is.
@@ -181,7 +188,7 @@
state: direction_sec
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalSolar
name: solars sign
description: A direction sign, pointing out which way solars are.
@@ -190,7 +197,7 @@
state: direction_solar
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalSupply
name: supply sign
description: A direction sign, pointing to some supplies.
@@ -199,7 +206,7 @@
state: direction_supply
- type: entity
parent: BaseSign
parent: BaseSignDirectional
id: SignDirectionalWash
name: washroom sign
description: A direction sign, pointing to the way to a washroom.
@@ -793,6 +800,7 @@
components:
- type: Sprite
state: securearea
snapCardinals: true
- type: entity
parent: BaseSign

View File

@@ -12,6 +12,7 @@
- type: Sprite
sprite: Structures/Wallmounts/extinguisher_cabinet.rsi
netsync: false
snapCardinals: true
layers:
- state: frame
- state: extinguisher

View File

@@ -8,13 +8,16 @@
"license": "CC-BY-SA-3.0",
"states": [
{
"name": "base"
"name": "base",
"directions": 1
},
{
"name": "thrust"
"name": "thrust",
"directions": 1
},
{
"name": "thrust_burn",
"directions": 1,
"delays": [
[
0.1,
@@ -26,6 +29,7 @@
},
{
"name": "thrust_burn_unshaded",
"directions": 1,
"delays": [
[
0.1,