CatStation/Content.Client/TextScreen/TextScreenTimerComponent.cs
Whatstone 041a7e6504
Scrolling text screens (#43997)
* Scrolling text screens

* remove ScrollingTextScreenComponent, fix comments

* shave a pixel off of the frame, commas cut off

* logMissing to false, state does may not exist

* variable timing, offset array serializer

* namespaces are a state of mind

* Use CustomArraySerializer instead of a one-off

* better alphabetize punctuation text

* Unneeded VV access, 4-space meta.json

* Subscription attributes

* cleanup pass

* shift left

* AJCM's suggestions

Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>

* PadRight returns a string.

* kill the loop, use funny division instead

* smoother animations, dark stripe on outer frame

* Update for the new comms console UI

* communications console changes

* can't spell pain without UI

* the ocho

* it's big brain time

* just a touch wider

* UI polish pass - forgive the sins

* look at my attributions dog

* EDITED

* Text screen layer init deferred until startup

* that's a new one

---------

Co-authored-by: AJCM-git <60196617+AJCM-git@users.noreply.github.com>
2026-08-15 22:03:22 +00:00

22 lines
763 B
C#

using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Client.TextScreen;
/// <summary>
/// Added to an entity already containing a <see cref="TextScreenVisualsComponent"/> to track frame-by-frame timer updates
/// </summary>
[RegisterComponent]
public sealed partial class TextScreenTimerComponent : Component
{
/// <summary>
/// The time that the timer is counting down to.
/// </summary>
[DataField("targetTime", customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan Target = TimeSpan.Zero;
/// <summary>
/// Per-character layers, for mapping into the sprite component.
/// </summary>
[ViewVariables]
public Dictionary<string, string?> LayerStatesToDraw = new();
}