zscript-doc/api/inter/StatusScreen.md

427 lines
7.8 KiB
Markdown

# StatusScreen
The base class for intermission status screens. Any status screen used by
`MAPINFO`/GameInfo must be derived from this class.
Status screens have four stages:
- `STATCOUNT`, where the stats are counted and displayed.
- `SHOWNEXTLOC`, where the next map is shown as "ENTERING (map name)" and in episodic maps, the world map.
- `NOSTATE`, at the very end of this process, where the last frame is drawn and the intermission is exited.
- `LEAVINGINTERMISSION`, which is used only to signify that all stages are done and the status screen has been exited.
These are provided as constants in `StatusScreen`. The starting stage is `STATCOUNT`.
```
class StatusScreen : Object abstract play
{
const NG_STATSY;
const SHOWNEXTLOCDELAY;
const SP_STATSX;
const SP_STATSY;
const SP_TIMEX;
const SP_TIMEY;
const TITLEY;
InterBackground BG;
WBPlayerStruct Plrs[MAXPLAYERS];
WBStartStruct Wbs;
int AccelerateStage;
int BCnt;
int Cnt;
int Cnt_Deaths[MAXPLAYERS];
int Cnt_Frags[MAXPLAYERS];
int Cnt_Items[MAXPLAYERS];
int Cnt_Kills[MAXPLAYERS];
int Cnt_Par;
int Cnt_Pause;
int Cnt_Secret[MAXPLAYERS];
int Cnt_Time;
int Cnt_Total_Time;
int CurState;
int DoFrags;
int Me;
int NG_State;
bool NoAutoStartMap;
bool PlayerReady[MAXPLAYERS];
int Player_Deaths[MAXPLAYERS];
bool Snl_PointerOn;
int SP_State;
float ShadowAlpha;
int Total_Deaths;
int Total_Frags;
PatchInfo Entering;
PatchInfo Finished;
PatchInfo MapName;
textureid Items;
textureid Kills;
textureid P_Secret;
textureid Par;
textureid Secret;
textureid Sucks;
textureid Timepic;
string LNameTexts[2];
int DrawCharPatch(Font fnt, int charcode, int x, int y, int translation = Font.CR_UNTRANSLATED, bool nomove = false);
void DrawEL();
int DrawLF();
int DrawName(int y, textureid tex, string levelname);
int DrawNum(Font fnt, int x, int y, int n, int digits, bool leadingzeros = true, int translation = Font.CR_UNTRANSLATED);
int DrawPatchText(int y, PatchInfo pinfo, string stringname);
void DrawPercent(Font fnt, int x, int y, int p, int b, bool show_total = true, int color = Font.CR_UNTRANSLATED);
void DrawTime(int x, int y, int t, bool no_sucks = false);
bool AutoSkip();
virtual void Drawer();
virtual void End();
virtual void Start(WBStartStruct wbs_);
virtual void StartMusic();
virtual void Ticker();
protected virtual void DrawNoState();
protected virtual void DrawShowNextLoc();
protected virtual void DrawStats();
protected virtual void InitNoState();
protected virtual void InitShowNextLoc();
protected virtual void InitStats();
protected virtual void UpdateNoState();
protected virtual void UpdateShowNextLoc();
protected virtual void UpdateStats();
protected void CheckForAccelerate();
protected int FragSum(int playernum);
static int, int, int GetPlayerWidths();
static color GetRowColor(PlayerInfo player, bool highlight);
static void GetSortedPlayers(in out array<int> sorted, bool teamplay);
static void PlaySound(sound snd);
}
```
- `NG_STATSY`
TODO
- `SHOWNEXTLOCDELAY`
TODO
- `SP_STATSX`
TODO
- `SP_STATSY`
TODO
- `SP_TIMEX`
TODO
- `SP_TIMEY`
TODO
- `TITLEY`
The Y position (in 320x200 pixels) to draw the top of the "finished" and
"entering" texts. Used by `DrawEL` and `DrawLF`.
- `BG`
The `InterBackground` object for this intermission, set by `Start` with the
initial `Wbs` object.
- `Plrs`
The value of `Wbs.Plyr` when `Start` was called. Usually not changed, so
essentially equivalent to `Wbs.Plyr`.
- `Wbs`
The `WBStartStruct` passed to this class via the `Start` function.
- `AccelerateStage`
Used to signify to the current stage that it should go quicker or be skipped
entirely.
- `BCnt`
TODO
- `Cnt`
TODO
- `Cnt_Deaths`
TODO
- `Cnt_Frags`
TODO
- `Cnt_Items`
TODO
- `Cnt_Kills`
TODO
- `Cnt_Par`
TODO
- `Cnt_Pause`
TODO
- `Cnt_Secret`
TODO
- `Cnt_Time`
TODO
- `Cnt_Total_Time`
TODO
- `CurState`
The current stage the intermission is in.
- `DoFrags`
TODO
- `Me`
The value of `Wbs.PNum` when `Start` was called. Usually not changed, so
essentially equivalent to `Wbs.PNum`.
- `NG_State`
TODO
- `NoAutoStartMap`
TODO
- `PlayerReady`
Used in networked games to signify when each player is ready to continue to
the next map. Set by `CheckForAccelerate`.
- `Player_Deaths`
TODO
- `Snl_PointerOn`
TODO
- `SP_State`
Used in single-player status screens during the `STATCOUNT` stage for
indicating the current round of statistics to count up.
- `ShadowAlpha`
TODO
- `Total_Deaths`
TODO
- `Total_Frags`
TODO
- `Entering`
TODO
- `Finished`
TODO
- `MapName`
TODO
- `Items`
The "ITEMS" (default `WIOSTI`) graphic.
- `Kills`
The "KILLS" (default `WIOSTK`) graphic.
- `P_Secret`
The "SECRET" (default `WISCRT2`) graphic.
- `Par`
The "PAR" (default `WIPAR`) graphic.
- `Secret`
The "SCRT" (default `WIOSTS`) graphic.
- `Sucks`
The "SUCKS" (default `WISUCKS`) graphic.
- `Timepic`
The "TIME" (default `WITIME`) graphic.
- `LNameTexts`
TODO
- `DrawCharPatch`
TODO
- `DrawEL`
TODO
- `DrawLF`
TODO
- `DrawName`
TODO
- `DrawNum`
TODO
- `DrawPatchText`
TODO
- `DrawPercent`
TODO
- `DrawTime`
TODO
- `AutoSkip`
TODO
- `Drawer`
Called by `WI_Drawer`, which is called every frame when `GameState` is
`GS_INTERMISSION`.
- `End`
Called when the intermission should end. Default behaviour is to set
`CurState` to `LEAVINGINTERMISSION` and remove bots in death-match.
Generally, `Level.WorldDone` should be called directly after this.
- `Start`
Called by `WI_Start` after the `WBStartStruct` is populated, sounds are
stopped and the screen blend is set to black. Sets up initial values and
runs `InitStats`.
- `StartMusic`
Called in the first tick by `Ticker` to set the intermission music.
- `Ticker`
Called by `WI_Ticker`, which is called every game tick when `GameState` is
`GS_INTERMISSION`.
- `DrawNoState`
Called by `Drawer` when `CurState` is `NOSTATE` or any other non-state.
- `DrawShowNextLoc`
Called by `Drawer` when `CurState` is `SHOWNEXTLOC` and, by default,
`DrawNoState` after setting `Snl_PointerOn` to `true`.
- `DrawStats`
Called by `Drawer` directly after drawing the animated background when
`CurState` is `STATCOUNT`.
- `InitNoState`
Called by `UpdateShowNextLoc` to initiate the `NOSTATE` stage.
- `InitShowNextLoc`
Called by `UpdateStats` to initiate the `SHOWNEXTLOC` stage.
- `InitStats`
Called by `Start` to initiate the `STATCOUNT` stage.
- `UpdateNoState`
Called by `Ticker` when `CurState` is `NOSTATE` or any other non-state.
Exits the intermission by calling `End` and `Level.WorldDone` when
appropriate.
- `UpdateShowNextLoc`
Called by `Ticker` when `CurState` is `SHOWNEXTLOC`. Runs `InitNoState` when
appropriate and alternates `Snl_PointerOn`.
- `UpdateStats`
Called by `Ticker` when `CurState` is `STATCOUNT`. Runs `InitShowNextLoc`
when appropriate.
- `CheckForAccelerate`
Updates the values of `AccelerateStage` and `PlayerReady` according to each
player's inputs.
- `FragSum`
Returns the number of frags player `playernum` has accumulated against all
currently in-game players. This is different from `WBPlayerStruct.FragCount`
because it is counted dynamically, i.e. if a player leaves the count will be
changed. This is only useful for game modes where frags do not count as
score.
- `GetPlayerWidths`
TODO
- `GetRowColor`
TODO
- `GetSortedPlayers`
TODO
- `PlaySound`
Plays a UI sound at full volume using `S_Sound`.
<!-- EOF -->