Namespace SurvivorsMaker.Editor

Classes

AnalysisJobDriver<T>

Advances an IAnalysisJob<TResult> from EditorApplication.update in time slices so the editor stays responsive. Cancel asks the job to stop; the partial result is delivered with cancelled = true.

AnalysisTaskJob<T>

Polls a synchronous headless API off the editor thread. Inputs must already be copied. Cancel discards its result; a synchronous call already in flight finishes in the background. A predecessor serializes rapid edits to keep obsolete requests out of the worker pool.

BalanceReportExport

A single rectangular CSV, including partial-report status and individual observations.

BalanceWindow
BehaviourIdField

Behaviour id picker: "Default (from Kind)", the built-in ids, or a free custom id with a warning, since custom ids are registered from code at runtime. Writes the string property at path.

BehaviourIds

Built-in behaviour ids per registry, read from CreateDefault().

BehaviourParameterDrawer

One named value a custom behaviour reads: key, number and optional text on one row.

BossPhaseBar

Health bar from 0 % (left) to 100 % (right) split into the health ranges of each boss phase.

BuildLabChoices

Id choices for the Build Lab pickers (ids and their labels, same order).

BuildLabModel

Build Lab data helpers: copies, repeated-item counts, stat diffs and contribution groups.

BuildLabPanel

One side of the Build Lab: edits a BuildSpec and shows its report and trial.

BuildLabPresets

Saved Build Lab builds (character, weapons, items, level), e.g. as regression checks after balance edits. Editor-only: it lives in the editor assembly because only the maker tools read it; games never need it.

BuildLabWindow

Build Lab: two builds (character, weapons with tiers, repeatable items, level) side by side. Evaluate shows final stats, per-weapon DPS, where each stat comes from and active synergies; Trial plays wave N R times with the fixed build. Builds can be saved to a BuildLabPresets asset.

CharacterAssetEditor
ChartSeries

One line of a MakerLineChart.

ContentBrowserActions

Undoable content references and catalog changes. Disk deletion is a separate explicit UI action.

ContentBrowserIssue
ContentBrowserModel

Stable authoring order, reference traversal and validation without running gameplay.

ContentBrowserNode
ContentBrowserWindow
ContentCatalogChecks

Checks of the look and sound catalogs a game uses. Findings are warnings: the game still runs, drawing the fallback look or staying silent. Long lists are folded into one issue per kind of problem.

ContentTableBaseline

Cell values captured when the table was loaded; cells that differ now are highlighted.

ContentTableChange

One cell an import would change.

ContentTableColumn

A Content Table column: a serialized property path of the asset (also the CSV header).

ContentTableCsv

CSV for the Content Table, made to round-trip through spreadsheets: header = field keys (titles are also accepted on import), invariant numbers, RFC 4180 quoting, CRLF rows. Import matches rows by Id and previews the changes; nothing is written until Apply(ContentTableImport).

ContentTableImport

What a CSV import would do: changes to apply and problems (unknown ids, bad values, duplicates).

ContentTableModel

Reads and writes content asset fields as text for the Content Table and its CSV import/export. Writes go through SerializedObject so every edit is undoable; multi-row edits are one Undo step.

ContentTableWindow

Content Table: weapons, items/upgrades and enemies as a spreadsheet. Edit cells inline (one Undo step per edit; with several rows selected, an edit applies to all of them), sort by any column, filter, see changed cells, and round-trip CSV (import matches by Id and previews the changes first).

ContentTemplates
ContentTextSection

DisplayName / Description / TextKey of a content asset, with the text the game will show: the chosen translation table's "<key>.name" and "<key>.description" per language, else the authored text, else the id.

CounterTransferRuleDrawer
CustomEventEffectDrawer

Built-in effect for a game-defined event id, with a one-line summary.

CustomEventSoundDrawer

Sound for a game-defined event id: event id and a cue picked from the catalog's cue keys.

EditorAssetContext

Direct catalog/content wins, then the selected catalog/content, then containing contents. Multiple distinct containing catalogs are ambiguous. With no containing content, only a single project catalog is used. Searches are path-sorted; no arbitrary first-match fallback.

EditorStatContext
EffectEntryDrawer

Shows only the fields the selected method reads. Evaluated methods (Link, Convert, Limit) reveal their source, transform and limit fields; every entry shows lifetime and inline validation from EffectEntry.Validate().

