Namespace SurvivorsMaker.Presentation

Classes

AccessibilitySettings

Authored limits used when the player turns on accessibility options (see GameOptions).

AudioCueRules

Pure cue selection and playback-limit calculations shared by sound components.

AuthoredTextProvider

The default: one language, every text as authored.

BossVisualSettings

Boss Visual tuning; defaults are defined by the field initializers and can be overridden per game.

CameraFollow

Follows the active player with frame-time smoothing and optional arena viewport clamping.

CameraFollowSettings

Camera Follow tuning; defaults are defined by the field initializers and can be overridden per game.

CharacterVisualSettings

Character Visual tuning; defaults are defined by the field initializers and can be overridden per game.

CombatAlertsPanel

Non-blocking combat overlay: boss health bar, short toasts (elite, boss), the horde banner and edge arrows pointing at off-screen threats. Registers itself as a wave view to read the tick's events.

CombatEffectSettings

Pooled one-shot effects: explosions, chain lightning, sparkles and ring bursts.

CombatEffects

Pooled one-shot world effects: explosion rings, chain lightning, trigger sparkles and ring bursts. Purely visual; variation comes from a local hash, never from simulation randomness.

CombatLedger

Everything the run summary and the DPS meter show, collected while a run plays. Fed by CombatTap (exact weapon attribution) and by the tick's events (Observe(in SimEvent, IReadOnlyList<string>, Func<int, string>)). Without a tap, damage comes from events alone: weapon hits by slot, everything else unsourced.

CombatRecordSettings

What the session records for the DPS meter and the run summary.

CombatTap

Read-only wrapper around the run's ICombat: forwards every call unchanged (same order, same random numbers) and reports the damage actually applied to a CombatLedger, attributed to the weapon from HitSource or the hit's slot. Player damage is split into contact and enemy projectiles.

CustomEventEffect

A built-in effect played for every event whose CustomId matches Id.

CustomEventSound

Cue for a game-defined event id (CustomId). It applies to Custom events and to built-in events that carry a detail id (e.g. a custom status behaviour), replacing their usual cue.

DamageNumberSettings

Damage Number tuning; defaults are defined by the field initializers and can be overridden per game.

DamageTakenTotals

Damage the player took from one source and channel.

DeathEffectSettings

Death Effect tuning; defaults are defined by the field initializers and can be overridden per game.

DefaultUiLanguageProvider

Only the string table's own language ("en").

DevToolsNames

Display names for dev overlays and the run summary (content text, then the id in title case).

DevToolsOptions

Developer overlays on GameUiRoot: the live DPS meter (any build) and the playtest panel (Editor and Development Builds only; see PlaytestPanel for the stripping rule).

DpsMeterModel

Live damage per second per weapon slot (and the unsourced line, slot UnsourcedSlot), split by DamageChannel, over a sliding window of the current wave.

DpsMeterPanel

Live damage per second per weapon slot over the session's DPS window (Meter), with each slot's share of the total, a hit/effect/status split, and a line for damage no weapon caused. Not a cheat: it is available in every build (ShowDpsMeter), built at runtime under GameUiRoot.

DpsWindow

Sliding sum over the last WindowTicks ticks per key: one bucket per tick in a ring, so adding is O(1) and nothing is allocated after a key is first seen. Rates divide by the window, or by the ticks since StartTick while fewer have passed (so the first second of a wave is not under-reported).

EffectText

Formats content names, tiers, effect descriptions and stat labels for the game UI.

EliteVisualSettings

Elite Visual tuning; defaults are defined by the field initializers and can be overridden per game.

FxCatalogIds

Catalog ids the presentation looks up for optional art. Missing entries use ProceduralArt.

GameLoopSettings

Game Loop tuning; defaults are defined by the field initializers and can be overridden per game.

GameOptions

The device options in effect for this process. Presentation components read them when they play a sound, shake the camera, flash or show a damage number, so a change applies on the next use. Authored settings (PresentationSettings, UiTheme) are never modified.

GameOverPanel

Displays the finished run and exposes session restart and menu actions.

GameProfile

Where the player's data lives. Put it next to SurvivorsGame (or assign it there) to keep options, unlocks, records and the saved run between sessions, each in its own file. Without it the session keeps them in memory only. A profile file from earlier package versions (profile and run in one file) is imported on first use.

GameUiRoot

