Arcade machine improvements (#24200)
* Give 'em something to talk about * Wire panel visuals * Wire graphics tweak * More ads and thanks * More ads for a noisy arcade * New screen for space villain machines * Implement EmitSoundIntervalComponent and a bunch of arcade noises * Require power for sounds * Allow earlier startup intervals * Orange glow * Audio attributions * Include the PR link * Replace EmitSoundInterval with expanded SpamEmitSound * Remove pacman-themed arcade sounds * Documentation good. * Updated methods to use Entity<T> * Refactored SpamEmitSound to get rid of accumulator and chance. * Fixed prewarm logic * Moved stuff to Shared * Fix outdated YAML * Better prediction, auto pause handling * Make enable/disable reset the timer instead of trying to save it.
This commit is contained in:
@@ -19,4 +19,9 @@ public sealed partial class BlockGameArcadeComponent : Component
|
||||
/// The players currently viewing (but not playing) the active session of NT-BG.
|
||||
/// </summary>
|
||||
public readonly List<ICommonSession> Spectators = new();
|
||||
|
||||
/// <summary>
|
||||
/// Whether the game machine should thank (or otherwise talk to) the player when they leave
|
||||
/// </summary>
|
||||
public bool ShouldSayThankYou;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Shared.UserInterface;
|
||||
using Content.Server.Advertise;
|
||||
using Content.Shared.Arcade;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Player;
|
||||
@@ -9,6 +10,7 @@ namespace Content.Server.Arcade.BlockGame;
|
||||
public sealed class BlockGameArcadeSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
||||
[Dependency] private readonly AdvertiseSystem _advertise = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -89,7 +91,15 @@ public sealed class BlockGameArcadeSystem : EntitySystem
|
||||
UpdatePlayerStatus(uid, component.Player, blockGame: component);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Everybody's gone
|
||||
component.Player = null;
|
||||
if (component.ShouldSayThankYou && TryComp<AdvertiseComponent>(uid, out var advertise))
|
||||
{
|
||||
_advertise.SayThankYou(uid, advertise);
|
||||
component.ShouldSayThankYou = false;
|
||||
}
|
||||
}
|
||||
|
||||
UpdatePlayerStatus(uid, temp, blockGame: component);
|
||||
}
|
||||
@@ -103,6 +113,7 @@ public sealed class BlockGameArcadeSystem : EntitySystem
|
||||
_uiSystem.CloseAll(bui);
|
||||
component.Player = null;
|
||||
component.Spectators.Clear();
|
||||
component.ShouldSayThankYou = false;
|
||||
}
|
||||
|
||||
private void OnPlayerAction(EntityUid uid, BlockGameArcadeComponent component, BlockGameMessages.BlockGamePlayerActionMessage msg)
|
||||
@@ -122,6 +133,8 @@ public sealed class BlockGameArcadeSystem : EntitySystem
|
||||
return;
|
||||
}
|
||||
|
||||
component.ShouldSayThankYou = true;
|
||||
|
||||
component.Game.ProcessInput(msg.PlayerAction);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,4 +110,9 @@ public sealed partial class SpaceVillainArcadeComponent : SharedSpaceVillainArca
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public int RewardAmount = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Whether the game machine should thank (or otherwise talk to) the player when they leave
|
||||
/// </summary>
|
||||
public bool ShouldSayThankYou;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Content.Server.Power.Components;
|
||||
using Content.Shared.UserInterface;
|
||||
using Content.Server.Advertise;
|
||||
using static Content.Shared.Arcade.SharedSpaceVillainArcadeComponent;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Audio;
|
||||
@@ -13,6 +14,7 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audioSystem = default!;
|
||||
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
||||
[Dependency] private readonly AdvertiseSystem _advertise = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -22,6 +24,7 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem
|
||||
SubscribeLocalEvent<SpaceVillainArcadeComponent, AfterActivatableUIOpenEvent>(OnAfterUIOpenSV);
|
||||
SubscribeLocalEvent<SpaceVillainArcadeComponent, SpaceVillainArcadePlayerActionMessage>(OnSVPlayerAction);
|
||||
SubscribeLocalEvent<SpaceVillainArcadeComponent, PowerChangedEvent>(OnSVillainPower);
|
||||
SubscribeLocalEvent<SpaceVillainArcadeComponent, BoundUIClosedEvent>(OnBoundUIClosed);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -79,6 +82,7 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem
|
||||
case PlayerAction.Heal:
|
||||
case PlayerAction.Recharge:
|
||||
component.Game.ExecutePlayerAction(uid, msg.PlayerAction, component);
|
||||
component.ShouldSayThankYou = true; // Any sort of gameplay action counts
|
||||
break;
|
||||
case PlayerAction.NewGame:
|
||||
_audioSystem.PlayPvs(component.NewGameSound, uid, AudioParams.Default.WithVolume(-4f));
|
||||
@@ -106,5 +110,19 @@ public sealed partial class SpaceVillainArcadeSystem : EntitySystem
|
||||
|
||||
if (_uiSystem.TryGetUi(uid, SpaceVillainArcadeUiKey.Key, out var bui))
|
||||
_uiSystem.CloseAll(bui);
|
||||
|
||||
component.ShouldSayThankYou = false;
|
||||
}
|
||||
|
||||
private void OnBoundUIClosed(Entity<SpaceVillainArcadeComponent> ent, ref BoundUIClosedEvent args)
|
||||
{
|
||||
if (args.UiKey is not SpaceVillainArcadeUiKey || (SpaceVillainArcadeUiKey) args.UiKey != SpaceVillainArcadeUiKey.Key)
|
||||
return;
|
||||
|
||||
if (ent.Comp.ShouldSayThankYou && TryComp<AdvertiseComponent>(ent.Owner, out var advertise))
|
||||
{
|
||||
_advertise.SayThankYou(ent.Owner, advertise);
|
||||
ent.Comp.ShouldSayThankYou = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user