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
CustomIdmatches 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.
- 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.
- 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.onClicklisteners.
- 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.