Connects generated screens to a session without modifying gameplay state directly.

HudPanel

Floating top bar: health and experience bars with values, wave and timer in the middle, currency, a level badge and the pause button on the right.

InputSystemPlayerInput

Code-authored actions; does not require a generated action asset.

JsonEnvelopeFile

One save domain (options, profile or run) in one JSON file, written as a SaveEnvelope with JsonUtility and read through Read(SaveEnvelope, SaveDomain).

  • Writes go to a temporary file that is read back and then swapped in with Replace(string, string, string) (a plain copy only where the platform has no replace).
  • A corrupt or incompatible file is moved aside (*.corrupt / *.incompatible) and kept; the store then starts from defaults.
  • A file from a newer schema, or an unreadable file, is left untouched and the store refuses to write over it for the rest of the session.
JsonFileOptionsStore

Device options as a SaveEnvelope JSON file, independent of profile and run.

JsonFileProfileStore

Profile progress (unlocks, records) as a SaveEnvelope JSON file. The saved run lives in its own file (JsonFileRunStore): Load() returns no SavedRun and Save(ProfileState) ignores it. A single-file profile written by earlier package versions (profile and run together) is imported once: the original is kept beside it as *.v1.bak, the progress is rewritten here and the saved run is handed to the linked run store. The backup preserves runs with an unmapped arena.

JsonFileRunStore

The run in progress (single slot) as a SaveEnvelope JSON file. Saving null empties the slot.

LevelUpPanel

Displays current level-up offers and submits selections through the session.

LocalizedLanguage

All translated texts of one language.

LocalizedTextAsset

A ready-made ITextProvider: translation tables per language. The authored text counts as AuthoredLanguage; keys a language does not list fall back to it. Assign to TextSource or Text.

MainMenu

Chooses from content-backed definitions, or from an explicitly supplied runtime template.

MusicDuckSettings

Music ducking while a cue marked DuckMusic plays. Works on the AudioSource volume; no mixer needed.

MusicPlayer

Context music with crossfades: menu, arena or field waves, shop / level-up and boss (while a boss is alive). The context follows a bound SurvivorsGame (Choose(bool, RunPhase, RunMode, bool, bool, bool)) unless Override is set. Volume = track × catalog music volume × the music option × ducking; the master option reaches it through the AudioListener. Runs on unscaled time so pausing does not freeze a fade.

MusicRules

Pure selection of music context from the current run phase.

MusicTrack
PausePanel

Displays pause actions without directly mutating simulation state.

PlaytestCatalog

What the playtest panel offers from the run content, and the search filter of its pickers.

PlaytestCheatState

The "CHEATS USED" badge: on once any playtest command succeeded in this run (or the run says it used cheats), until the next run. Speed and single-stepping are not cheats: they never change what the simulation does.

PlaytestPanel

In-game playtest panel: give weapons, items, currency and levels, skip to a wave, invulnerability, spawn enemies, end the wave, game speed and single-stepping, and the DPS meter switch. Opened with PlaytestKey (F2) or the corner button. Commands go through Cheat(string, Func<IPlaytestCommands, RunResult>) (IPlaytestCommands); the panel shows "CHEATS USED" once one succeeded. Editor and Development Builds only (see the stripping rule at the top of this file).

PlaytestSpeed

Game-speed steps for the playtest panel.

PresentationInfo

Presentation framework information.

PresentationSettings

Presentation-only tuning. These values never affect simulation state.

ProceduralArt

Reusable fallback sprites and materials generated for presentation without external artwork.

RecordRow

A record line: character name and three numbers (runs, wins, best wave).

RecordsPanel

Main-menu side panel with the profile's records: totals, unlock progress and per-character results.

RunGainTracker

Notices items and weapons added to a run between two observations (by definition reference and count, so merges and recycles never count as gains) and writes them to a CombatLedger.

RunSummary

The run-end report built from a CombatLedger: rows sorted for display, ids kept for display names.

RunSummary.TakenRow

Taken Row measurements used by the read-only run summary.

RunSummary.WaveGains

Wave Gains measurements used by the read-only run summary.

RunSummary.WaveLevels

Wave Levels measurements used by the read-only run summary.

RunSummary.WeaponRow

Weapon Row measurements used by the read-only run summary.

RunSummaryPanel