EffectPreview
EliteAssetEditor
EliteDefDrawer
EliteLayout

Shared elite layout for EliteDef properties and elite assets that use the same field names.

EliteModifierDrawer
EnemyAssetEditor
EnemyBossSection

Boss toggle, phase cards with health thresholds, and status immunities for enemy assets.

FeaturePreview

One-line, engine-free summaries of combat definitions (statuses, hit effects, elites, triggers, unlocks).

GameSceneOptions

What Create(GameSceneOptions) builds.

GameSceneResult
GameSceneWizard

Creates a playable scene: a "Game" object with SurvivorsSceneBootstrap, SurvivorsGame, GameProfile and input; an orthographic camera; an EventSystem; and a floor sized to the first arena. The world view and UI are created by the bootstrap when the game starts.

GameSettingsAssetEditor

Game settings grouped by system. Fixed-product guarantees are authored with asset references here; run.Pools.Guarantees is their converted result and is not shown.

HitEffectDefDrawer
HordeArenaView

Draws one WaveFrame: arena, enemy dots per definition color, elites/bosses, player, optional density map.

HordePlaybackModel

Reads WavePlayback frames: counts, flags, frame lookup by time and density grids.

HordePreviewWindow

Horde Preview: plays one wave headless and scrubs the recorded frames. Enemy dots are colored per definition, elites ringed, bosses outlined; a density map shows where the crowd gathers.

ItemAssetEditor
LocalizedTextAssetEditor

Translation table: one row per key, one column per language. An empty cell means "not translated" (the entry is removed, so the authored text shows). Keys added here without any translation are kept only while the inspector is open.

MakerAnalysisProvider

Finds the IMakerAnalysis the maker tool windows use. Order: Override (tests, custom pipelines), a registered factory, then the default implementation found by type name (DefaultTypeNames), then any public non-abstract implementation inside the Balance assembly. Lookup by name keeps the windows compiling while the implementation is still being built; when nothing is found the windows show "analysis not available" instead of failing.

MakerAssetEditor
MakerChartPalette

Chart colors tuned for both editor skins (darker, saturated variants on the light skin).

MakerChartScale

Axis math shared by the charts: "nice" maxima and tick steps (1, 2, 2.5, 5 × 10^n).

MakerEditorUi
MakerJobBar

Progress bar + Cancel for one IMakerJobProgress. Polls while visible.

MakerLineChart

Multi-series line chart drawn with Painter2D: left and right axes with nice ticks, an optional colored band per x slot (e.g. pacing ratio), a selected slot, a hover readout and click-to-select.

MakerMenus

Menu paths of the package's editor tools. The product name is shown here; code namespaces stay SurvivorsMaker.

MakerResultMetadata

Reads public analysis metadata and reports the fields supplied by each result.

MakerSnapshot

Converted inputs for one analysis call, taken on the editor thread.

MakerToolContext

Content and settings lookups shared by the maker tool windows.

MakerToolLinks

"Open in …" buttons for inspectors and the matching asset context menu items.

MakerToolUi

Small shared pieces of the maker tool windows (rows, notes, tables, number text, colors).

MakerToolWindow

Shared frame of the maker tool windows: header, Content and Settings pickers (defaulting to the selection or the first asset found), an "analysis not available" notice and a status line.

NewGameProjectOptions

Choices for Create(NewGameProjectOptions). Every sprite is optional: missing ones are generated shapes.

NewGameProjectResult

Everything Create(NewGameProjectOptions) made, already linked together.

NewGameProjectWizard

Creates a small complete game in one folder: stats, settings, content, a character, one weapon per kind with three tiers, items and upgrades, three enemies, an elite, a three-phase boss, an arena with five waves, a view catalog with generated placeholder shapes and a sound catalog with empty cues, then optionally the game scene. All names and numbers are generic starting values meant to be changed.

NextTierCreationSettings

How CreateNextTier(WeaponAsset, string, NextTierCreationSettings) derives the next tier.

OfferBanEntryDrawer

Wave-ranged ban rule on a character; the title summarizes what it removes.

OfferGuaranteeEntryDrawer

Fixed-product guarantee: the Item field shows unless Kind is Weapon, the Weapon field unless Kind is Item.

OfferOddsModel

Columns the Offer Odds table can sort by: Id, Kind, Tier, ExpectedFirst, or a progress column (≥ 0).

