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

View File

@@ -8,18 +8,17 @@ namespace Content.Client.Decals
public sealed class DecalSystem : SharedDecalSystem public sealed class DecalSystem : SharedDecalSystem
{ {
[Dependency] private readonly IOverlayManager _overlayManager = default!; [Dependency] private readonly IOverlayManager _overlayManager = default!;
[Dependency] private readonly SharedTransformSystem _transforms = default!;
[Dependency] private readonly SpriteSystem _sprites = default!; [Dependency] private readonly SpriteSystem _sprites = default!;
private DecalOverlay _overlay = default!; private DecalOverlay _overlay = default!;
public Dictionary<EntityUid, SortedDictionary<int, SortedDictionary<uint, Decal>>> DecalRenderIndex = new(); public readonly Dictionary<EntityUid, SortedDictionary<int, SortedDictionary<uint, Decal>>> DecalRenderIndex = new();
private Dictionary<EntityUid, Dictionary<uint, int>> _decalZIndexIndex = new(); private readonly Dictionary<EntityUid, Dictionary<uint, int>> _decalZIndexIndex = new();
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
_overlay = new DecalOverlay(this, _transforms, _sprites, EntityManager, PrototypeManager); _overlay = new DecalOverlay(this, _sprites, EntityManager, PrototypeManager);
_overlayManager.AddOverlay(_overlay); _overlayManager.AddOverlay(_overlay);
SubscribeNetworkEvent<DecalChunkUpdateEvent>(OnChunkUpdate); SubscribeNetworkEvent<DecalChunkUpdateEvent>(OnChunkUpdate);

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. /// - When traversing grids it will snap to the nearest cardinal which will generally be imperceptible.
/// </summary> /// </summary>
public static readonly CVarDef<bool> CameraRotationLocked = 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> /// <summary>
/// Whether cargo shuttles are enabled. /// Whether cargo shuttles are enabled.

View File

@@ -10,5 +10,10 @@ namespace Content.Shared.Decals
[DataField("sprite")] public SpriteSpecifier Sprite { get; } = SpriteSpecifier.Invalid; [DataField("sprite")] public SpriteSpecifier Sprite { get; } = SpriteSpecifier.Invalid;
[DataField("tags")] public List<string> Tags = new(); [DataField("tags")] public List<string> Tags = new();
[DataField("showMenu")] public bool ShowMenu = true; [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.Components;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
using Content.Shared.Item; using Content.Shared.Item;
using Content.Shared.Movement.Components;
using Content.Shared.Physics; using Content.Shared.Physics;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.Throwing; using Content.Shared.Throwing;
@@ -797,7 +798,16 @@ namespace Content.Shared.Interaction
RaiseLocalEvent(item, dropMsg, true); RaiseLocalEvent(item, dropMsg, true);
if (dropMsg.Handled) if (dropMsg.Handled)
_adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}"); _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 #endregion

View File

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

View File

@@ -202,7 +202,7 @@ namespace Content.Shared.Movement.Systems
var angleDiff = Angle.ShortestDistance(mover.RelativeRotation, mover.TargetRelativeRotation); var angleDiff = Angle.ShortestDistance(mover.RelativeRotation, mover.TargetRelativeRotation);
// if we've just traversed then lerp to our target rotation. // 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 adjustment = angleDiff * 5f * frameTime;
var minAdjustment = 0.005 * 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 - type: Sprite
sprite: Objects/Devices/nuke.rsi sprite: Objects/Devices/nuke.rsi
netsync: false netsync: false
noRot: true
state: nuclearbomb_base state: nuclearbomb_base
- type: Physics - type: Physics
bodyType: Dynamic bodyType: Dynamic

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -22,6 +22,7 @@
drawdepth: Overdoors drawdepth: Overdoors
offset: "0.0,0.3" offset: "0.0,0.3"
sprite: Structures/Furniture/potted_plants.rsi sprite: Structures/Furniture/potted_plants.rsi
noRot: true
- type: PottedPlantHide - type: PottedPlantHide
- type: SecretStash - type: SecretStash
secretPartName: the plant secretPartName: the plant

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -15,6 +15,7 @@
- type: Sprite - type: Sprite
sprite: Structures/Machines/VendingMachines/empty.rsi sprite: Structures/Machines/VendingMachines/empty.rsi
netsync: false netsync: false
snapCardinals: true
- type: Physics - type: Physics
bodyType: Static bodyType: Static
- type: Transform - type: Transform

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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