The run-end details opened from the game-over screen's Details button: damage, DPS and kills per weapon, damage taken by source, the level-up timeline and the items and weapons gained, from Ledger. Built at runtime over the game-over layer, so prefabs made before it keep working.

SaveFileSet

The three save files of one player: options, profile progress and the saved run.

ScreenShake

Applies a temporary offset after normal camera follow; restores only its own offset.

ScreenShakeSettings

Screen Shake tuning; defaults are defined by the field initializers and can be overridden per game.

SessionPanel

Base UI panel that binds to a game session and observes its phase changes.

SettingsPanel

Device options: volumes, display mode, screen shake, flashes, damage numbers, focus pause and language. Every change applies immediately through GameOptions; Done (or leaving the screen) saves them. Opened from the main menu and the pause screen (OpenSettings()).

ShopPanel

Displays shop stock and routes purchases, locks, rerolls and recycling through the session.

SoundCatalogAsset
SoundCue

One named sound: clip variations plus playback limits.

SoundCueGate

Per-cue cooldown and concurrency limit, so hundreds of hits in one tick do not stack into noise. Times are any monotonic clock in seconds.

SoundCueKeys

Cue key for every sound role. An empty key keeps that role silent.

SoundPlaybackSettings

Sound Playback tuning; defaults are defined by the field initializers and can be overridden per game.

SoundPlayer

Pooled voices for catalog cues with per-cue cooldown and concurrency limits. Simulation events pick their cue through AudioCueRules; variation never consumes gameplay randomness. A missing cue or clip is reported once and plays nothing.

SpriteCharacterVisual

A sprite-only animation adapter. All tweens are local and simulation-independent.

StatusVisualSettings

Status tints, icons above enemies and the stun star ring.

SurvivorsGame

Owns presentation time. All gameplay changes go through the run controller.

SurvivorsSceneBootstrap

One component that turns a scene into a playable game: it connects the session (SurvivorsGame), input, the world view, the UI, music and interface sounds to your content and catalogs. Empty scene references are found in the scene or created. Both run modes work in one scene: the menu's mode toggle switches between ArenaSettings and FieldSettings. Customise from code with an ISceneBootstrapExtension component on the same GameObject.

TextProviderLanguages

Offers an ITextProvider's languages on the settings screen and installs its lookup.

UiButtonSize

Buttons keep a fixed height and a content-based width, including after text replacement.

UiButtonVisual

