Fix: Двойные/Тройные шлюзы (#3719)
This commit is contained in:
parent
0297f84311
commit
1f97e396d0
11 changed files with 580 additions and 12 deletions
|
|
@ -0,0 +1,22 @@
|
|||
namespace Content.Server._Sunrise.Doors.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Сейчас используется только под двойные, тройные шлюзы
|
||||
/// Спавнит блокеры по боковым частям относительно главного тайла
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class SunriseMultiTileAirtightComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Список оффсетов в локальных координатах двери, на каких тайлах должны появиться блокеры
|
||||
/// Оффсет задает относительно главной точки двери
|
||||
/// </summary>
|
||||
[DataField(required: true)]
|
||||
public List<Vector2i> ExtraTiles = new();
|
||||
|
||||
/// <summary>
|
||||
/// Cписок заспавненных блокеров, используется системой для обновления airtight
|
||||
/// </summary>
|
||||
public List<EntityUid> Blockers = new();
|
||||
}
|
||||
|
||||
173
Content.Server/_Sunrise/Doors/SunriseMultiTileAirtightSystem.cs
Normal file
173
Content.Server/_Sunrise/Doors/SunriseMultiTileAirtightSystem.cs
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
using System.Numerics;
|
||||
using Content.Server._Sunrise.Doors.Components;
|
||||
using Content.Server.Atmos.Components;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Shared.Doors;
|
||||
using Content.Shared.Doors.Components;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Server.GameObjects;
|
||||
|
||||
namespace Content.Server._Sunrise.Doors.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// Нужна чтобы мультитайловые двойные или тройные шлюзы нормально не пропускали газы
|
||||
/// Спавнит блокеры на соседних тайлах и регулирует когда блокеры не пропускают газ, когда пропускают. В зависимости от состояния шлюза
|
||||
/// </summary>
|
||||
public sealed class SunriseMultiTileAirtightSystem : EntitySystem
|
||||
{
|
||||
private const string BlockerPrototype = "SunriseMultiTileAirtightBlocker";
|
||||
|
||||
[Dependency] private readonly AirtightSystem _airtight = default!;
|
||||
[Dependency] private readonly TransformSystem _transform = default!;
|
||||
|
||||
private EntityQuery<AirtightComponent> _airtightQuery;
|
||||
private EntityQuery<DoorComponent> _doorQuery;
|
||||
private EntityQuery<MapGridComponent> _gridQuery;
|
||||
private EntityQuery<TransformComponent> _xformQuery;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
_airtightQuery = GetEntityQuery<AirtightComponent>();
|
||||
_doorQuery = GetEntityQuery<DoorComponent>();
|
||||
_gridQuery = GetEntityQuery<MapGridComponent>();
|
||||
_xformQuery = GetEntityQuery<TransformComponent>();
|
||||
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, MapInitEvent>(OnMapInit);
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, ComponentShutdown>(OnShutdown);
|
||||
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, AirtightChanged>(OnAirtightChanged);
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, DoorStateChangedEvent>(OnDoorStateChanged);
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, ReAnchorEvent>(OnReAnchor);
|
||||
SubscribeLocalEvent<SunriseMultiTileAirtightComponent, MoveEvent>(OnMoved);
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<SunriseMultiTileAirtightComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
RefreshGeometry(ent);
|
||||
RefreshAirblock(ent);
|
||||
}
|
||||
|
||||
private void OnShutdown(Entity<SunriseMultiTileAirtightComponent> ent, ref ComponentShutdown args)
|
||||
{
|
||||
DeleteBlockers(ent);
|
||||
}
|
||||
|
||||
private void OnDoorStateChanged(Entity<SunriseMultiTileAirtightComponent> ent, ref DoorStateChangedEvent args)
|
||||
{
|
||||
RefreshAirblock(ent);
|
||||
}
|
||||
|
||||
private void OnAirtightChanged(Entity<SunriseMultiTileAirtightComponent> ent, ref AirtightChanged args)
|
||||
{
|
||||
if (!args.AirBlockedChanged)
|
||||
return;
|
||||
|
||||
RefreshAirblock(ent);
|
||||
}
|
||||
|
||||
private void OnAnchorChanged(Entity<SunriseMultiTileAirtightComponent> ent, ref AnchorStateChangedEvent args)
|
||||
{
|
||||
RefreshGeometry(ent);
|
||||
RefreshAirblock(ent);
|
||||
}
|
||||
|
||||
private void OnReAnchor(Entity<SunriseMultiTileAirtightComponent> ent, ref ReAnchorEvent args)
|
||||
{
|
||||
RefreshGeometry(ent);
|
||||
RefreshAirblock(ent);
|
||||
}
|
||||
|
||||
private void OnMoved(Entity<SunriseMultiTileAirtightComponent> ent, ref MoveEvent args)
|
||||
{
|
||||
RefreshGeometry(ent);
|
||||
RefreshAirblock(ent);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Пересоздает блокеры на дополнительных тайлах
|
||||
/// ExtraTiles задаются в локальных координатах двери, поэтому оффсет надо повернуть по направлению двери
|
||||
/// После поворота округяем сразу до целых тайлов, потому что поворот идет через float
|
||||
/// </summary>
|
||||
private void RefreshGeometry(Entity<SunriseMultiTileAirtightComponent> ent)
|
||||
{
|
||||
DeleteBlockers(ent);
|
||||
|
||||
if (!_xformQuery.TryGetComponent(ent.Owner, out var xform))
|
||||
return;
|
||||
|
||||
if (!xform.Anchored || xform.GridUid is not { } gridUid || !_gridQuery.TryGetComponent(gridUid, out var grid))
|
||||
return;
|
||||
|
||||
var baseTile = _transform.GetGridTilePositionOrDefault((ent, xform), grid);
|
||||
var rotation = xform.LocalRotation.RoundToCardinalAngle();
|
||||
|
||||
foreach (var local in ent.Comp.ExtraTiles)
|
||||
{
|
||||
var rotated = rotation.RotateVec(new Vector2(local.X, local.Y));
|
||||
var offset = new Vector2i((int)MathF.Round(rotated.X), (int)MathF.Round(rotated.Y));
|
||||
var tile = baseTile + offset;
|
||||
|
||||
var coords = GetTileCenter(gridUid, grid, tile);
|
||||
var blocker = Spawn(BlockerPrototype, coords);
|
||||
var blockerXform = _xformQuery.GetComponent(blocker);
|
||||
|
||||
// Обязательно анкорим на грид и конкретный тайл, ибо airtight будет не на том месте будет и будет адское шоу
|
||||
if (!_transform.AnchorEntity((blocker, blockerXform), (gridUid, grid), tile))
|
||||
{
|
||||
Del(blocker);
|
||||
continue;
|
||||
}
|
||||
|
||||
ent.Comp.Blockers.Add(blocker);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Синхронизирует Airtight.AirBlocked у всех блокеров у двери
|
||||
/// Если у двери есть AirtightComponent то берем его AirBlocked
|
||||
/// </summary>
|
||||
private void RefreshAirblock(Entity<SunriseMultiTileAirtightComponent> ent)
|
||||
{
|
||||
bool blocked;
|
||||
|
||||
if (_airtightQuery.TryGetComponent(ent.Owner, out var doorAirtight))
|
||||
blocked = doorAirtight.AirBlocked;
|
||||
else
|
||||
{
|
||||
if (!_doorQuery.TryGetComponent(ent.Owner, out var door))
|
||||
return;
|
||||
|
||||
blocked = door.State is DoorState.Closed or DoorState.Welded;
|
||||
}
|
||||
|
||||
foreach (var blocker in ent.Comp.Blockers)
|
||||
{
|
||||
if (!_airtightQuery.TryGetComponent(blocker, out var airtight))
|
||||
continue;
|
||||
|
||||
_airtight.SetAirblocked((blocker, airtight), blocked);
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteBlockers(Entity<SunriseMultiTileAirtightComponent> ent)
|
||||
{
|
||||
foreach (var blocker in ent.Comp.Blockers)
|
||||
{
|
||||
if (!Deleted(blocker))
|
||||
Del(blocker);
|
||||
}
|
||||
|
||||
ent.Comp.Blockers.Clear();
|
||||
}
|
||||
|
||||
private static EntityCoordinates GetTileCenter(EntityUid gridUid, MapGridComponent grid, Vector2i tile)
|
||||
{
|
||||
// +0.5f чтобы получить центр тайла, а то берет то правый угол, то левый
|
||||
var pos = new Vector2(tile.X + 0.5f, tile.Y + 0.5f) * grid.TileSize;
|
||||
return new EntityCoordinates(gridUid, pos);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
# Groups
|
||||
spray-painter-tab-group-airlockdoubleglass = Double
|
||||
spray-painter-tab-group-airlocktripleglass = Triple
|
||||
|
||||
# Double glass airlocks
|
||||
spray-painter-style-airlockdoubleglass-atmospherics = Atmospherics
|
||||
spray-painter-style-airlockdoubleglass-basic = Basic
|
||||
spray-painter-style-airlockdoubleglass-cargo = Cargo
|
||||
spray-painter-style-airlockdoubleglass-chemistry = Chemistry
|
||||
spray-painter-style-airlockdoubleglass-command = Command
|
||||
spray-painter-style-airlockdoubleglass-engineering = Engineering
|
||||
spray-painter-style-airlockdoubleglass-maintenance = Maintenance
|
||||
spray-painter-style-airlockdoubleglass-medical = Medical
|
||||
spray-painter-style-airlockdoubleglass-salvage = Salvage
|
||||
spray-painter-style-airlockdoubleglass-science = Science
|
||||
spray-painter-style-airlockdoubleglass-security = Security
|
||||
spray-painter-style-airlockdoubleglass-virology = Virology
|
||||
spray-painter-style-airlockdoubleglass-centralcommand = Central Command
|
||||
|
||||
# Triple glass airlocks
|
||||
spray-painter-style-airlocktripleglass-atmospherics = Atmospherics
|
||||
spray-painter-style-airlocktripleglass-basic = Basic
|
||||
spray-painter-style-airlocktripleglass-cargo = Cargo
|
||||
spray-painter-style-airlocktripleglass-chemistry = Chemistry
|
||||
spray-painter-style-airlocktripleglass-command = Command
|
||||
spray-painter-style-airlocktripleglass-engineering = Engineering
|
||||
spray-painter-style-airlocktripleglass-maintenance = Maintenance
|
||||
spray-painter-style-airlocktripleglass-medical = Medical
|
||||
spray-painter-style-airlocktripleglass-salvage = Salvage
|
||||
spray-painter-style-airlocktripleglass-science = Science
|
||||
spray-painter-style-airlocktripleglass-security = Security
|
||||
spray-painter-style-airlocktripleglass-virology = Virology
|
||||
spray-painter-style-airlocktripleglass-centralcommand = Central Command
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
# Группы
|
||||
spray-painter-tab-group-airlockdoubleglass = Двойной
|
||||
spray-painter-tab-group-airlocktripleglass = Тройной
|
||||
|
||||
# Двойные стеклянные шлюзы
|
||||
spray-painter-style-airlockdoubleglass-atmospherics = Атмосферика
|
||||
spray-painter-style-airlockdoubleglass-basic = Обычный
|
||||
spray-painter-style-airlockdoubleglass-cargo = Снабжение
|
||||
spray-painter-style-airlockdoubleglass-chemistry = Химия
|
||||
spray-painter-style-airlockdoubleglass-command = Командный
|
||||
spray-painter-style-airlockdoubleglass-engineering = Инженерный
|
||||
spray-painter-style-airlockdoubleglass-maintenance = Технический
|
||||
spray-painter-style-airlockdoubleglass-medical = Медицинский
|
||||
spray-painter-style-airlockdoubleglass-salvage = Утилизация
|
||||
spray-painter-style-airlockdoubleglass-science = Научный
|
||||
spray-painter-style-airlockdoubleglass-security = Служба безопасности
|
||||
spray-painter-style-airlockdoubleglass-virology = Вирусология
|
||||
spray-painter-style-airlockdoubleglass-centralcommand = Центральное командование
|
||||
|
||||
# Тройные стеклянные шлюзы
|
||||
spray-painter-style-airlocktripleglass-atmospherics = Атмосферика
|
||||
spray-painter-style-airlocktripleglass-basic = Обычный
|
||||
spray-painter-style-airlocktripleglass-cargo = Снабжение
|
||||
spray-painter-style-airlocktripleglass-chemistry = Химия
|
||||
spray-painter-style-airlocktripleglass-command = Командный
|
||||
spray-painter-style-airlocktripleglass-engineering = Инженерный
|
||||
spray-painter-style-airlocktripleglass-maintenance = Технический
|
||||
spray-painter-style-airlocktripleglass-medical = Медицинский
|
||||
spray-painter-style-airlocktripleglass-salvage = Утилизация
|
||||
spray-painter-style-airlocktripleglass-science = Научный
|
||||
spray-painter-style-airlocktripleglass-security = Служба безопасности
|
||||
spray-painter-style-airlocktripleglass-virology = Вирусология
|
||||
spray-painter-style-airlocktripleglass-centralcommand = Центральное командование
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
spray-painter-window-title = Краскопульт
|
||||
spray-painter-style-not-available = Невозможно применить выбранный стиль к данному типу шлюза
|
||||
spray-painter-selected-style = Выбранный стиль:
|
||||
spray-painter-selected-color = Выбранный цвет:
|
||||
spray-painter-color-red = красный
|
||||
spray-painter-color-yellow = жёлтый
|
||||
spray-painter-color-brown = коричневый
|
||||
spray-painter-color-green = зелёный
|
||||
spray-painter-color-cyan = голубой
|
||||
spray-painter-color-blue = синий
|
||||
spray-painter-color-white = белый
|
||||
spray-painter-color-black = чёрный
|
||||
|
|
@ -1 +1,14 @@
|
|||
pipe-painter-no-color-selected = (Цвет не выбран)
|
||||
|
||||
pipe-painter-color-red = красный
|
||||
pipe-painter-color-yellow = жёлтый
|
||||
pipe-painter-color-brown = коричневый
|
||||
pipe-painter-color-green = зелёный
|
||||
pipe-painter-color-cyan = голубой
|
||||
pipe-painter-color-blue = синий
|
||||
pipe-painter-color-white = белый
|
||||
pipe-painter-color-black = чёрный
|
||||
pipe-painter-color-waste = отходы
|
||||
pipe-painter-color-distro = дистра
|
||||
pipe-painter-color-air = воздух
|
||||
pipe-painter-color-mix = смесь
|
||||
|
|
|
|||
194
Resources/Locale/ru-RU/spray-painter/spray-painter.ftl
Normal file
194
Resources/Locale/ru-RU/spray-painter/spray-painter.ftl
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
# Components
|
||||
spray-painter-ammo-on-examine = Вмещает {$charges} зарядов.
|
||||
spray-painter-ammo-after-interact-full = Краскопульт полностью заправлен!
|
||||
spray-painter-ammo-after-interact-refilled = Вы заправляете краскопульт.
|
||||
|
||||
spray-painter-interact-no-charges = Недостаточно краски.
|
||||
spray-painter-interact-nothing-to-remove = Нечего удалять!
|
||||
|
||||
spray-painter-on-examined-painted-message = Похоже, объект был недавно окрашен.
|
||||
spray-painter-style-not-available = Невозможно применить выбранный стиль к этому объекту.
|
||||
|
||||
spray-painter-verb-toggle-decals = Переключить рисование декалей
|
||||
|
||||
spray-painter-item-status-label = Декали: {$mode}
|
||||
spray-painter-item-status-add = [color=green]Добавить[/color]
|
||||
spray-painter-item-status-remove = [color=red]Удалить[/color]
|
||||
spray-painter-item-status-off = [color=gray]Выкл.[/color]
|
||||
|
||||
# UI
|
||||
spray-painter-window-title = Краскопульт
|
||||
|
||||
spray-painter-selected-style = Выбранный стиль:
|
||||
|
||||
spray-painter-selected-decals = Выбранная декаль:
|
||||
spray-painter-use-custom-color = Использовать свой цвет
|
||||
spray-painter-use-snap-to-tile = Привязать к тайлу
|
||||
|
||||
spray-painter-angle-rotation = Поворот:
|
||||
spray-painter-angle-rotation-90-sub = -90°
|
||||
spray-painter-angle-rotation-reset = 0°
|
||||
spray-painter-angle-rotation-90-add = +90°
|
||||
|
||||
spray-painter-selected-color = Выбранный цвет:
|
||||
spray-painter-color-red = красный
|
||||
spray-painter-color-yellow = жёлтый
|
||||
spray-painter-color-brown = коричневый
|
||||
spray-painter-color-green = зелёный
|
||||
spray-painter-color-cyan = голубой
|
||||
spray-painter-color-blue = синий
|
||||
spray-painter-color-white = белый
|
||||
spray-painter-color-black = чёрный
|
||||
|
||||
# Categories (tabs)
|
||||
spray-painter-tab-category-airlocks = Шлюзы
|
||||
spray-painter-tab-category-canisters = Канистры
|
||||
spray-painter-tab-category-crates = Ящики
|
||||
spray-painter-tab-category-lockers = Шкафчики
|
||||
spray-painter-tab-category-pipes = Трубы
|
||||
spray-painter-tab-category-decals = Декали
|
||||
|
||||
spray-painter-tab-group-airlockstandard = Стандартный
|
||||
spray-painter-tab-group-airlockglass = Стеклянный
|
||||
|
||||
spray-painter-tab-group-cratesteel = Сталь
|
||||
spray-painter-tab-group-crateplastic = Пластик
|
||||
spray-painter-tab-group-cratesecure = Защищённый
|
||||
|
||||
spray-painter-tab-group-closet = Незапертый
|
||||
spray-painter-tab-group-locker = Запертый
|
||||
spray-painter-tab-group-wallcloset = Незапертый (настенный)
|
||||
spray-painter-tab-group-walllocker = Запертый (настенный)
|
||||
|
||||
# Airlocks
|
||||
spray-painter-style-airlockstandard-atmospherics = Атмосферика
|
||||
spray-painter-style-airlockstandard-basic = Обычный
|
||||
spray-painter-style-airlockstandard-cargo = Снабжение
|
||||
spray-painter-style-airlockstandard-chemistry = Химия
|
||||
spray-painter-style-airlockstandard-command = Командный
|
||||
spray-painter-style-airlockstandard-engineering = Инженерный
|
||||
spray-painter-style-airlockstandard-freezer = Морозильник
|
||||
spray-painter-style-airlockstandard-hydroponics = Гидропоника
|
||||
spray-painter-style-airlockstandard-maintenance = Технический
|
||||
spray-painter-style-airlockstandard-medical = Медицинский
|
||||
spray-painter-style-airlockstandard-salvage = Утилизация
|
||||
spray-painter-style-airlockstandard-science = Научный
|
||||
spray-painter-style-airlockstandard-security = Служба безопасности
|
||||
spray-painter-style-airlockstandard-virology = Вирусология
|
||||
|
||||
spray-painter-style-airlockglass-atmospherics = Атмосферика
|
||||
spray-painter-style-airlockglass-basic = Обычный
|
||||
spray-painter-style-airlockglass-cargo = Снабжение
|
||||
spray-painter-style-airlockglass-chemistry = Химия
|
||||
spray-painter-style-airlockglass-command = Командный
|
||||
spray-painter-style-airlockglass-engineering = Инженерный
|
||||
spray-painter-style-airlockglass-hydroponics = Гидропоника
|
||||
spray-painter-style-airlockglass-maintenance = Технический
|
||||
spray-painter-style-airlockglass-medical = Медицинский
|
||||
spray-painter-style-airlockglass-salvage = Утилизация
|
||||
spray-painter-style-airlockglass-science = Научный
|
||||
spray-painter-style-airlockglass-security = Служба безопасности
|
||||
spray-painter-style-airlockglass-virology = Вирусология
|
||||
|
||||
# Lockers
|
||||
spray-painter-style-locker-atmospherics = Атмосферика
|
||||
spray-painter-style-locker-basic = Обычный
|
||||
spray-painter-style-locker-botanist = Ботаник
|
||||
spray-painter-style-locker-brigmedic = Бригмедик
|
||||
spray-painter-style-locker-captain = Капитана
|
||||
spray-painter-style-locker-ce = Старшего Инженера
|
||||
spray-painter-style-locker-chemical = Химия
|
||||
spray-painter-style-locker-clown = Клоун
|
||||
spray-painter-style-locker-cmo = Главный врач
|
||||
spray-painter-style-locker-doctor = Врача
|
||||
spray-painter-style-locker-electrical = Электрика
|
||||
spray-painter-style-locker-engineer = Инженер
|
||||
spray-painter-style-locker-evac = Ремонт эвакуации
|
||||
spray-painter-style-locker-hop = Глава персонала
|
||||
spray-painter-style-locker-hos = Глава службы безопасности
|
||||
spray-painter-style-locker-medicine = Медицинский
|
||||
spray-painter-style-locker-mime = Мим
|
||||
spray-painter-style-locker-paramedic = Парамедик
|
||||
spray-painter-style-locker-quartermaster = Квартирмейстер
|
||||
spray-painter-style-locker-rd = Научный руководитель
|
||||
spray-painter-style-locker-representative = Представитель
|
||||
spray-painter-style-locker-salvage = Утилизация
|
||||
spray-painter-style-locker-scientist = Учёный
|
||||
spray-painter-style-locker-security = Служба безопасности
|
||||
spray-painter-style-locker-welding = Инструменты
|
||||
|
||||
spray-painter-style-closet-basic = Обычный
|
||||
spray-painter-style-closet-biohazard = Биологическая опасность
|
||||
spray-painter-style-closet-biohazard-science = Биологическая опасность (наука)
|
||||
spray-painter-style-closet-biohazard-virology = Биологическая опасность (вирусология)
|
||||
spray-painter-style-closet-biohazard-security = Биологическая опасность (служба безопасности)
|
||||
spray-painter-style-closet-biohazard-janitor = Биологическая опасность (уборщик)
|
||||
spray-painter-style-closet-bomb = Сапёрный Набор
|
||||
spray-painter-style-closet-bomb-janitor = Сапёрный Набор
|
||||
spray-painter-style-closet-chef = Шеф-повар
|
||||
spray-painter-style-closet-fire = Пожарная безопасность
|
||||
spray-painter-style-closet-janitor = Уборщик
|
||||
spray-painter-style-closet-legal = Юрист
|
||||
spray-painter-style-closet-nitrogen = Интерналы (азот)
|
||||
spray-painter-style-closet-oxygen = Интерналы (кислород)
|
||||
spray-painter-style-closet-radiation = Радиационный костюм
|
||||
spray-painter-style-closet-tool = Инструменты
|
||||
|
||||
spray-painter-style-wallcloset-atmospherics = Атмосферика
|
||||
spray-painter-style-wallcloset-basic = Обычный
|
||||
spray-painter-style-wallcloset-black = Чёрный
|
||||
spray-painter-style-wallcloset-blue = Синий
|
||||
spray-painter-style-wallcloset-fire = Пожарная безопасность
|
||||
spray-painter-style-wallcloset-green = Зелёный
|
||||
spray-painter-style-wallcloset-grey = Серый
|
||||
spray-painter-style-wallcloset-mixed = Смешанный
|
||||
spray-painter-style-wallcloset-nitrogen = Интерналы (азот)
|
||||
spray-painter-style-wallcloset-orange = Оранжевый
|
||||
spray-painter-style-wallcloset-oxygen = Интерналы (кислород)
|
||||
spray-painter-style-wallcloset-pink = Розовый
|
||||
spray-painter-style-wallcloset-white = Белый
|
||||
spray-painter-style-wallcloset-yellow = Жёлтый
|
||||
|
||||
spray-painter-style-walllocker-evac = Ремонт эвакуации
|
||||
spray-painter-style-walllocker-medical = Медицинский
|
||||
|
||||
# Crates
|
||||
spray-painter-style-cratesteel-basic = Обычный
|
||||
spray-painter-style-cratesteel-electrical = Электрика
|
||||
spray-painter-style-cratesteel-engineering = Инженерный
|
||||
spray-painter-style-cratesteel-radiation = Радиация
|
||||
spray-painter-style-cratesteel-science = Научный
|
||||
spray-painter-style-cratesteel-surgery = Хирургия
|
||||
|
||||
spray-painter-style-crateplastic-basic = Обычный
|
||||
spray-painter-style-crateplastic-chemistry = Химия
|
||||
spray-painter-style-crateplastic-command = Командный
|
||||
spray-painter-style-crateplastic-hydroponics = Гидропоника
|
||||
spray-painter-style-crateplastic-medical = Медицинский
|
||||
spray-painter-style-crateplastic-oxygen = Кислород
|
||||
|
||||
spray-painter-style-cratesecure-basic = Обычный
|
||||
spray-painter-style-cratesecure-chemistry = Химия
|
||||
spray-painter-style-cratesecure-command = Командный
|
||||
spray-painter-style-cratesecure-engineering = Инженерный
|
||||
spray-painter-style-cratesecure-hydroponics = Гидропоника
|
||||
spray-painter-style-cratesecure-medical = Медицинский
|
||||
spray-painter-style-cratesecure-plasma = Плазма
|
||||
spray-painter-style-cratesecure-private = Личный
|
||||
spray-painter-style-cratesecure-science = Научный
|
||||
spray-painter-style-cratesecure-secgear = Снаряжение СБ
|
||||
spray-painter-style-cratesecure-weapon = Оружие
|
||||
|
||||
# Canisters
|
||||
spray-painter-style-canisters-air = Воздух
|
||||
spray-painter-style-canisters-ammonia = Аммиак
|
||||
spray-painter-style-canisters-carbon-dioxide = Углекислый газ
|
||||
spray-painter-style-canisters-frezon = Фрезон
|
||||
spray-painter-style-canisters-nitrogen = Азот
|
||||
spray-painter-style-canisters-nitrous-oxide = Закись азота
|
||||
spray-painter-style-canisters-oxygen = Кислород
|
||||
spray-painter-style-canisters-plasma = Плазма
|
||||
spray-painter-style-canisters-storage = Хранилище
|
||||
spray-painter-style-canisters-tritium = Тритий
|
||||
spray-painter-style-canisters-water-vapor = Водяной пар
|
||||
|
||||
|
|
@ -3,6 +3,10 @@
|
|||
groups:
|
||||
- AirlockStandard
|
||||
- AirlockGlass
|
||||
# Sunrise - start
|
||||
- AirlockDoubleGlass
|
||||
- AirlockTripleGlass
|
||||
# Sunrise - end
|
||||
|
||||
- type: paintableGroupCategory
|
||||
id: Canisters
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_glass_airlock.rsi
|
||||
snapCardinals: false
|
||||
offset: 0.5,0
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
|
|
@ -34,6 +36,9 @@
|
|||
- GlassAirlockLayer
|
||||
- type: Transform
|
||||
noRot: false
|
||||
- type: SunriseMultiTileAirtight
|
||||
extraTiles:
|
||||
- 1,0
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlock
|
||||
|
|
@ -50,6 +55,8 @@
|
|||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_glass.rsi
|
||||
snapCardinals: false
|
||||
offset: 0,0
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
|
|
@ -63,6 +70,10 @@
|
|||
- GlassAirlockLayer
|
||||
- type: Transform
|
||||
noRot: false
|
||||
- type: SunriseMultiTileAirtight
|
||||
extraTiles:
|
||||
- -1,0
|
||||
- 1,0
|
||||
|
||||
# == Double airlocks == #
|
||||
|
||||
|
|
@ -73,6 +84,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_basic.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockAtmospherics
|
||||
|
|
@ -81,6 +94,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_atmospherics.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockCargo
|
||||
|
|
@ -89,6 +104,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_cargo.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockChemistry
|
||||
|
|
@ -97,6 +114,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_chemistry.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockCommand
|
||||
|
|
@ -105,6 +124,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_command.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockCentralCommand
|
||||
|
|
@ -113,6 +134,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_centcomm.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockEngineering
|
||||
|
|
@ -121,6 +144,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_engineering.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockMaint
|
||||
|
|
@ -129,6 +154,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_maint.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockMedical
|
||||
|
|
@ -137,6 +164,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_medical.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockScience
|
||||
|
|
@ -145,6 +174,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_science.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockSecurity
|
||||
|
|
@ -153,6 +184,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_security.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockVirology
|
||||
|
|
@ -161,6 +194,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_virology.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
- type: entity
|
||||
id: DoubleGlassAirlockSalvage
|
||||
|
|
@ -169,6 +204,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/double_salvage.rsi
|
||||
- type: Paintable
|
||||
group: AirlockDoubleGlass
|
||||
|
||||
# == Triple airlocks ==
|
||||
|
||||
|
|
@ -179,6 +216,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_basic.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockAtmospherics
|
||||
|
|
@ -187,6 +226,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_atmospherics.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockCargo
|
||||
|
|
@ -195,6 +236,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_cargo.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockCentralCommand
|
||||
|
|
@ -203,6 +246,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_centcomm.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockChemistry
|
||||
|
|
@ -211,6 +256,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_chemistry.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockCommand
|
||||
|
|
@ -219,6 +266,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_command.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockEngineering
|
||||
|
|
@ -227,6 +276,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_engineering.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockMaint
|
||||
|
|
@ -235,6 +286,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_maint.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockMedical
|
||||
|
|
@ -243,6 +296,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_medical.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockSalvage
|
||||
|
|
@ -251,6 +306,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_salvage.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockScience
|
||||
|
|
@ -259,6 +316,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_science.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockSecurity
|
||||
|
|
@ -267,6 +326,8 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_security.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
||||
- type: entity
|
||||
id: TripleGlassAirlockVirology
|
||||
|
|
@ -275,3 +336,5 @@
|
|||
components:
|
||||
- type: Sprite
|
||||
sprite: _Sunrise/Structures/Doors/Airlocks/Glass/triple_virology.rsi
|
||||
- type: Paintable
|
||||
group: AirlockTripleGlass
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
- type: entity
|
||||
id: SunriseMultiTileAirtightBlocker
|
||||
name: airtight blocker
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: Airtight
|
||||
airBlocked: false
|
||||
noAirWhenFullyAirBlocked: false
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
- type: paintableGroup
|
||||
id: AirlockDoubleGlass
|
||||
time: 6
|
||||
cost: 6
|
||||
defaultStyle: basic
|
||||
styles:
|
||||
atmospherics: DoubleGlassAirlockAtmospherics
|
||||
basic: DoubleGlassAirlockBasic
|
||||
cargo: DoubleGlassAirlockCargo
|
||||
chemistry: DoubleGlassAirlockChemistry
|
||||
command: DoubleGlassAirlockCommand
|
||||
engineering: DoubleGlassAirlockEngineering
|
||||
maintenance: DoubleGlassAirlockMaint
|
||||
medical: DoubleGlassAirlockMedical
|
||||
salvage: DoubleGlassAirlockSalvage
|
||||
science: DoubleGlassAirlockScience
|
||||
security: DoubleGlassAirlockSecurity
|
||||
virology: DoubleGlassAirlockVirology
|
||||
|
||||
- type: paintableGroup
|
||||
id: AirlockTripleGlass
|
||||
time: 9
|
||||
cost: 9
|
||||
defaultStyle: basic
|
||||
styles:
|
||||
atmospherics: TripleGlassAirlockAtmospherics
|
||||
basic: TripleGlassAirlockBasic
|
||||
cargo: TripleGlassAirlockCargo
|
||||
chemistry: TripleGlassAirlockChemistry
|
||||
command: TripleGlassAirlockCommand
|
||||
engineering: TripleGlassAirlockEngineering
|
||||
maintenance: TripleGlassAirlockMaint
|
||||
medical: TripleGlassAirlockMedical
|
||||
salvage: TripleGlassAirlockSalvage
|
||||
science: TripleGlassAirlockScience
|
||||
security: TripleGlassAirlockSecurity
|
||||
virology: TripleGlassAirlockVirology
|
||||
Loading…
Add table
Reference in a new issue