Refactor guard bell (#1553)
* Remove maps edits * fix from review * Remove unused CP14 alert levels (fixing YAML) * fix missing prototype CP14GuardBell * fix from review 2 * fix TriggerSystem partial --------- Co-authored-by: Jordan FUMA <@jfa>
This commit is contained in:
@@ -1,55 +0,0 @@
|
||||
using Content.Shared.CCVar;
|
||||
using Content.Shared.Chat;
|
||||
using Content.Shared.Communications;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Client._CP14.UserInterface
|
||||
{
|
||||
public sealed class GuardBellBoundUserInterface : BoundUserInterface
|
||||
{
|
||||
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
||||
|
||||
[ViewVariables]
|
||||
private GuardBellMenu? _menu;
|
||||
|
||||
public GuardBellBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Open()
|
||||
{
|
||||
base.Open();
|
||||
|
||||
_menu = this.CreateWindow<GuardBellMenu>();
|
||||
_menu.OnAlertLevel += AlertLevelSelected;
|
||||
}
|
||||
|
||||
public void AlertLevelSelected(string level)
|
||||
{
|
||||
if (_menu!.AlertLevelSelectable)
|
||||
{
|
||||
_menu.CurrentLevel = level;
|
||||
SendMessage(new CommunicationsConsoleSelectAlertLevelMessage(level));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void UpdateState(BoundUserInterfaceState state)
|
||||
{
|
||||
base.UpdateState(state);
|
||||
|
||||
if (state is not CommunicationsConsoleInterfaceState commsState)
|
||||
return;
|
||||
|
||||
if (_menu != null)
|
||||
{
|
||||
_menu.AlertLevelSelectable = commsState.AlertLevels != null && !float.IsNaN(commsState.CurrentAlertDelay) && commsState.CurrentAlertDelay <= 0;
|
||||
_menu.CurrentLevel = commsState.CurrentAlert;
|
||||
_menu.UpdateAlertLevels(commsState.AlertLevels, _menu.CurrentLevel);
|
||||
_menu.AlertLevelButton.Disabled = !_menu.AlertLevelSelectable;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<controls:FancyWindow xmlns="https://spacestation14.io"
|
||||
xmlns:controls="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
Title="{Loc 'cp14-guard-bell-menu-title'}"
|
||||
MinSize="200 100">
|
||||
|
||||
<!-- Main Container -->
|
||||
<BoxContainer Orientation="Vertical"
|
||||
HorizontalExpand="False"
|
||||
VerticalExpand="True"
|
||||
Margin="6 6 6 5">
|
||||
|
||||
<!-- ButtonsPart -->
|
||||
<BoxContainer Orientation="Vertical"
|
||||
VerticalAlignment="Bottom"
|
||||
SeparationOverride="4">
|
||||
|
||||
<!-- AnnouncePart -->
|
||||
<BoxContainer Orientation="Vertical"
|
||||
Margin="0 2">
|
||||
|
||||
<OptionButton Name="AlertLevelButton"
|
||||
Access="Public"
|
||||
ToolTip="{Loc 'cp14-guard-bell-alert-button'}"
|
||||
StyleClasses="OpenRight"/>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</controls:FancyWindow>
|
||||
@@ -1,86 +0,0 @@
|
||||
using System.Globalization;
|
||||
using Content.Client.UserInterface.Controls;
|
||||
using Content.Shared.CCVar;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Configuration;
|
||||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Client._CP14.UserInterface
|
||||
{
|
||||
[GenerateTypedNameReferences]
|
||||
public sealed partial class GuardBellMenu : FancyWindow
|
||||
{
|
||||
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly ILocalizationManager _loc = default!;
|
||||
|
||||
public bool AlertLevelSelectable;
|
||||
public string CurrentLevel = string.Empty;
|
||||
|
||||
|
||||
public event Action<string>? OnAlertLevel;
|
||||
|
||||
public GuardBellMenu()
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
RobustXamlLoader.Load(this);
|
||||
|
||||
AlertLevelButton.OnItemSelected += args =>
|
||||
{
|
||||
var metadata = AlertLevelButton.GetItemMetadata(args.Id);
|
||||
if (metadata != null && metadata is string cast)
|
||||
{
|
||||
OnAlertLevel?.Invoke(cast);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
AlertLevelButton.Disabled = !AlertLevelSelectable;
|
||||
|
||||
}
|
||||
|
||||
protected override void FrameUpdate(FrameEventArgs args)
|
||||
{
|
||||
base.FrameUpdate(args);
|
||||
}
|
||||
|
||||
// The current alert could make levels unselectable, so we need to ensure that the UI reacts properly.
|
||||
// If the current alert is unselectable, the only item in the alerts list will be
|
||||
// the current alert. Otherwise, it will be the list of alerts, with the current alert
|
||||
// selected.
|
||||
public void UpdateAlertLevels(List<string>? alerts, string currentAlert)
|
||||
{
|
||||
AlertLevelButton.Clear();
|
||||
|
||||
if (alerts == null)
|
||||
{
|
||||
var name = currentAlert;
|
||||
if (_loc.TryGetString($"cp14-alert-level-{currentAlert}", out var locName))
|
||||
{
|
||||
name = locName;
|
||||
}
|
||||
AlertLevelButton.AddItem(name);
|
||||
AlertLevelButton.SetItemMetadata(AlertLevelButton.ItemCount - 1, currentAlert);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var alert in alerts)
|
||||
{
|
||||
var name = alert;
|
||||
if (_loc.TryGetString($"cp14-alert-level-{alert}", out var locName))
|
||||
{
|
||||
name = locName;
|
||||
}
|
||||
AlertLevelButton.AddItem(name);
|
||||
AlertLevelButton.SetItemMetadata(AlertLevelButton.ItemCount - 1, alert);
|
||||
if (alert == currentAlert)
|
||||
{
|
||||
AlertLevelButton.Select(AlertLevelButton.ItemCount - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,7 @@ public sealed class AlertLevelSystem : EntitySystem
|
||||
[Dependency] private readonly StationSystem _stationSystem = default!;
|
||||
|
||||
// Until stations are a prototype, this is how it's going to have to be.
|
||||
// public const string DefaultAlertLevelSet = "stationAlerts"; // OLD VANILA. Changed by CP14.
|
||||
public const string DefaultAlertLevelSet = "CP14TownAlerts";
|
||||
public const string DefaultAlertLevelSet = "stationAlerts";
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -185,8 +184,7 @@ public sealed class AlertLevelSystem : EntitySystem
|
||||
}
|
||||
|
||||
// The full announcement to be spat out into chat.
|
||||
// var announcementFull = Loc.GetString("alert-level-announcement", ("name", name), ("announcement", announcement)); // OLD VANILA. Changed by CP14.
|
||||
var announcementFull = Loc.GetString("cp14-alert-level-announcement", ("name", name), ("announcement", announcement));
|
||||
var announcementFull = Loc.GetString("alert-level-announcement", ("name", name), ("announcement", announcement));
|
||||
|
||||
var playDefault = false;
|
||||
if (playSound)
|
||||
|
||||
@@ -95,6 +95,7 @@ namespace Content.Server.Explosion.EntitySystems
|
||||
InitializeTimedCollide();
|
||||
InitializeVoice();
|
||||
InitializeMobstate();
|
||||
InitializeDamageReceived(); //CP14 trigger on damage partial
|
||||
|
||||
SubscribeLocalEvent<TriggerOnSpawnComponent, MapInitEvent>(OnSpawnTriggered);
|
||||
SubscribeLocalEvent<TriggerOnCollideComponent, StartCollideEvent>(OnTriggerCollide);
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Content.Server.Explosion.Components;
|
||||
|
||||
/// <summary>
|
||||
/// Triggers when the entity is damaged.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
public sealed partial class CP14TriggerOnDamageReceivedComponent : Component { }
|
||||
@@ -0,0 +1,20 @@
|
||||
using Content.Server.Explosion.Components;
|
||||
using Content.Shared.Damage;
|
||||
|
||||
namespace Content.Server.Explosion.EntitySystems;
|
||||
|
||||
public sealed partial class TriggerSystem
|
||||
{
|
||||
private void InitializeDamageReceived()
|
||||
{
|
||||
SubscribeLocalEvent<CP14TriggerOnDamageReceivedComponent, DamageChangedEvent>(OnDamageReceived);
|
||||
}
|
||||
|
||||
private void OnDamageReceived(EntityUid uid, CP14TriggerOnDamageReceivedComponent component, DamageChangedEvent args)
|
||||
{
|
||||
if (!args.DamageIncreased)
|
||||
return;
|
||||
|
||||
Trigger(uid);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,21 @@
|
||||
# Attempted to keep the files in alphabetical order so its easier to audit.
|
||||
# Finding individual authors is an unfeasible task. If you can reference the author please do so.
|
||||
- files: ["safe-alert.ogg"]
|
||||
license: "CC-BY-4.0"
|
||||
copyright: "Created by kevp888"
|
||||
source: "https://freesound.org/s/688445"
|
||||
- files: ["doom-bell-short.ogg"]
|
||||
license: "CC-BY-NC-3.0"
|
||||
copyright: "Created by Ev-Dawg"
|
||||
source: "https://freesound.org/s/335991"
|
||||
|
||||
- files: ["minor-alert.ogg"]
|
||||
- files: ["minor-alert-short.ogg"]
|
||||
license: "CC0-1.0"
|
||||
copyright: "Created by Horrormarkus"
|
||||
source: "https://freesound.org/s/659672"
|
||||
|
||||
- files: ["major-alert.ogg"]
|
||||
- files: ["major-alert-short.ogg"]
|
||||
license: "CC0-1.0"
|
||||
copyright: "Created by Aeonomi"
|
||||
source: "https://freesound.org/s/180329"
|
||||
|
||||
- files: ["scary-bell-short.ogg"]
|
||||
license: "CC-BY-NC-4.0"
|
||||
copyright: "Created by WesleyExtremeGamer"
|
||||
source: "https://freesound.org/s/530340"
|
||||
|
||||
BIN
Resources/Audio/_CP14/Misc/doom-bell-short.ogg
Normal file
BIN
Resources/Audio/_CP14/Misc/doom-bell-short.ogg
Normal file
Binary file not shown.
BIN
Resources/Audio/_CP14/Misc/major-alert-short.ogg
Normal file
BIN
Resources/Audio/_CP14/Misc/major-alert-short.ogg
Normal file
Binary file not shown.
Binary file not shown.
BIN
Resources/Audio/_CP14/Misc/minor-alert-short.ogg
Normal file
BIN
Resources/Audio/_CP14/Misc/minor-alert-short.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Resources/Audio/_CP14/Misc/scary-bell-short.ogg
Normal file
BIN
Resources/Audio/_CP14/Misc/scary-bell-short.ogg
Normal file
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
cp14-alert-level-announcement = Attention! Towns threat level is now {$name}! {$announcement}
|
||||
|
||||
cp14-alert-level-safe = Safe
|
||||
cp14-alert-level-safe-announcement = There is no threat to the town. Town folk may return to their duties safely.
|
||||
|
||||
cp14-alert-level-minor = Minor
|
||||
cp14-alert-level-minor-announcement = There is a minor threat to the town. Townsfolk should return to the town for their own safety. Guards are to be at their posts armed and combat ready.
|
||||
|
||||
cp14-alert-level-major = Major
|
||||
cp14-alert-level-major-announcement = There is a major threat to the town. Everyone must return to the town and protect it.
|
||||
@@ -1,2 +0,0 @@
|
||||
cp14-guard-bell-menu-title = Guard Bell
|
||||
cp14-guard-bell-alert-button = Change the towns threat level.
|
||||
@@ -1,10 +0,0 @@
|
||||
cp14-alert-level-announcement = Внимание! Уровень угрозы города теперь { $name }! { $announcement }
|
||||
|
||||
cp14-alert-level-safe = Безопасно
|
||||
cp14-alert-level-safe-announcement = Угрозы городу нет. Горожане могут спокойно вернуться к своим обязанностям.
|
||||
|
||||
cp14-alert-level-minor = Незначительная угроза
|
||||
cp14-alert-level-minor-announcement = Городу предстоит небольшая угроза. Горожанам рекомендуется быть внимательными и не покидать пределы города в темное время суток. Стража должна находиться на своих постах вооруженными и готовыми к бою.
|
||||
|
||||
cp14-alert-level-major = Большая угроза
|
||||
cp14-alert-level-major-announcement = Городу предстоит большая угроза! Призываем всех жителей объединиться и подготовиться к защите своих домов и семей.
|
||||
@@ -1,2 +0,0 @@
|
||||
cp14-guard-bell-menu-title = Колокол стражи
|
||||
cp14-guard-bell-alert-button = Изменяет уровень угрозы города.
|
||||
@@ -1,23 +0,0 @@
|
||||
- type: alertLevels
|
||||
id: CP14TownAlerts
|
||||
defaultLevel: safe
|
||||
levels:
|
||||
safe:
|
||||
announcement: cp14-alert-level-safe-announcement
|
||||
sound: /Audio/_CP14/Misc/safe-alert.ogg
|
||||
color: Green
|
||||
emergencyLightColor: LawnGreen
|
||||
shuttleTime: 600
|
||||
minor:
|
||||
announcement: cp14-alert-level-minor-announcement
|
||||
sound: /Audio/_CP14/Misc/minor-alert.ogg
|
||||
color: DodgerBlue
|
||||
emergencyLightColor: DodgerBlue
|
||||
shuttleTime: 600
|
||||
major:
|
||||
announcement: cp14-alert-level-major-announcement
|
||||
sound: /Audio/_CP14/Misc/major-alert.ogg
|
||||
color: Red
|
||||
emergencyLightColor: Red
|
||||
shuttleTime: 600
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
- BaseStation
|
||||
- BaseStationAllEventsEligible
|
||||
- BaseStationJobsSpawning
|
||||
- CP14BaseTownAlerts
|
||||
- BaseStationAlertLevels
|
||||
- BaseStationRecords # Required for lobby manifest + cryo leave
|
||||
- CP14BaseStationCommonObjectives
|
||||
- CP14BaseStationDemiplaneMap
|
||||
@@ -18,13 +18,6 @@
|
||||
components:
|
||||
- type: CP14StationCommonObjectives
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseTownAlerts
|
||||
abstract: true
|
||||
components:
|
||||
- type: AlertLevel
|
||||
alertLevelPrototype: CP14TownAlerts
|
||||
|
||||
- type: entity
|
||||
id: CP14BaseStationDemiplaneMap
|
||||
abstract: true
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
- type: entity
|
||||
parent: BaseStructure
|
||||
id: CP14GuardBell
|
||||
id: CP14BaseGuardBell
|
||||
name: guard bell
|
||||
description: A strong bell to alert the entire settlement of a possible threat.
|
||||
categories: [ ForkFiltered ]
|
||||
abstract: true
|
||||
components:
|
||||
- type: Sprite
|
||||
drawdepth: Mobs
|
||||
@@ -12,11 +13,123 @@
|
||||
sprite: _CP14/Structures/Specific/Guard/guard_bell.rsi
|
||||
layers:
|
||||
- state: base
|
||||
- type: ActivatableUI
|
||||
key: enum.CommunicationsConsoleUiKey.Key
|
||||
- type: CommunicationsConsole
|
||||
title: cp14-guard-bell-menu-title
|
||||
- type: UserInterface
|
||||
interfaces:
|
||||
enum.CommunicationsConsoleUiKey.Key:
|
||||
type: GuardBellBoundUserInterface
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
- type: TriggerOnActivate
|
||||
- type: CP14TriggerOnDamageReceived
|
||||
- type: SpawnOnTrigger
|
||||
proto: GuardBellEffect1
|
||||
- type: UseDelay
|
||||
delay: 2.0
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBell
|
||||
parent: CP14BaseGuardBell
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: base
|
||||
- type: SpawnOnTrigger
|
||||
proto: CP14GuardBellEffect1
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBell2
|
||||
parent: CP14BaseGuardBell
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: base-2
|
||||
- type: SpawnOnTrigger
|
||||
proto: CP14GuardBellEffect2
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBell3
|
||||
parent: CP14BaseGuardBell
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: base-3
|
||||
- type: SpawnOnTrigger
|
||||
proto: CP14GuardBellEffect3
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBell4
|
||||
parent: CP14BaseGuardBell
|
||||
components:
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: base-4
|
||||
- type: SpawnOnTrigger
|
||||
proto: CP14GuardBellEffect4
|
||||
|
||||
# Effects
|
||||
- type: entity
|
||||
id: CP14BaseGuardBellEffect
|
||||
categories: [ HideSpawnMenu ]
|
||||
abstract: true
|
||||
components:
|
||||
- type: CP14PvsOverride
|
||||
- type: EmitSoundOnSpawn
|
||||
sound:
|
||||
path: /Audio/_CP14/Misc/scary-bell-short.ogg
|
||||
params:
|
||||
variation: 0.1
|
||||
maxDistance: 200
|
||||
- type: TimedDespawn
|
||||
lifetime: 4.8
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
offset: 0, 0.5
|
||||
layers:
|
||||
- state: circle_increase
|
||||
sprite: _CP14/Effects/Magic/cast_impact.rsi
|
||||
shader: unshaded
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBellEffect1
|
||||
parent: CP14BaseGuardBellEffect
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: EmitSoundOnSpawn
|
||||
sound:
|
||||
path: /Audio/_CP14/Misc/scary-bell-short.ogg
|
||||
params:
|
||||
variation: 0.1
|
||||
maxDistance: 200
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBellEffect2
|
||||
parent: CP14BaseGuardBellEffect
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: EmitSoundOnSpawn
|
||||
sound:
|
||||
path: /Audio/_CP14/Misc/doom-bell-short.ogg
|
||||
params:
|
||||
variation: 0.1
|
||||
maxDistance: 200
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBellEffect3
|
||||
parent: CP14BaseGuardBellEffect
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: EmitSoundOnSpawn
|
||||
sound:
|
||||
path: /Audio/_CP14/Misc/minor-alert-short.ogg
|
||||
params:
|
||||
volume: 20
|
||||
variation: 0.1
|
||||
maxDistance: 200
|
||||
|
||||
- type: entity
|
||||
id: CP14GuardBellEffect4
|
||||
parent: CP14BaseGuardBellEffect
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: EmitSoundOnSpawn
|
||||
sound:
|
||||
path: /Audio/_CP14/Misc/major-alert-short.ogg
|
||||
params:
|
||||
variation: 0.1
|
||||
maxDistance: 200
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
@@ -5,10 +5,19 @@
|
||||
"y": 64
|
||||
},
|
||||
"license": "CC-BY-SA-4.0",
|
||||
"copyright": "Created by Jaba",
|
||||
"copyright": "Created by Jaba. Variant 2, 3 and 4 by Kryyto.",
|
||||
"states": [
|
||||
{
|
||||
"name": "base"
|
||||
},
|
||||
{
|
||||
"name": "base-2"
|
||||
},
|
||||
{
|
||||
"name": "base-3"
|
||||
},
|
||||
{
|
||||
"name": "base-4"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user