State colours for a generated button: fill per UiButtonKind (via the Button's colour tint), label and border colour for enabled/disabled, and a focus ring while it is the selected object (keyboard or gamepad navigation).

UiCard

Reusable content card whose visuals are populated from the current offer or owned weapon.

UiCardPool

Reusable pool of UI cards that hides unused instances between refreshes.

UiGridFit

Fits a UI grid to the available rectangle using authored cell dimensions.

UiKit

Shared hierarchy construction used by the reproducible prefab builder.

UiLanguages

Built-in language labels and optional provider used by the settings UI.

UiPrefabFactory

Creates a complete serializable hierarchy. The editor wrapper only saves it as an asset.

UiSoundBinder

Gives the generated UI its sounds: a cue per button role (buy, lock, reroll, merge, recycle, choose, back, click), slider ticks, a cue when an overlay panel opens, the unlock cue when the unlock screen appears and the victory / defeat stingers when a run ends. Re-scans after state changes, because cards are pooled.

UiSoundButton

Plays a cue when its button is clicked or submitted, and the error cue when it is pressed while disabled. A separate event handler, so it survives UI code replacing Button.onClick listeners.

UiSoundSlider

Ticks while the player drags or steps a slider. Only player input counts (values set from code stay silent); a drag ticks every MinStep of travel, and the cue's own cooldown rate-limits fast drags.

UiSprites

The default UI look needs no art: anti-aliased rounded rectangles drawn once at runtime and used as 9-slice sprites (white, so images tint them). Assign theme sprites to replace them.

UiStringEntry

One interface text key and its replacement label.

UiStrings

Keyed copy with English fallbacks. A localization adapter can supply Resolve.

UiStyle

Retains styling intent in prefabs, so the root theme remains editable after generation.

UiText

Stable built-in interface text keys resolved by UiStrings.

UiTextBinding

Static labels retain their key in generated prefabs instead of only baked text.

UiTheme

The whole UI look in one place. Defaults are a flat dark style drawn without art: rounded panels and buttons generated at runtime (see UiSprites). Assign sprites to use your own frames. Sizes are in reference pixels (1920 × 1080).

UnityOptionsApplicator

Default engine mapping. Window changes are skipped in the editor, where the game view owns the window.

UnlockPanel

Modal list of unlocks earned by the run that just ended. Shown over the run summary until dismissed.

UnlockRow

One line of the unlock popup: target icon, name, what kind of unlock, and an unlock badge.

ViewCatalogAsset

Maps definition ids to visuals, so content data stays free of presentation.

ViewEntry

How one definition id looks. Either a prefab, or a sprite the default view renders.

WaveFeedback

Event-driven world text, death pops, camera shake and pooled audio.

WaveResultPanel

Displays a completed-wave summary before progression continues.

WeaponDamageTotals

Damage one weapon (by item id) did over the run. Copies of the same weapon add up.

WeaponFieldSettings

Orbiting blades and aura rings drawn from weapon state.

WeaponSoundOverride

Weapons whose id starts with WeaponIdPrefix fire Cue instead of their kind's cue.

WorldView

Reads fixed-tick snapshots into pooled views, then interpolates them each frame.

WorldViewSettings

World View tuning; defaults are defined by the field initializers and can be overridden per game.

Structs

GainMark

Tick-stamped item or weapon acquisition used by the run summary.

LevelMark

Tick-stamped player level used by the combat ledger and run summary.

PlaytestEntry

One pickable definition: its id (what the command takes) and its display name.

WaveResultDisplay

Presentation snapshot of a completed wave; changing it does not change the run.

Interfaces

ICharacterVisual

Animation hooks for a character or enemy body. The default is a sprite with simple tweens; adapters for character kits (e.g. layered sprite rigs) implement this on their own prefab.

ICustomEventView

Shows one game-defined event (CustomId). Register it with RegisterCustomEvent(string, ICustomEventView). Called once per event during the fixed tick, after the built-in visuals. Read the world; never change it. Sounds for custom ids come from CustomEvents, simple effects from CustomEvents.

IGameSession

Game-loop state the UI and views can read.

IOptionsApplicator

Turns the player's option choices into engine settings (audio, window, frame rate, background play).

IPlayerInput

Player input for one tick. Replace to use another input source (AI, replay, network).

ISceneBootstrapExtension

Put a component with this interface next to SurvivorsSceneBootstrap to customise the game without replacing the bootstrap: register custom behaviours, effect or trigger handlers and modules on the run systems, custom event views on the world view, a text provider, extra wave views.

ITextProvider

Text by key and language, for UI strings (UiText keys) and content names and descriptions ("<key>.name" / "<key>.description", key from ContentTextTable). Return null for anything the provider does not translate: the UI then uses the authored text (the UI string table, the assets' DisplayName and Description, finally the id). Plug a localization system in with TextProvider; LocalizedTextAsset is a ready-made table.

ITintableVisual

Optional for ICharacterVisual adapters: a colour wash the world view drives for statuses, invulnerability and boss flashes. Amount 0 = untouched, 1 = fully the overlay colour (alpha is kept).

IUiLanguageProvider

Supplies the languages the settings screen offers and the text lookup for each. Plug a localization system in through Languages; the resolver is installed as Resolve and keys it does not know fall back to the string table.

IWaveView

Something that shows the running wave. The game loop calls it in this order: WaveStarted once, then per fixed tick Tick (after the simulation step, with that tick's events), Render every frame, and WaveEnded once.

Enums

CustomEffectStyle

How a CustomEventEffect looks.

DamageChannel

How damage reached an enemy.

GainSource

Where an item or weapon came from.

MusicContext

Music context. Each maps to one track in the sound catalog.

ProceduralShape

Built-in fallback shapes, drawn once at runtime and shared. Every shape is white so renderers tint it.

SoundBus

Which optional mixer group a cue plays through.

TakenChannel

How damage reached the player.

UiButtonKind

Semantic button colour role: primary action, secondary action or destructive action.

UiColorRole

Semantic colour role resolved from the active UI theme.

UiFontRole

Semantic text-size role resolved from the active UI theme.

UiScreen

Screen category instantiated by the default UI prefab factory.

UiSpriteRole

Semantic sprite role resolved from the active UI theme.

WorldViewKind

Entity category used to resolve and pool a world visual.