Snap to nearest cardinal on traversal (#10869)
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
31
Content.Server/Movement/LockEyesCommand.cs
Normal file
31
Content.Server/Movement/LockEyesCommand.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
44
Content.Server/Movement/RotateEyesCommand.cs
Normal file
44
Content.Server/Movement/RotateEyesCommand.cs
Normal 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)));
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
10
Resources/Locale/en-US/movement/eye.ftl
Normal file
10
Resources/Locale/en-US/movement/eye.ftl
Normal 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
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- type: Sprite
|
||||
sprite: Objects/Devices/nuke.rsi
|
||||
netsync: false
|
||||
noRot: true
|
||||
state: nuclearbomb_base
|
||||
- type: Physics
|
||||
bodyType: Dynamic
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
- type: Sprite
|
||||
sprite: Objects/Misc/bedsheets.rsi
|
||||
netsync: false
|
||||
noRot: true
|
||||
- type: Item
|
||||
size: 10
|
||||
- type: Clothing
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
- type: Clickable
|
||||
- type: Sprite
|
||||
sprite: Objects/Specific/Janitorial/janitorial.rsi
|
||||
noRot: true
|
||||
layers:
|
||||
- state: mopbucket
|
||||
- state: mopbucket_water-1
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
sprite: Structures/Decoration/banner.rsi
|
||||
state: banner
|
||||
netsync: false
|
||||
noRot: true
|
||||
- type: Transform
|
||||
noRot: true
|
||||
- type: Fixtures
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
- type: Occluder
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
sprite: Structures/Decoration/curtains.rsi
|
||||
layers:
|
||||
- state: closed
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
- type: Sprite
|
||||
sprite: Structures/dispensers.rsi
|
||||
state: industrial-working
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
- type: ReagentDispenser
|
||||
pack: ChemDispenserStandardInventory
|
||||
emagPack: ChemDispenserEmaggedInventory
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Doors/Airlocks/Standard/basic.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: closed
|
||||
map: ["enum.DoorVisualLayers.Base"]
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Doors/Airlocks/Glass/shuttle.rsi
|
||||
snapCardinals: false
|
||||
layers:
|
||||
- state: closed
|
||||
map: ["enum.DoorVisualLayers.Base"]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
- TableLayer
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
- type: Climbable
|
||||
- type: Clickable
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
sprite: Structures/Furniture/furniture.rsi
|
||||
state: bed
|
||||
netsync: false
|
||||
noRot: true
|
||||
- type: Strap
|
||||
position: Down
|
||||
rotation: -90
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Structures/Furniture/bookshelf.rsi
|
||||
snapCardinals: true
|
||||
netsync: false
|
||||
layers:
|
||||
- state: base
|
||||
- state: book-0
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/mixer.rsi
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: mixer_empty
|
||||
- state: mixer_screens
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Machines/cloning.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: pod_0
|
||||
- type: Physics
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Machines/scanner.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: open
|
||||
map: ["enum.MedicalScannerVisualLayers.Machine"]
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
netsync: false
|
||||
sprite: Structures/Machines/microwave.rsi
|
||||
drawdepth: SmallObjects
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: mw0
|
||||
map: ["enum.MicrowaveVisualizerLayers.Base"]
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
sprite: Structures/Machines/juicer.rsi
|
||||
state: juicer0
|
||||
drawdepth: SmallObjects
|
||||
snapCardinals: true
|
||||
- type: ApcPowerReceiver
|
||||
powerLoad: 300
|
||||
- type: ItemSlots
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/rndpointsource.rsi
|
||||
netsync: false
|
||||
layers:
|
||||
- state: rndpointsource-off
|
||||
- state: rndpointsource
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/seed_extractor.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: seedextractor-off
|
||||
- state: seedextractor-unlit
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/stasis_bed.rsi
|
||||
netsync: false
|
||||
noRot: true
|
||||
layers:
|
||||
- state: icon
|
||||
- state: unlit
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
board: SurveillanceCameraRouterCircuitboard
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/server.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: server
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
- type: Sprite
|
||||
sprite: Structures/Machines/VendingMachines/empty.rsi
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Transform
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Piping/disposal.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: condisposal
|
||||
map: ["enum.DisposalUnitVisualLayers.Base"]
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- type: InteractionOutline
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
sprite: Structures/Power/Generation/ame.rsi
|
||||
state: control
|
||||
- type: Physics
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
- type: Sprite
|
||||
sprite: Structures/Power/power.rsi
|
||||
state: generator
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
- type: NodeContainer
|
||||
examinable: true
|
||||
nodes:
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
netsync: false
|
||||
sprite: Structures/Power/cell_recharger.rsi
|
||||
drawdepth: SmallObjects
|
||||
snapCardinals: true
|
||||
- type: Charger
|
||||
chargerSlot:
|
||||
ejectOnInteract: true
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Power/smes.rsi
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: smes
|
||||
- type: Smes
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
sprite: Structures/Storage/canister.rsi
|
||||
noRot: true
|
||||
layers:
|
||||
- state: grey
|
||||
- type: Appearance
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
components:
|
||||
- type: Sprite
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
- type: Fixtures
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
sprite: Structures/Furniture/furniture.rsi
|
||||
state: rack
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
- shape:
|
||||
|
||||
@@ -32,3 +32,4 @@
|
||||
drawdepth: WallTops
|
||||
sprite: Structures/Wallmounts/signs.rsi
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
- type: Sprite
|
||||
drawdepth: WallTops
|
||||
sprite: Structures/Wallmounts/posters.rsi
|
||||
snapCardinals: true
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
- type: Sprite
|
||||
sprite: Structures/Wallmounts/extinguisher_cabinet.rsi
|
||||
netsync: false
|
||||
snapCardinals: true
|
||||
layers:
|
||||
- state: frame
|
||||
- state: extinguisher
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user