mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-27 20:20:40 +00:00
- ported the BaseStatusBar class to ZScript.
Not hooked up yet, but it compiles.
This commit is contained in:
parent
cb2bc7967a
commit
acb4830eb5
5 changed files with 182 additions and 6 deletions
|
@ -85,7 +85,7 @@ struct FLevelStats
|
||||||
|
|
||||||
//============================================================================
|
//============================================================================
|
||||||
//
|
//
|
||||||
// encapsulates all settings a HUD font may need
|
//
|
||||||
//
|
//
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
|
|
|
@ -379,5 +379,3 @@ void drawMapTitle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ episode LEV0
|
||||||
|
|
||||||
cluster 1
|
cluster 1
|
||||||
{
|
{
|
||||||
name = "Exhumed"
|
|
||||||
gameover
|
gameover
|
||||||
{
|
{
|
||||||
function = ExhumedCutscenes.BuildGameoverScene
|
function = ExhumedCutscenes.BuildGameoverScene
|
||||||
|
@ -22,12 +21,10 @@ cluster 1
|
||||||
|
|
||||||
cluster 2
|
cluster 2
|
||||||
{
|
{
|
||||||
name = "$TXT_EX_MAP00"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster 3
|
cluster 3
|
||||||
{
|
{
|
||||||
name = "Multiplayer"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster 4
|
cluster 4
|
||||||
|
|
|
@ -29,6 +29,7 @@ version "4.3"
|
||||||
#include "zscript/constants.zs"
|
#include "zscript/constants.zs"
|
||||||
#include "zscript/razebase.zs"
|
#include "zscript/razebase.zs"
|
||||||
#include "zscript/screenjob.zs"
|
#include "zscript/screenjob.zs"
|
||||||
|
#include "zscript/statusbar.zs"
|
||||||
#include "zscript/games/duke/dukegame.zs"
|
#include "zscript/games/duke/dukegame.zs"
|
||||||
#include "zscript/games/duke/ui/screens.zs"
|
#include "zscript/games/duke/ui/screens.zs"
|
||||||
#include "zscript/games/duke/ui/cutscenes.zs"
|
#include "zscript/games/duke/ui/cutscenes.zs"
|
||||||
|
|
180
wadsrc/static/zscript/statusbar.zs
Normal file
180
wadsrc/static/zscript/statusbar.zs
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
|
||||||
|
|
||||||
|
struct StatsPrintInfo
|
||||||
|
{
|
||||||
|
int screenbottomspace;
|
||||||
|
int spacing; // uses fontheight if 0 or less.
|
||||||
|
String letterColor, standardColor, completeColor;
|
||||||
|
double fontscale;
|
||||||
|
Font statfont;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
class RazeStatusBar : StatusBarCore
|
||||||
|
{
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
SetSize(0, 320, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Tick() {}
|
||||||
|
virtual void UpdateStatusBar(SummaryInfo info) {}
|
||||||
|
|
||||||
|
void drawStatText(Font statFont, int x, int y, String text, double scale)
|
||||||
|
{
|
||||||
|
Screen.DrawText(statfont, Font.CR_UNTRANSLATED, x + scale, y + scale, text, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_KeepRatio, true, DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_LegacyRenderStyle, STYLE_TranslucentStencil, DTA_Color, 0);
|
||||||
|
Screen.DrawText(statfont, Font.CR_UNTRANSLATED, x, y, text, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_KeepRatio, true, DTA_ScaleX, scale, DTA_ScaleY, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// Prints the current level statistics
|
||||||
|
// hud_statscale is the desired display scale for the stat display
|
||||||
|
// hud_scalefactor is the desired display scale for the actual status bar / HUD
|
||||||
|
//
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
void PrintLevelStats(StatsPrintInfo info, SummaryInfo stats)
|
||||||
|
{
|
||||||
|
|
||||||
|
double y;
|
||||||
|
double scale = info.fontscale * hud_statscale;
|
||||||
|
if (info.spacing <= 0) info.spacing = info.statfont.GetHeight() * info.fontscale;
|
||||||
|
double spacing = info.spacing * hud_statscale;
|
||||||
|
if (info.screenbottomspace < 0)
|
||||||
|
{
|
||||||
|
y = 200 - (RelTop - info.screenbottomspace) * hud_scalefactor - spacing;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
y = 200 - info.screenbottomspace * hud_scalefactor - spacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
double y1, y2, y3;
|
||||||
|
|
||||||
|
if (stats.maxsecrets > 0) // don't bother if there are no secrets.
|
||||||
|
{
|
||||||
|
y1 = y;
|
||||||
|
y -= spacing;
|
||||||
|
}
|
||||||
|
if (stats.maxkills != -1)
|
||||||
|
{
|
||||||
|
y2 = y;
|
||||||
|
y -= spacing;
|
||||||
|
}
|
||||||
|
y3 = y;
|
||||||
|
|
||||||
|
String text;
|
||||||
|
|
||||||
|
text = String.Format("%sT: %s%d:%02d", info.letterColor, info.standardColor, stats.time / 60000, (stats.time % 60000) / 1000);
|
||||||
|
drawStatText(info.statFont, 2 * hud_statscale, y3, text, scale);
|
||||||
|
|
||||||
|
if (stats.maxkills != -1)
|
||||||
|
{
|
||||||
|
if (stats.maxkills == -3) text.Format("%sF: %s%d", info.letterColor, info.standardColor, stats.kills);
|
||||||
|
else if (stats.maxkills == -2) text.Format("%sK: %s%d", info.letterColor, info.standardColor, stats.kills);
|
||||||
|
else text.Format("%sK: %s%d/%d", info.letterColor,
|
||||||
|
stats.kills == stats.maxkills ? info.completeColor : info.standardColor, stats.kills, stats.maxkills);
|
||||||
|
|
||||||
|
drawStatText(info.statFont, 2 * hud_statscale, y2, text, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stats.maxsecrets > 0) // don't bother if there are no secrets.
|
||||||
|
{
|
||||||
|
text.Format("%sS: %s%d/%d", info.letterColor, stats.secrets >= stats.maxsecrets ? info.completeColor : info.standardColor, stats.secrets, stats.maxsecrets);
|
||||||
|
if (stats.supersecrets > 0) text.AppendFormat("+%d", stats.supersecrets);
|
||||||
|
|
||||||
|
drawStatText(info.statFont, 2 * hud_statscale, y1, text, scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
// Prints the automap label
|
||||||
|
// hud_statscale is the desired display scale for the stat display
|
||||||
|
// hud_scalefactor is the desired display scale for the actual status bar / HUD
|
||||||
|
//
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
void PrintAutomapInfo(StatsPrintInfo info, bool forcetextfont = false)
|
||||||
|
{
|
||||||
|
let TEXTCOLOR_ESCAPESTR= "\034";
|
||||||
|
let lev = currentLevel;
|
||||||
|
String mapname;
|
||||||
|
if (am_showlabel)
|
||||||
|
mapname.Format("%s%s: %s%s", info.letterColor, lev.GetLabelName(), info.standardColor, lev.DisplayName());
|
||||||
|
else
|
||||||
|
mapname.Format("%s%s", info.standardColor, lev.DisplayName());
|
||||||
|
|
||||||
|
forcetextfont |= am_textfont;
|
||||||
|
double y;
|
||||||
|
double scale = info.fontScale * (forcetextfont ? hud_statscale : 1); // the tiny default font used by all games here cannot be scaled for readability purposes.
|
||||||
|
if (info.spacing <= 0) info.spacing = info.statfont.GetHeight() * info.fontScale;
|
||||||
|
double spacing = info.spacing * (forcetextfont ? hud_statscale : 1);
|
||||||
|
if (am_nameontop)
|
||||||
|
{
|
||||||
|
y = spacing + 1;
|
||||||
|
}
|
||||||
|
else if (info.screenbottomspace < 0)
|
||||||
|
{
|
||||||
|
y = 200 - RelTop - spacing;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
y = 200 - info.screenbottomspace - spacing;
|
||||||
|
}
|
||||||
|
let cluster = lev.GetCluster();
|
||||||
|
String volname;
|
||||||
|
if (cluster) volname = cluster.name;
|
||||||
|
if (volname.length() == 0 && am_nameontop) y = 1;
|
||||||
|
|
||||||
|
Screen.DrawText(info.statfont, Font.CR_UNTRANSLATED, 2 * hud_statscale, y, mapname, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true);
|
||||||
|
y -= spacing;
|
||||||
|
if (volname.length() > 0)
|
||||||
|
Screen.DrawText(info.statfont, Font.CR_UNTRANSLATED, 2 * hud_statscale, y, volname, DTA_FullscreenScale, FSMode_ScaleToHeight, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200,
|
||||||
|
DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
int CalcMagazineAmount(int ammo_remaining, int clip_capacity, bool reloading)
|
||||||
|
{
|
||||||
|
// Determine amount in clip.
|
||||||
|
int clip_amount = ammo_remaining % clip_capacity;
|
||||||
|
|
||||||
|
// Set current clip value to clip capacity if wrapped around to zero, otherwise use determined value.
|
||||||
|
int clip_current = ammo_remaining != 0 && clip_amount == 0 ? clip_capacity : clip_amount;
|
||||||
|
|
||||||
|
// Return current clip value if weapon has rounds or is not on a reload cycle.
|
||||||
|
return ammo_remaining == 0 || (reloading && clip_amount == 0) ? 0 : clip_current;
|
||||||
|
}
|
||||||
|
|
||||||
|
//============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//============================================================================
|
||||||
|
|
||||||
|
void Set43ClipRect()
|
||||||
|
{
|
||||||
|
let screenratio = screen.GetAspectRatio();
|
||||||
|
if (screenratio < 1.34) return;
|
||||||
|
|
||||||
|
int width = int(screen.GetWidth() * 1.333 / screenratio);
|
||||||
|
int left = (screen.GetWidth() - width) / 2;
|
||||||
|
screen.SetClipRect(left, 0, width, screen.GetHeight());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue