Merge branch 'master' into 2020-08-19-firelocks
This commit is contained in:
@@ -0,0 +1,68 @@
|
|||||||
|
using Content.Shared.GameObjects.Atmos;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Client.Graphics;
|
||||||
|
using Robust.Client.Interfaces.GameObjects.Components;
|
||||||
|
using Robust.Client.Interfaces.ResourceManagement;
|
||||||
|
using Robust.Client.ResourceManagement;
|
||||||
|
using Robust.Shared.GameObjects.Components.Renderable;
|
||||||
|
using Robust.Shared.IoC;
|
||||||
|
using Robust.Shared.Log;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
using System;
|
||||||
|
using YamlDotNet.RepresentationModel;
|
||||||
|
|
||||||
|
namespace Content.Client.GameObjects.Components.Atmos
|
||||||
|
{
|
||||||
|
[UsedImplicitly]
|
||||||
|
public class SiphonVisualizer : AppearanceVisualizer
|
||||||
|
{
|
||||||
|
private RSI _siphonRSI;
|
||||||
|
|
||||||
|
public override void LoadData(YamlMappingNode node)
|
||||||
|
{
|
||||||
|
base.LoadData(node);
|
||||||
|
|
||||||
|
var rsiString = node.GetNode("siphonRSI").ToString();
|
||||||
|
var rsiPath = SharedSpriteComponent.TextureRoot / rsiString;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var resourceCache = IoCManager.Resolve<IResourceCache>();
|
||||||
|
var resource = resourceCache.GetResource<RSIResource>(rsiPath);
|
||||||
|
_siphonRSI = resource.RSI;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.ErrorS("go.siphonvisualizer", "Unable to load RSI '{0}'. Trace:\n{1}", rsiPath, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnChangeData(AppearanceComponent component)
|
||||||
|
{
|
||||||
|
base.OnChangeData(component);
|
||||||
|
|
||||||
|
if (!component.Owner.TryGetComponent(out ISpriteComponent sprite))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!component.TryGetData(SiphonVisuals.VisualState, out SiphonVisualState siphonVisualState))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var siphonBaseState = "scrub";
|
||||||
|
siphonBaseState += siphonVisualState.SiphonEnabled ? "On" : "Off";
|
||||||
|
|
||||||
|
sprite.LayerMapReserveBlank(Layer.SiphonBase);
|
||||||
|
var baseSiphonLayer = sprite.LayerMapGet(Layer.SiphonBase);
|
||||||
|
sprite.LayerSetRSI(baseSiphonLayer, _siphonRSI);
|
||||||
|
sprite.LayerSetState(baseSiphonLayer, siphonBaseState);
|
||||||
|
sprite.LayerSetVisible(baseSiphonLayer, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum Layer
|
||||||
|
{
|
||||||
|
SiphonBase,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
using Content.Shared.GameObjects.Atmos;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Client.Graphics;
|
||||||
|
using Robust.Client.Interfaces.GameObjects.Components;
|
||||||
|
using Robust.Client.Interfaces.ResourceManagement;
|
||||||
|
using Robust.Client.ResourceManagement;
|
||||||
|
using Robust.Shared.GameObjects.Components.Renderable;
|
||||||
|
using Robust.Shared.IoC;
|
||||||
|
using Robust.Shared.Log;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
using System;
|
||||||
|
using YamlDotNet.RepresentationModel;
|
||||||
|
|
||||||
|
namespace Content.Client.GameObjects.Components.Atmos
|
||||||
|
{
|
||||||
|
[UsedImplicitly]
|
||||||
|
public class VentVisualizer : AppearanceVisualizer
|
||||||
|
{
|
||||||
|
private RSI _ventRSI;
|
||||||
|
|
||||||
|
public override void LoadData(YamlMappingNode node)
|
||||||
|
{
|
||||||
|
base.LoadData(node);
|
||||||
|
|
||||||
|
var rsiString = node.GetNode("ventRSI").ToString();
|
||||||
|
var rsiPath = SharedSpriteComponent.TextureRoot / rsiString;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var resourceCache = IoCManager.Resolve<IResourceCache>();
|
||||||
|
var resource = resourceCache.GetResource<RSIResource>(rsiPath);
|
||||||
|
_ventRSI = resource.RSI;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.ErrorS("go.ventvisualizer", "Unable to load RSI '{0}'. Trace:\n{1}", rsiPath, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnChangeData(AppearanceComponent component)
|
||||||
|
{
|
||||||
|
base.OnChangeData(component);
|
||||||
|
|
||||||
|
if (!component.Owner.TryGetComponent(out ISpriteComponent sprite))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!component.TryGetData(VentVisuals.VisualState, out VentVisualState ventVisualState))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var ventBaseState = "vent";
|
||||||
|
ventBaseState += ventVisualState.VentEnabled ? "On" : "Off";
|
||||||
|
|
||||||
|
sprite.LayerMapReserveBlank(Layer.VentBase);
|
||||||
|
var baseVentLayer = sprite.LayerMapGet(Layer.VentBase);
|
||||||
|
sprite.LayerSetRSI(baseVentLayer, _ventRSI);
|
||||||
|
sprite.LayerSetState(baseVentLayer, ventBaseState);
|
||||||
|
sprite.LayerSetVisible(baseVentLayer, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum Layer
|
||||||
|
{
|
||||||
|
VentBase,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -177,7 +177,8 @@
|
|||||||
"ExtinguisherCabinetFilled",
|
"ExtinguisherCabinetFilled",
|
||||||
"FireExtinguisher",
|
"FireExtinguisher",
|
||||||
"Firelock",
|
"Firelock",
|
||||||
"AtmosPlaque"
|
"AtmosPlaque",
|
||||||
|
"Spillable",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,8 @@ namespace Content.IntegrationTests.Tests
|
|||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class PostMapInitTest : ContentIntegrationTest
|
public class PostMapInitTest : ContentIntegrationTest
|
||||||
{
|
{
|
||||||
public readonly string[] SkippedMaps =
|
public const bool SkipTestMaps = true;
|
||||||
{
|
public const string TestMapsPath = "/Maps/Test/";
|
||||||
"/Maps/Pathfinding/simple.yml"
|
|
||||||
};
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public async Task NoSavedPostMapInitTest()
|
public async Task NoSavedPostMapInitTest()
|
||||||
@@ -34,7 +32,8 @@ namespace Content.IntegrationTests.Tests
|
|||||||
{
|
{
|
||||||
var rootedPath = map.ToRootedPath();
|
var rootedPath = map.ToRootedPath();
|
||||||
|
|
||||||
if (SkippedMaps.Contains(rootedPath.ToString()))
|
// ReSharper disable once RedundantLogicalConditionalExpressionOperand
|
||||||
|
if (SkipTestMaps && rootedPath.ToString().StartsWith(TestMapsPath))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -53,7 +52,7 @@ namespace Content.IntegrationTests.Tests
|
|||||||
var meta = root["meta"];
|
var meta = root["meta"];
|
||||||
var postMapInit = meta["postmapinit"].AsBool();
|
var postMapInit = meta["postmapinit"].AsBool();
|
||||||
|
|
||||||
Assert.False(postMapInit);
|
Assert.False(postMapInit, $"Map {map.Filename} was saved postmapinit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
using Content.Server.GameObjects.Components.NodeContainer;
|
using Content.Server.GameObjects.Components.NodeContainer;
|
||||||
using Content.Server.GameObjects.Components.NodeContainer.Nodes;
|
using Content.Server.GameObjects.Components.NodeContainer.Nodes;
|
||||||
using Content.Server.GameObjects.EntitySystems;
|
using Content.Server.GameObjects.EntitySystems;
|
||||||
|
using Content.Shared.GameObjects.Atmos;
|
||||||
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.GameObjects.Systems;
|
using Robust.Shared.GameObjects.Systems;
|
||||||
using Robust.Shared.Log;
|
using Robust.Shared.Log;
|
||||||
using Robust.Shared.ViewVariables;
|
using Robust.Shared.ViewVariables;
|
||||||
@@ -23,6 +25,20 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping
|
|||||||
|
|
||||||
private AtmosphereSystem _atmosSystem;
|
private AtmosphereSystem _atmosSystem;
|
||||||
|
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public bool SiphonEnabled
|
||||||
|
{
|
||||||
|
get => _siphonEnabled;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_siphonEnabled = value;
|
||||||
|
UpdateAppearance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private bool _siphonEnabled = true;
|
||||||
|
|
||||||
|
private AppearanceComponent _appearance;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
@@ -40,10 +56,15 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping
|
|||||||
Logger.Error($"{typeof(BaseSiphonComponent)} on entity {Owner.Uid} could not find compatible {nameof(PipeNode)}s on its {nameof(NodeContainerComponent)}.");
|
Logger.Error($"{typeof(BaseSiphonComponent)} on entity {Owner.Uid} could not find compatible {nameof(PipeNode)}s on its {nameof(NodeContainerComponent)}.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Owner.TryGetComponent(out _appearance);
|
||||||
|
UpdateAppearance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
|
if (!SiphonEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
var tileAtmos = Owner.Transform.Coordinates.GetTileAtmosphere(_entityManager);
|
var tileAtmos = Owner.Transform.Coordinates.GetTileAtmosphere(_entityManager);
|
||||||
if (tileAtmos == null)
|
if (tileAtmos == null)
|
||||||
return;
|
return;
|
||||||
@@ -52,5 +73,10 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void ScrubGas(GasMixture inletGas, GasMixture outletGas);
|
protected abstract void ScrubGas(GasMixture inletGas, GasMixture outletGas);
|
||||||
|
|
||||||
|
private void UpdateAppearance()
|
||||||
|
{
|
||||||
|
_appearance?.SetData(SiphonVisuals.VisualState, new SiphonVisualState(SiphonEnabled));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
using Content.Server.GameObjects.Components.NodeContainer;
|
using Content.Server.GameObjects.Components.NodeContainer;
|
||||||
using Content.Server.GameObjects.Components.NodeContainer.Nodes;
|
using Content.Server.GameObjects.Components.NodeContainer.Nodes;
|
||||||
using Content.Server.GameObjects.EntitySystems;
|
using Content.Server.GameObjects.EntitySystems;
|
||||||
|
using Content.Shared.GameObjects.Atmos;
|
||||||
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.GameObjects.Systems;
|
using Robust.Shared.GameObjects.Systems;
|
||||||
using Robust.Shared.Log;
|
using Robust.Shared.Log;
|
||||||
using Robust.Shared.ViewVariables;
|
using Robust.Shared.ViewVariables;
|
||||||
@@ -23,6 +25,20 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping
|
|||||||
|
|
||||||
private AtmosphereSystem _atmosSystem;
|
private AtmosphereSystem _atmosSystem;
|
||||||
|
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public bool VentEnabled
|
||||||
|
{
|
||||||
|
get => _ventEnabled;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_ventEnabled = value;
|
||||||
|
UpdateAppearance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private bool _ventEnabled = true;
|
||||||
|
|
||||||
|
private AppearanceComponent _appearance;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
@@ -40,10 +56,15 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping
|
|||||||
Logger.Error($"{typeof(BaseVentComponent)} on entity {Owner.Uid} could not find compatible {nameof(PipeNode)}s on its {nameof(NodeContainerComponent)}.");
|
Logger.Error($"{typeof(BaseVentComponent)} on entity {Owner.Uid} could not find compatible {nameof(PipeNode)}s on its {nameof(NodeContainerComponent)}.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Owner.TryGetComponent(out _appearance);
|
||||||
|
UpdateAppearance();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
|
if (!VentEnabled)
|
||||||
|
return;
|
||||||
|
|
||||||
var tileAtmos = Owner.Transform.Coordinates.GetTileAtmosphere(_entityManager);
|
var tileAtmos = Owner.Transform.Coordinates.GetTileAtmosphere(_entityManager);
|
||||||
if (tileAtmos == null)
|
if (tileAtmos == null)
|
||||||
return;
|
return;
|
||||||
@@ -52,5 +73,10 @@ namespace Content.Server.GameObjects.Components.Atmos.Piping
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void VentGas(GasMixture inletGas, GasMixture outletGas);
|
protected abstract void VentGas(GasMixture inletGas, GasMixture outletGas);
|
||||||
|
|
||||||
|
private void UpdateAppearance()
|
||||||
|
{
|
||||||
|
_appearance?.SetData(VentVisuals.VisualState, new VentVisualState(VentEnabled));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,17 @@ namespace Content.Server.Utility
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="source">The entity on which to popup the message.</param>
|
/// <param name="source">The entity on which to popup the message.</param>
|
||||||
/// <param name="message">The message to show.</param>
|
/// <param name="message">The message to show.</param>
|
||||||
|
/// <param name="playerManager">
|
||||||
|
/// The instance of player manager to use, will be resolved automatically
|
||||||
|
/// if null.
|
||||||
|
/// </param>
|
||||||
/// <param name="range">
|
/// <param name="range">
|
||||||
/// The range in which to search for players, defaulting to one screen.
|
/// The range in which to search for players, defaulting to one screen.
|
||||||
/// </param>
|
/// </param>
|
||||||
public static void PopupMessageOtherClients(this IEntity source, string message, int range = 15)
|
public static void PopupMessageOtherClients(this IEntity source, string message, IPlayerManager playerManager = null, int range = 15)
|
||||||
{
|
{
|
||||||
var playerManager = IoCManager.Resolve<IPlayerManager>();
|
playerManager ??= IoCManager.Resolve<IPlayerManager>();
|
||||||
|
|
||||||
var viewers = playerManager.GetPlayersInRange(source.Transform.Coordinates, range);
|
var viewers = playerManager.GetPlayersInRange(source.Transform.Coordinates, range);
|
||||||
|
|
||||||
foreach (var viewer in viewers)
|
foreach (var viewer in viewers)
|
||||||
@@ -33,5 +38,24 @@ namespace Content.Server.Utility
|
|||||||
source.PopupMessage(viewer.AttachedEntity, message);
|
source.PopupMessage(viewer.AttachedEntity, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pops up a message at the given entity's location for everyone,
|
||||||
|
/// including itself, to see.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="source">The entity above which to show the message.</param>
|
||||||
|
/// <param name="message">The message to be seen.</param>
|
||||||
|
/// <param name="playerManager">
|
||||||
|
/// The instance of player manager to use, will be resolved automatically
|
||||||
|
/// if null.
|
||||||
|
/// </param>
|
||||||
|
/// <param name="range">
|
||||||
|
/// The range in which to search for players, defaulting to one screen.
|
||||||
|
/// </param>
|
||||||
|
public static void PopupMessageEveryone(this IEntity source, string message, IPlayerManager playerManager = null, int range = 15)
|
||||||
|
{
|
||||||
|
source.PopupMessage(message);
|
||||||
|
source.PopupMessageOtherClients(message, playerManager, range);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
22
Content.Shared/GameObjects/Atmos/SharedSiphonComponent.cs
Normal file
22
Content.Shared/GameObjects/Atmos/SharedSiphonComponent.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using Robust.Shared.Serialization;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Content.Shared.GameObjects.Atmos
|
||||||
|
{
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public enum SiphonVisuals
|
||||||
|
{
|
||||||
|
VisualState
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public class SiphonVisualState
|
||||||
|
{
|
||||||
|
public readonly bool SiphonEnabled;
|
||||||
|
|
||||||
|
public SiphonVisualState(bool siphonEnabled)
|
||||||
|
{
|
||||||
|
SiphonEnabled = siphonEnabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
22
Content.Shared/GameObjects/Atmos/SharedVentComponent.cs
Normal file
22
Content.Shared/GameObjects/Atmos/SharedVentComponent.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using Robust.Shared.Serialization;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Content.Shared.GameObjects.Atmos
|
||||||
|
{
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public enum VentVisuals
|
||||||
|
{
|
||||||
|
VisualState
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public class VentVisualState
|
||||||
|
{
|
||||||
|
public readonly bool VentEnabled;
|
||||||
|
|
||||||
|
public VentVisualState(bool ventEnabled)
|
||||||
|
{
|
||||||
|
VentEnabled = ventEnabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,7 +12,12 @@
|
|||||||
- type: Icon
|
- type: Icon
|
||||||
texture: Constructible/Power/eightdirwire.png
|
texture: Constructible/Power/eightdirwire.png
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
texture: Constructible/Power/eightdirwire.png
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PipeVisualizer
|
||||||
|
pipeRSI: Constructible/Atmos/pipe.rsi
|
||||||
|
- type: SiphonVisualizer
|
||||||
|
siphonRSI: Constructible/Atmos/scrubber.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholdvalue: 100
|
thresholdvalue: 100
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,12 @@
|
|||||||
- type: Icon
|
- type: Icon
|
||||||
texture: Constructible/Power/eightdirwire.png
|
texture: Constructible/Power/eightdirwire.png
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
texture: Constructible/Power/eightdirwire.png
|
- type: Appearance
|
||||||
|
visuals:
|
||||||
|
- type: PipeVisualizer
|
||||||
|
pipeRSI: Constructible/Atmos/pipe.rsi
|
||||||
|
- type: VentVisualizer
|
||||||
|
ventRSI: Constructible/Atmos/vent.rsi
|
||||||
- type: Destructible
|
- type: Destructible
|
||||||
thresholdvalue: 100
|
thresholdvalue: 100
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
- type: entity
|
- type: entity
|
||||||
id: LargeBarSign
|
id: LargeBarSign
|
||||||
name: large bar sign
|
name: large bar sign
|
||||||
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Clickable
|
- type: Clickable
|
||||||
- type: InteractionOutline
|
- type: InteractionOutline
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"version":1,
|
||||||
|
"size":{
|
||||||
|
"x":32,
|
||||||
|
"y":32
|
||||||
|
},
|
||||||
|
"license":"CC-BY-SA-3.0",
|
||||||
|
"copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da",
|
||||||
|
"states":[
|
||||||
|
{
|
||||||
|
"name":"scrubOff",
|
||||||
|
"directions":1,
|
||||||
|
"delays":[ [ 1.0 ] ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"scrubOn",
|
||||||
|
"directions":1,
|
||||||
|
"delays":[
|
||||||
|
[
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Constructible/Atmos/scrubber.rsi/scrubOff.png
Normal file
BIN
Resources/Textures/Constructible/Atmos/scrubber.rsi/scrubOff.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 767 B |
BIN
Resources/Textures/Constructible/Atmos/scrubber.rsi/scrubOn.png
Normal file
BIN
Resources/Textures/Constructible/Atmos/scrubber.rsi/scrubOn.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
28
Resources/Textures/Constructible/Atmos/vent.rsi/meta.json
Normal file
28
Resources/Textures/Constructible/Atmos/vent.rsi/meta.json
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"version":1,
|
||||||
|
"size":{
|
||||||
|
"x":32,
|
||||||
|
"y":32
|
||||||
|
},
|
||||||
|
"license":"CC-BY-SA-3.0",
|
||||||
|
"copyright":"Taken from https://github.com/tgstation/tgstation at commit 57cd1d59ca019dd0e7811ac451f295f818e573da",
|
||||||
|
"states":[
|
||||||
|
{
|
||||||
|
"name":"ventOff",
|
||||||
|
"directions":1,
|
||||||
|
"delays":[ [ 1.0 ] ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"ventOn",
|
||||||
|
"directions":1,
|
||||||
|
"delays":[
|
||||||
|
[
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08,
|
||||||
|
0.08
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Constructible/Atmos/vent.rsi/ventOff.png
Normal file
BIN
Resources/Textures/Constructible/Atmos/vent.rsi/ventOff.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 612 B |
BIN
Resources/Textures/Constructible/Atmos/vent.rsi/ventOn.png
Normal file
BIN
Resources/Textures/Constructible/Atmos/vent.rsi/ventOn.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
@@ -102,6 +102,7 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=soundfonts/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=soundfonts/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=spawnable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=spawnable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Spawner/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Spawner/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Spillable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Strippable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Strippable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=stunnable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=stunnable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Superconduct/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Superconduct/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
|||||||
Reference in New Issue
Block a user