OfferOddsRow

One row of the Offer Odds table: the offer, its chances and (optionally) the baseline to compare with.

OfferOddsWindow

Offer Odds: how often each item and weapon shows up in the shop or level-up choices at each progress value (wave in arena mode, level in field mode), from many seeded draws. Sortable, heat-colored, with tier odds and an optional comparison that shows what guarantees or character bans change.

OptionalCountDrawer

"Enabled + Count" on one line; the count is only editable while enabled.

PacingChartModel

Series the Run Pacing window draws, derived from a PacingReport.

PacingThresholds

Threat ÷ power bands of the Run Pacing chart. Thresholds are window settings, not rules.

PlaceholderArt

Simple generated sprites (PNG files imported as point-filtered sprites) so a new project has distinct shapes before real art exists. Replace them by assigning other sprites in the view catalog.

RowDrawer

Small value records drawn as one row of their child fields, so long lists stay compact.

RunPacingWindow

Run Pacing: bot runs over the whole arena, summarised per wave. Threat (enemy health spawned) against player power (DPS × wave duration) with a ratio band, crowd size, survival and level, and the economy. Click a wave to edit its numbers inline (with Undo) and re-run.

ScaledDrawer
SerializedRead

Null-tolerant reads of serialized definition data by field name. Missing or mistyped fields fall back to the given default, so editor UI keeps working while authoring assets gain or rename fields.

SetAssetEditor
SoundCatalogAssetEditor

Sound catalog: event keys, cues, weapon overrides, game-defined event sounds, music and mixer routing, with catalog checks.

StatContributionGroup

Contributions of one stat, in report order.

StatEfficiencyBindingDrawer
StatPicker

Writes ids only on an explicit user choice; unknown and mixed values survive drawing.

StatScalingDrawer
StatusEffectDefDrawer
TagLimitDrawer
TagWeightDrawer
TickSecondsField

Edits an integer tick field in seconds. Storage stays in ticks: the typed seconds are rounded to whole ticks at the content's simulation rate (60 per second without a containing content).

TriggerConditionDrawer

One condition: Read only for health ratios, Stat only for stat comparisons, Maximum and bounds only for ranges.

TriggerDefDrawer

"When X, with chance C, do Y". When the owning asset turns on UseTriggerRules, a Rules section adds the event, conditions, counter, firing limits, filters and damage scaling. Inline warnings reuse the owner's Validate() issues for this entry, plus a note when rule fields are set but the toggle is off.

UiPrefabBuilder

Reproducible UI assets; no scene edits, content conversion or interactive imports.

UnlockDefDrawer

Unlock entries pick their target and character parameter by id from the containing content.

ViewCatalogAssetEditor

View catalog: entries with previews and their projectile looks, the fallback entry, and catalog checks.

ViewEntryDrawer

One view catalog entry: id, look, UI icon, and the weapon's own projectile look in a sub-foldout.

WaveEditorWindow
WaveSchedulePreview

Engine-free authoring preview. Keep schedule arithmetic aligned with SpawnSystem.

WeaponAssetEditor
WeaponKindLimitDrawer
WeaponLabModel
WeaponLabStats

Slider stat values of the Weapon Lab (stat ids from the game's stat bindings).

WeaponLabWindow

Weapon Lab: one weapon (and tier) firing over a ring of dummies. Stat sliders change the preview at once; the analysis measures DPS and the density curve (DPS by number of dummies).

WeaponPatternView

Looping illustration of a weapon's pattern over a ring of dummies: projectiles with spread and range, melee thrust or swing, orbit blades, aura pulses. Dummies flash when a shape touches them. It is a drawing from the weapon's numbers, not the simulation; DPS comes from the Weapon Lab analysis.

WeaponTierTools

Structs

BuildStatDiff

One stat row of a two-build comparison.

WeaponLabEffective

A weapon's numbers after the Weapon Lab stat sliders, for the drawing and the rough estimate.

Interfaces

IMakerJobProgress

Progress view of a running job for MakerJobBar.

Enums

BehaviourRegistryKind
BrowserContentKind
ContentTableKind
ContentTemplate

Starting points for new content: one per weapon kind and per enemy archetype. Numbers are our own generic defaults.

HordeHeatmap
OfferOddsCompare
PacingBand
PlaceholderShape