- Backend update from Raze

Mostly cleanup and better separation of game/backend concerns.
This commit is contained in:
Christoph Oelckers 2022-06-06 12:09:29 +02:00
parent b7f3cc157d
commit c62e14d2c1
30 changed files with 200 additions and 196 deletions

View file

@ -55,9 +55,6 @@ struct FLatchedValue
static TArray<FLatchedValue> LatchedValues;
bool FBaseCVar::m_DoNoSet = false;
bool FBaseCVar::m_UseCallback = false;
FBaseCVar *CVars = NULL;
int cvar_defflags;

View file

@ -216,8 +216,8 @@ private:
void (*m_Callback)(FBaseCVar &);
FBaseCVar *m_Next;
static bool m_UseCallback;
static bool m_DoNoSet;
static inline bool m_UseCallback = false;
static inline bool m_DoNoSet = false;
void *m_ExtraDataPointer;

View file

@ -255,7 +255,6 @@ public:
failed = true;
}
// The decoder needs a buffer with even height
Pic.Resize(width * height * 4);

View file

@ -1,6 +1,8 @@
#include "i_interface.h"
#include "st_start.h"
// Some global engine variables taken out of the backend code.
FStartupScreen* StartWindow;
SystemCallbacks sysCallbacks;
FString endoomName;
bool batchrun;

View file

@ -1698,4 +1698,4 @@ CCMD(fs_dir)
bool hidden = fileSystem.FindFile(fn1) != i;
Printf(PRINT_NONOTIFY, "%s%-64s %-15s (%5d) %10d %s %s\n", hidden ? TEXTCOLOR_RED : TEXTCOLOR_UNTRANSLATED, fn1, fns, fnid, length, container, hidden ? "(h)" : "");
}
}
}

View file

@ -430,4 +430,4 @@ void FGLRenderer::PresentStereo()
}
}
}
}

View file

@ -455,7 +455,7 @@ void FSkyVertexBuffer::RenderRow(FRenderState& state, EDrawType prim, int row, T
//
//-----------------------------------------------------------------------------
void FSkyVertexBuffer::RenderDome(FRenderState& state, FGameTexture* tex, int mode, bool which, PalEntry color)
void FSkyVertexBuffer::DoRenderDome(FRenderState& state, FGameTexture* tex, int mode, bool which, PalEntry color)
{
auto& primStart = which ? mPrimStartBuild : mPrimStartDoom;
if (tex && tex->isValid())
@ -510,7 +510,7 @@ void FSkyVertexBuffer::RenderDome(FRenderState& state, FGameTexture* tex, float
{
SetupMatrices(tex, x_offset, y_offset, mirror, mode, state.mModelMatrix, state.mTextureMatrix, tiled, xscale, yscale);
}
RenderDome(state, tex, mode, false, color);
DoRenderDome(state, tex, mode, false, color);
}
@ -570,5 +570,6 @@ void FSkyVertexBuffer::RenderBox(FRenderState& state, FSkyBox* tex, float x_offs
state.Draw(DT_TriangleStrip, FaceStart(4), 4);
state.EnableModelMatrix(false);
state.SetObjectColor(0xffffffff);
}

View file

@ -90,7 +90,7 @@ public:
}
void RenderRow(FRenderState& state, EDrawType prim, int row, TArray<unsigned int>& mPrimStart, bool apply = true);
void RenderDome(FRenderState& state, FGameTexture* tex, int mode, bool which, PalEntry color = 0xffffffff);
void DoRenderDome(FRenderState& state, FGameTexture* tex, int mode, bool which, PalEntry color = 0xffffffff);
void RenderDome(FRenderState& state, FGameTexture* tex, float x_offset, float y_offset, bool mirror, int mode, bool tiled, float xscale = 0, float yscale = 0, PalEntry color = 0xffffffff);
void RenderBox(FRenderState& state, FSkyBox* tex, float x_offset, bool sky2, float stretch, const FVector3& skyrotatevector, const FVector3& skyrotatevector2, PalEntry color = 0xffffffff);

View file

@ -11158,7 +11158,7 @@ ExpEmit FxLocalArrayDeclaration::Emit(VMFunctionBuilder *build)
auto zero = build->GetConstantInt(0);
auto elementSizeConst = build->GetConstantInt(static_cast<PArray *>(ValueType)->ElementSize);
int arrOffsetReg;
int arrOffsetReg = 0;
if (!isDynamicArray)
{
arrOffsetReg = build->Registers[REGT_POINTER].Get(1);

View file

@ -425,9 +425,9 @@ PNamespace *ParseOneScript(const int baselump, ZCCParseState &state)
{
FString fullPath = IncludeLocs[i].FileName.GetChars(); // get full path, format 'wad:filepath/filename'
long start = fullPath.IndexOf(":"); // find first ':'
auto start = fullPath.IndexOf(":"); // find first ':'
long end = fullPath.LastIndexOf("/"); // find last '/'
auto end = fullPath.LastIndexOf("/"); // find last '/'
if (start!=-1&&end!=-1)
{
@ -443,7 +443,7 @@ PNamespace *ParseOneScript(const int baselump, ZCCParseState &state)
while (relativePath.IndexOf("../") == 0) // go back one folder for each '..'
{
relativePath = relativePath.Mid(3);
long slash_index = resolvedPath.LastIndexOf("/");
auto slash_index = resolvedPath.LastIndexOf("/");
if (slash_index != -1) {
resolvedPath = resolvedPath.Mid(0,slash_index);
} else {

View file

@ -350,15 +350,15 @@ FStartScreen* GetGameStartScreen(int max_progress)
{
try
{
if (GameStartupInfo.Type == FStartupInfo::HexenStartup || (gameinfo.gametype == GAME_Hexen && GameStartupInfo.Type == FStartupInfo::DefaultStartup))
if (GameStartupInfo.Type == FStartupInfo::HexenStartup)
{
return CreateHexenStartScreen(max_progress);
}
else if (GameStartupInfo.Type == FStartupInfo::HereticStartup || (gameinfo.gametype == GAME_Heretic && GameStartupInfo.Type == FStartupInfo::DefaultStartup))
else if (GameStartupInfo.Type == FStartupInfo::HereticStartup)
{
return CreateHereticStartScreen(max_progress);
}
else if (GameStartupInfo.Type == FStartupInfo::StrifeStartup || (gameinfo.gametype == GAME_Strife && GameStartupInfo.Type == FStartupInfo::DefaultStartup))
else if (GameStartupInfo.Type == FStartupInfo::StrifeStartup)
{
return CreateStrifeStartScreen(max_progress);
}

View file

@ -34,7 +34,6 @@
**
*/
#include "doomtype.h"
#include "files.h"
#include "gi.h"
#include "bitmap.h"

View file

@ -198,34 +198,26 @@ void I_ResetFrameTime()
FirstFrameStartTime += (CurrentFrameStartTime - ft);
}
double I_GetInputFrac(bool const synchronised, double const ticrate)
double I_GetInputFrac(bool const synchronised)
{
if (!synchronised)
{
const double max = 1000. / ticrate;
const double now = I_msTimeF();
const double elapsedInputTicks = std::min(now - lastinputtime, max);
const double result = (now - lastinputtime) * GameTicRate * (1. / 1000.);
lastinputtime = now;
if (elapsedInputTicks < max)
if (result < 1)
{
// Calculate an amplification to apply to the result before returning,
// factoring in the game's ticrate and the value of the result.
// This rectifies a deviation of 100+ ms or more depending on the length
// of the operation to be within 1-2 ms of synchronised input
// from 60 fps to at least 1000 fps at ticrates of 30 and 40 Hz.
const double result = elapsedInputTicks * ticrate * (1. / 1000.);
return result * (1. + 0.35 * (1. - ticrate * (1. / 50.)) * (1. - result));
}
else
{
return 1;
return result * (1. + 0.35 * (1. - GameTicRate * (1. / 50.)) * (1. - result));
}
}
else
{
return 1;
}
return 1;
}
void I_ResetInputTime()

View file

@ -40,7 +40,7 @@ uint64_t I_nsTime();
void I_ResetFrameTime();
// Return a decimal fraction to scale input operations at framerate
double I_GetInputFrac(bool const synchronised, double const ticrate = GameTicRate);
double I_GetInputFrac(bool const synchronised);
// Reset the last input check to after a lengthy operation
void I_ResetInputTime();

View file

@ -335,7 +335,6 @@ int restart = 0;
bool AppActive = true;
bool playedtitlemusic;
FStartupScreen* StartWindow;
FStartScreen* StartScreen;
cycle_t FrameCycles;
@ -3098,6 +3097,17 @@ static int D_InitGame(const FIWADInfo* iwad_info, TArray<FString>& allwads, TArr
int max_progress = TexMan.GuesstimateNumTextures();
int per_shader_progress = 0;//screen->GetShaderCount()? (max_progress / 10 / screen->GetShaderCount()) : 0;
bool nostartscreen = batchrun || restart || Args->CheckParm("-join") || Args->CheckParm("-host") || Args->CheckParm("-norun");
if (GameStartupInfo.Type == FStartupInfo::DefaultStartup)
{
if (gameinfo.gametype == GAME_Hexen)
GameStartupInfo.Type = FStartupInfo::HexenStartup;
else if (gameinfo.gametype == GAME_Heretic)
GameStartupInfo.Type = FStartupInfo::HereticStartup;
else if (gameinfo.gametype == GAME_Strife)
GameStartupInfo.Type = FStartupInfo::StrifeStartup;
}
StartScreen = nostartscreen? nullptr : GetGameStartScreen(per_shader_progress > 0 ? max_progress * 10 / 9 : max_progress + 3);
GameConfig->DoKeySetup(gameinfo.ConfigName);

View file

@ -220,13 +220,17 @@ struct System native
native static bool SoundEnabled();
native static bool MusicEnabled();
native static double GetTimeFrac();
static bool specialKeyEvent(InputEvent ev)
{
if (ev.type == InputEvent.Type_KeyDown || ev.type == InputEvent.Type_KeyUp)
{
int key = ev.KeyScan;
if (key == InputEvent.KEY_VOLUMEDOWN || key == InputEvent.KEY_VOLUMEUP || (key > InputEvent.KEY_LASTJOYBUTTON && key < InputEvent.KEY_PAD_LTHUMB_RIGHT)) return true;
let binding = Bindings.GetBinding(key);
bool volumekeys = key == InputEvent.KEY_VOLUMEDOWN || key == InputEvent.KEY_VOLUMEUP;
bool gamepadkeys = key > InputEvent.KEY_LASTJOYBUTTON && key < InputEvent.KEY_PAD_LTHUMB_RIGHT;
bool altkeys = key == InputEvent.KEY_LALT || key == InputEvent.KEY_RALT;
if (volumekeys || gamepadkeys || altkeys || binding ~== "screenshot") return true;
}
return false;
}

View file

@ -73,20 +73,20 @@ class ColorpickerMenu : OptionMenu
int mStartItem;
CVar mCVar;
double GetColor(int index)
{
double v = index == 0? mRed : index == 1? mGreen : mBlue;
return v;
}
void SetColor(int index, double val)
{
if (index == 0) mRed = val;
else if (index == 1) mGreen = val;
else mBlue = val;
}
//=============================================================================
//
//
@ -119,7 +119,7 @@ class ColorpickerMenu : OptionMenu
mDesc.mIndent = 0;
mDesc.CalcIndent();
}
//=============================================================================
//
//
@ -273,7 +273,7 @@ class ColorpickerMenu : OptionMenu
if (h > fh) h = fh;
else if (h < 4) return; // no space to draw it.
int indent = (screen.GetWidth() / 2);
int p = 0;
@ -328,7 +328,7 @@ class ColorpickerMenu : OptionMenu
y += 49*CleanYfac_1;
screen.DrawText (SmallFont, Font.CR_GRAY, x+(48-SmallFont.StringWidth("---->")/2)*CleanXfac_1, y, "---->", DTA_CleanNoMove_1, true);
}
override void OnDestroy()
{
if (mStartItem >= 0)

View file

@ -47,20 +47,20 @@ class ImageScrollerDescriptor : MenuDescriptor native
class ImageScrollerPage : MenuItemBase
{
int virtWidth, virtHeight;
protected void DrawText(Font fnt, int color, double x, double y, String text)
{
screen.DrawText(fnt, color, x, y, text, DTA_VirtualWidth, virtWidth, DTA_VirtualHeight, virtHeight, DTA_FullscreenScale, FSMode_ScaleToFit43);
}
protected void DrawTexture(TextureID tex, double x, double y)
{
screen.DrawTexture(tex, true, x, y, DTA_VirtualWidth, virtWidth, DTA_VirtualHeight, virtHeight, DTA_FullscreenScale, FSMode_ScaleToFit43);
}
virtual void OnStartPage()
{}
virtual void OnEndPage()
{}
}
@ -74,13 +74,13 @@ class ImageScrollerPage : MenuItemBase
class ImageScrollerPageImageItem : ImageScrollerPage
{
TextureID mTexture;
void Init(ImageScrollerDescriptor desc, String patch)
{
Super.Init();
mTexture = TexMan.CheckForTexture(patch);
}
override void Drawer(bool selected)
{
Screen.DrawTexture(mTexture, true, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43, DTA_LegacyRenderStyle, STYLE_Normal);
@ -100,7 +100,7 @@ class ImageScrollerPageTextItem : ImageScrollerPage
TextureID mTexture;
Color mBrightness;
double mTextScale;
void Init(ImageScrollerDescriptor desc, String txt, int y = -1)
{
Super.Init();
@ -110,16 +110,16 @@ class ImageScrollerPageTextItem : ImageScrollerPage
mTextScale = desc.textScale;
virtWidth = desc.virtWidth;
virtHeight = desc.virtHeight;
mText = mFont.BreakLines(Stringtable.Localize(txt.Filter()), int(virtWidth / mTextScale));
mYpos = y >= 0? y : virtHeight / 2 - mText.Count() * mFont.GetHeight() * mTextScale / 2;
}
override void Drawer(bool selected)
{
Screen.DrawTexture(mTexture, true, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43, DTA_LegacyRenderStyle, STYLE_Normal, DTA_Color, mBrightness);
let fontheight = mFont.GetHeight() * mTextScale;
let y = mYpos;
let c = mText.Count();
@ -180,7 +180,7 @@ class ImageScrollerMenu : Menu
//
//
//=============================================================================
override bool MenuEvent(int mkey, bool fromcontroller)
{
if (mDesc.mItems.Size() <= 1)
@ -228,7 +228,7 @@ class ImageScrollerMenu : Menu
//
//
//=============================================================================
override bool MouseEvent(int type, int x, int y)
{
// Todo: Implement some form of drag event to switch between pages.
@ -244,7 +244,7 @@ class ImageScrollerMenu : Menu
//
//
//=============================================================================
private bool DrawTransition()
{
double now = MSTime() * (120. / 1000.);
@ -270,7 +270,7 @@ class ImageScrollerMenu : Menu
//
//
//=============================================================================
override void Drawer()
{
if (previous != null)

View file

@ -41,7 +41,7 @@
class OptionMenuSliderJoySensitivity : OptionMenuSliderBase
{
JoystickConfig mJoy;
OptionMenuSliderJoySensitivity Init(String label, double min, double max, double step, int showval, JoystickConfig joy)
{
Super.Init(label, min, max, step, showval);
@ -71,7 +71,7 @@ class OptionMenuSliderJoyScale : OptionMenuSliderBase
int mAxis;
int mNeg;
JoystickConfig mJoy;
OptionMenuSliderJoyScale Init(String label, int axis, double min, double max, double step, int showval, JoystickConfig joy)
{
Super.Init(label, min, max, step, showval);
@ -138,7 +138,7 @@ class OptionMenuItemJoyMap : OptionMenuItemOptionBase
{
int mAxis;
JoystickConfig mJoy;
OptionMenuItemJoyMap Init(String label, int axis, Name values, int center, JoystickConfig joy)
{
Super.Init(label, 'none', values, null, center);
@ -191,7 +191,7 @@ class OptionMenuItemInverter : OptionMenuItemOptionBase
{
int mAxis;
JoystickConfig mJoy;
OptionMenuItemInverter Init(String label, int axis, int center, JoystickConfig joy)
{
Super.Init(label, "none", "YesNo", NULL, center);
@ -223,7 +223,7 @@ class OptionMenuItemInverter : OptionMenuItemOptionBase
class OptionMenuItemJoyConfigMenu : OptionMenuItemSubmenu
{
JoystickConfig mJoy;
OptionMenuItemJoyConfigMenu Init(String label, JoystickConfig joy)
{
Super.Init(label, "JoystickConfigMenu");
@ -243,7 +243,7 @@ class OptionMenuItemJoyConfigMenu : OptionMenuItemSubmenu
if (res && joymenu != null) joymenu.mJoy = mJoy;
return res;
}
static void SetController(OptionMenuDescriptor opt, JoystickConfig joy)
{
OptionMenuItem it;
@ -296,7 +296,7 @@ class OptionMenuItemJoyConfigMenu : OptionMenuItemSubmenu
opt.mPosition = -25;
opt.CalcIndent();
}
}
//=============================================================================

View file

@ -120,7 +120,7 @@ class ListMenu : Menu
mDesc.mItems[i].OnMenuCreated();
}
}
//=============================================================================
//
//
@ -136,7 +136,7 @@ class ListMenu : Menu
}
return NULL;
}
//=============================================================================
//
@ -243,7 +243,7 @@ class ListMenu : Menu
int h = mDesc.DisplayHeight();
double fx, fy, fw, fh;
[fx, fy, fw, fh] = Screen.GetFullscreenRect(w, h, FSMode_ScaleToFit43);
x = int((x - fx) * w / fw);
y = int((y - fy) * h / fh);
}
@ -311,7 +311,7 @@ class ListMenu : Menu
}
Super.Drawer();
}
//=============================================================================
//
//

View file

@ -109,7 +109,7 @@ class ListMenuItemStaticPatch : ListMenuItem
mColor = desc.mFontColor;
}
override void Draw(bool selected, ListMenuDescriptor desc)
{
if (!mTexture.Exists())
@ -163,7 +163,7 @@ class ListMenuItemStaticText : ListMenuItem
mColor = color >= 0? color : desc.mFontColor;
mCentered = false;
}
void InitDirect(double x, double y, String text, Font font, int color = Font.CR_UNTRANSLATED, bool centered = false)
{
Super.Init(x, y);
@ -172,7 +172,7 @@ class ListMenuItemStaticText : ListMenuItem
mColor = color;
mCentered = centered;
}
override void Draw(bool selected, ListMenuDescriptor desc)
{
if (mText.Length() != 0)
@ -216,12 +216,12 @@ class ListMenuItemSelectable : ListMenuItem
mParam = param;
mHotkey = 0;
}
override bool CheckCoordinate(int x, int y)
{
return mEnabled > 0 && y >= mYpos && y < mYpos + mHeight; // no x check here
}
override bool Selectable()
{
return mEnabled > 0;
@ -231,13 +231,13 @@ class ListMenuItemSelectable : ListMenuItem
{
return c > 0 && c == mHotkey;
}
override bool Activate()
{
Menu.SetMenu(mAction, mParam);
return true;
}
override bool MouseEvent(int type, int x, int y)
{
if (type == Menu.MOUSE_Release)
@ -250,7 +250,7 @@ class ListMenuItemSelectable : ListMenuItem
}
return false;
}
override Name, int GetAction()
{
return mAction, mParam;
@ -279,7 +279,7 @@ class ListMenuItemTextItem : ListMenuItemSelectable
mColorSelected = desc.mFontcolor2;
mHotkey = hotkey.GetNextCodePoint(0);
}
void InitDirect(double x, double y, int height, String hotkey, String text, Font font, int color, int color2, Name child, int param = 0)
{
Super.Init(x, y, height, child, param);
@ -290,7 +290,7 @@ class ListMenuItemTextItem : ListMenuItemSelectable
int pos = 0;
mHotkey = hotkey.GetNextCodePoint(0);
}
override void Draw(bool selected, ListMenuDescriptor desc)
{
let font = menuDelegate.PickFont(mFont);
@ -313,31 +313,31 @@ class ListMenuItemTextItem : ListMenuItemSelectable
class ListMenuItemPatchItem : ListMenuItemSelectable
{
TextureID mTexture;
void Init(ListMenuDescriptor desc, TextureID patch, String hotkey, Name child, int param = 0)
{
Super.Init(desc.mXpos, desc.mYpos, desc.mLinespacing, child, param);
mHotkey = hotkey.GetNextCodePoint(0);
mTexture = patch;
}
void InitDirect(double x, double y, int height, TextureID patch, String hotkey, Name child, int param = 0)
{
Super.Init(x, y, height, child, param);
mHotkey = hotkey.GetNextCodePoint(0);
mTexture = patch;
}
override void Draw(bool selected, ListMenuDescriptor desc)
{
DrawTexture(desc, mTexture, mXpos, mYpos);
}
override int GetWidth()
{
return TexMan.GetSize(mTexture);
}
}
//=============================================================================
@ -357,7 +357,7 @@ class ListMenuItemCaptionItem : ListMenuItem
mText = text;
mFont = Font.FindFont(fnt);
}
override void Draw(bool selected, ListMenuDescriptor desc)
{
let font = menuDelegate.PickFont(desc.mFont);

View file

@ -87,7 +87,7 @@ class LoadSaveMenu : ListMenu
int listboxLeft;
int listboxTop;
int listboxWidth;
int listboxRows;
int listboxHeight;
int listboxRight;
@ -101,10 +101,10 @@ class LoadSaveMenu : ListMenu
bool mEntering;
TextEnterMenu mInput;
double FontScale;
BrokenLines BrokenSaveComment;
//=============================================================================
//
@ -119,13 +119,13 @@ class LoadSaveMenu : ListMenu
manager.ReadSaveStrings();
SetWindows();
}
private void SetWindows()
{
bool aspect43 = true;
int Width43 = screen.GetHeight() * 4 / 3;
int Left43 = (screen.GetWidth() - Width43) / 2;
double wScale = Width43 / 640.;
savepicLeft = Left43 + int(20 * wScale);
@ -135,7 +135,7 @@ class LoadSaveMenu : ListMenu
FontScale = max(screen.GetHeight() / 480, 1);
rowHeight = int(max((NewConsoleFont.GetHeight() + 1) * FontScale, 1));
listboxLeft = savepicLeft + savepicWidth + int(20*wScale);
listboxTop = savepicTop;
listboxWidth = Width43 + Left43 - listboxLeft - int(30 * wScale);
@ -151,7 +151,7 @@ class LoadSaveMenu : ListMenu
commentRows = commentHeight / rowHeight;
}
//=============================================================================
//
//
@ -202,7 +202,7 @@ class LoadSaveMenu : ListMenu
if (Selected >= manager.SavegameCount()) Selected = 0;
String text = (Selected == -1 || !manager.GetSavegame(Selected).bOldVersion)? Stringtable.Localize("$MNU_NOPICTURE") : Stringtable.Localize("$MNU_DIFFVERSION");
int textlen = NewSmallFont.StringWidth(text);
screen.DrawText (NewSmallFont, Font.CR_GOLD, (savepicLeft + savepicWidth / 2) / FontScale - textlen/2,
(savepicTop+(savepicHeight-rowHeight)/2) / FontScale, text, DTA_VirtualWidthF, screen.GetWidth() / FontScale, DTA_VirtualHeightF, screen.GetHeight() / FontScale, DTA_KeepRatio, true);
}
@ -218,7 +218,7 @@ class LoadSaveMenu : ListMenu
screen.DrawText(NewConsoleFont, Font.CR_ORANGE, commentLeft / FontScale, (commentTop + rowHeight * i) / FontScale, BrokenSaveComment.StringAt(i),
DTA_VirtualWidthF, screen.GetWidth() / FontScale, DTA_VirtualHeightF, screen.GetHeight() / FontScale, DTA_KeepRatio, true);
}
// Draw file area
DrawFrame (listboxLeft, listboxTop, listboxWidth, listboxHeight);
@ -257,7 +257,7 @@ class LoadSaveMenu : ListMenu
}
screen.SetClipRect(listboxLeft, listboxTop+rowHeight*i, listboxRight, listboxTop+rowHeight*(i+1));
if (j == Selected)
{
screen.Clear (listboxLeft, listboxTop+rowHeight*i, listboxRight, listboxTop+rowHeight*(i+1), mEntering ? Color(255,255,0,0) : Color(255,0,0,255));
@ -388,7 +388,7 @@ class LoadSaveMenu : ListMenu
return Super.MenuEvent(mkey, fromcontroller);
}
}
//=============================================================================
//
//
@ -422,8 +422,8 @@ class LoadSaveMenu : ListMenu
return Super.MouseEvent(type, x, y);
}
//=============================================================================
//
//
@ -466,13 +466,13 @@ class LoadSaveMenu : ListMenu
return Super.OnUIEvent(ev);
}
}
class SaveMenu : LoadSaveMenu
{
String mSaveName;
//=============================================================================
//
//
@ -508,7 +508,7 @@ class SaveMenu : LoadSaveMenu
//
//
//=============================================================================
override bool MenuEvent (int mkey, bool fromcontroller)
{
if (Super.MenuEvent(mkey, fromcontroller))
@ -603,7 +603,7 @@ class SaveMenu : LoadSaveMenu
mSaveName = "";
}
}
}
//=============================================================================

View file

@ -76,14 +76,14 @@ struct JoystickConfig native version("2.4")
native float GetAxisDeadZone(int axis);
native void SetAxisDeadZone(int axis, float zone);
native int GetAxisMap(int axis);
native void SetAxisMap(int axis, int gameaxis);
native String GetName();
native int GetNumAxes();
native String GetAxisName(int axis);
}
class Menu : Object native ui version("2.4")
@ -139,7 +139,7 @@ class Menu : Object native ui version("2.4")
native static void SetMouseCapture(bool on);
native void Close();
native void ActivateMenu();
//=============================================================================
//
//
@ -156,7 +156,7 @@ class Menu : Object native ui version("2.4")
AnimatedTransition = false;
Animated = false;
}
//=============================================================================
//
//
@ -230,7 +230,7 @@ class Menu : Object native ui version("2.4")
{
SetCapture(true);
}
}
else if (ev.type == UIEvent.Type_MouseMove)
{
@ -259,7 +259,7 @@ class Menu : Object native ui version("2.4")
{
return false;
}
//=============================================================================
//
//
@ -289,7 +289,7 @@ class Menu : Object native ui version("2.4")
}
}
}
//=============================================================================
//
//
@ -330,34 +330,34 @@ class Menu : Object native ui version("2.4")
{
menuDelegate.PlaySound(snd);
}
deprecated("4.0") static void DrawConText (int color, int x, int y, String str)
{
screen.DrawText (ConFont, color, x, y, str, DTA_CellX, 8 * CleanXfac, DTA_CellY, 8 * CleanYfac);
}
static Font OptionFont()
{
return NewSmallFont;
}
static int OptionHeight()
{
return OptionFont().GetHeight();
}
static int OptionWidth(String s)
{
return OptionFont().StringWidth(s);
}
static void DrawOptionText(int x, int y, int color, String text, bool grayed = false)
{
String label = Stringtable.Localize(text);
int overlay = grayed? Color(96,48,0,0) : 0;
screen.DrawText (OptionFont(), color, x, y, text, DTA_CleanNoMove_1, true, DTA_ColorOverlay, overlay);
}
}

View file

@ -7,11 +7,11 @@ class MenuDelegateBase ui
if (drawit) screen.DrawText(fnt, OptionMenuSettings.mTitleColor, (screen.GetWidth() - fnt.StringWidth(title) * CleanXfac_1) / 2, 10 * CleanYfac_1, title, DTA_CleanNoMove_1, true);
return (y + fnt.GetHeight()) * CleanYfac_1; // return is spacing in screen pixels.
}
virtual void PlaySound(Name sound)
{
}
virtual bool DrawSelector(ListMenuDescriptor desc)
{
return false;
@ -21,7 +21,7 @@ class MenuDelegateBase ui
{
// overriding this allows to execute special actions when the menu closes
}
virtual Font PickFont(Font fnt)
{
if (generic_ui || !fnt) return NewSmallFont;

View file

@ -68,7 +68,7 @@ class MessageBoxMenu : Menu
if (SmallFont && SmallFont.CanPrint(message) && SmallFont.CanPrint("$TXT_YES") && SmallFont.CanPrint("$TXT_NO")) textFont = SmallFont;
else if (OriginalSmallFont && OriginalSmallFont.CanPrint(message) && OriginalSmallFont.CanPrint("$TXT_YES") && OriginalSmallFont.CanPrint("$TXT_NO")) textFont = OriginalSmallFont;
}
if (!textFont)
{
arrowFont = textFont = NewSmallFont;
@ -97,7 +97,7 @@ class MessageBoxMenu : Menu
}
Handler = native_handler;
}
//=============================================================================
//
//
@ -140,7 +140,7 @@ class MessageBoxMenu : Menu
}
}
//=============================================================================
//
//
@ -227,7 +227,7 @@ class MessageBoxMenu : Menu
}
return Super.OnUIEvent(ev);
}
override bool OnInputEvent(InputEvent ev)
{
if (ev.type == InputEvent.Type_KeyDown)

View file

@ -65,7 +65,7 @@ class OptionMenuDescriptor : MenuDescriptor native
mIndent = 0;
mDontDim = 0;
}
//=============================================================================
//
//
@ -133,7 +133,7 @@ class OptionMenu : Menu
}
}
//=============================================================================
//
//
@ -149,7 +149,7 @@ class OptionMenu : Menu
}
return NULL;
}
//=============================================================================
//
@ -284,7 +284,7 @@ class OptionMenu : Menu
do
{
++mDesc.mSelectedItem;
if (CanScrollDown && mDesc.mSelectedItem == VisBottom)
{
mDesc.mScrollPos++;
@ -380,7 +380,7 @@ class OptionMenu : Menu
return true;
}
//=============================================================================
//
//
@ -417,7 +417,7 @@ class OptionMenu : Menu
return Super.MouseEvent(type, x, y);
}
//=============================================================================
//
//
@ -432,7 +432,7 @@ class OptionMenu : Menu
mDesc.mItems[i].Ticker();
}
}
//=============================================================================
//
//
@ -533,12 +533,12 @@ class OptionMenu : Menu
{
mFocusControl = OptionMenuItem(fc);
}
override bool CheckFocus(MenuItemBase fc)
{
return mFocusControl == fc;
}
override void ReleaseFocus()
{
mFocusControl = NULL;

View file

@ -36,7 +36,7 @@ class OptionMenuItem : MenuItemBase
{
String mLabel;
bool mCentered;
protected void Init(String label, String command, bool center = false)
{
Super.Init(0, 0, command);
@ -48,11 +48,11 @@ class OptionMenuItem : MenuItemBase
{
Menu.DrawOptionText(x, y, color, text, grayed);
}
protected int drawLabel(int indent, int y, int color, bool grayed = false)
{
String label = Stringtable.Localize(mLabel);
int x;
int w = Menu.OptionWidth(label) * CleanXfac_1;
if (!mCentered) x = indent - w;
@ -66,24 +66,24 @@ class OptionMenuItem : MenuItemBase
Menu.DrawOptionText(indent + CursorSpace(), y, color, text, grayed);
}
int CursorSpace()
{
return (14 * CleanXfac_1);
}
override bool Selectable()
{
return true;
}
override int GetIndent()
{
if (mCentered) return 0;
if (screen.GetWidth() < 640) return screen.GetWidth() / 2;
return Menu.OptionWidth(Stringtable.Localize(mLabel));
}
override bool MouseEvent(int type, int x, int y)
{
if (Selectable() && type == Menu.MOUSE_Release)
@ -147,7 +147,7 @@ class OptionMenuItemLabeledSubmenu : OptionMenuItemSubmenu
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
{
drawLabel(indent, y, selected? OptionMenuSettings.mFontColorSelection : OptionMenuSettings.mFontColor);
String text = mLabelCVar.GetString();
if (text.Length() == 0) text = Stringtable.Localize("$notset");
drawValue(indent, y, OptionMenuSettings.mFontColorValue, text);
@ -166,7 +166,7 @@ class OptionMenuItemCommand : OptionMenuItemSubmenu
private String ccmd; // do not allow access to this from the outside.
bool mCloseOnSelect;
private bool mUnsafe;
OptionMenuItemCommand Init(String label, Name command, bool centered = false, bool closeonselect = false)
{
Super.Init(label, command, 0, centered);
@ -255,7 +255,7 @@ class OptionMenuItemOptionBase : OptionMenuItem
Name mValues; // Entry in OptionValues table
CVar mGrayCheck;
int mCenter;
const OP_VALUES = 0x11001;
protected void Init(String label, Name command, Name values, CVar graycheck, int center)
@ -288,11 +288,11 @@ class OptionMenuItemOptionBase : OptionMenuItem
{
return 0;
}
virtual void SetSelection(int Selection)
{
}
//=============================================================================
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
{
@ -338,7 +338,7 @@ class OptionMenuItemOptionBase : OptionMenuItem
}
return true;
}
virtual bool isGrayed()
{
return mGrayCheck != null && !mGrayCheck.GetInt();
@ -542,7 +542,7 @@ class OptionMenuItemControlBase : OptionMenuItem
}
return false;
}
void SendKey(int key)
{
mInput = key;
@ -717,7 +717,7 @@ class OptionMenuSliderBase : OptionMenuItem
{
return 0;
}
virtual void SetSliderValue(double val)
{
}
@ -862,7 +862,7 @@ class OptionMenuSliderBase : OptionMenuItem
class OptionMenuItemSlider : OptionMenuSliderBase
{
CVar mCVar;
OptionMenuItemSlider Init(String label, Name command, double min, double max, double step, int showval = 1, CVar graycheck = NULL)
{
Super.Init(label, min, max, step, showval, command, graycheck);
@ -941,11 +941,11 @@ class OptionMenuItemColorPicker : OptionMenuItem
if (mCVar != null)
{
Menu.MenuSound("menu/choose");
// This code is a bit complicated because it should allow subclassing the
// colorpicker menu.
// New color pickers must inherit from the internal one to work here.
let desc = MenuDescriptor.GetDescriptor('Colorpickermenu');
if (desc != NULL && (desc.mClass == null || desc.mClass is "ColorPickerMenu"))
{
@ -1042,7 +1042,7 @@ class OptionMenuFieldBase : OptionMenuItem
class OptionMenuItemTextField : OptionMenuFieldBase
{
TextEnterMenu mEnter;
OptionMenuItemTextField Init (String label, Name command, CVar graycheck = null)
{
Super.Init(label, command, graycheck);
@ -1175,7 +1175,7 @@ class OptionMenuItemScaleSlider : OptionMenuItemSlider
String TextZero;
String TextNegOne;
int mClickVal;
OptionMenuItemScaleSlider Init(String label, Name command, double min, double max, double step, String zero, String negone = "")
{
Super.Init(label, command, min, max, step, 0);
@ -1204,7 +1204,7 @@ class OptionMenuItemScaleSlider : OptionMenuItemSlider
}
return indent;
}
override bool MouseEvent(int type, int x, int y)
{
int value = int(GetSliderValue());
@ -1214,11 +1214,11 @@ class OptionMenuItemScaleSlider : OptionMenuItemSlider
mClickVal = value;
if (value <= 0) return false;
return Super.MouseEvent(type, x, y);
case Menu.MOUSE_Move:
if (mClickVal <= 0) return false;
return Super.MouseEvent(type, x, y);
case Menu.MOUSE_Release:
if (mClickVal <= 0)
{
@ -1231,7 +1231,7 @@ class OptionMenuItemScaleSlider : OptionMenuItemSlider
}
return false;
}
}
//=============================================================================

View file

@ -15,14 +15,14 @@ class ReverbEdit : OptionMenu
super.Init(parent, desc);
OnReturn();
}
override void OnReturn()
{
string env;
int id;
[env, id] = GetSelectedEnvironment();
let li = GetItem('EvironmentName');
if (li != NULL)
{
@ -126,7 +126,7 @@ class OptionMenuItemReverbSelect : OptionMenuItemSubMenu
return self;
}
override int Draw(OptionMenuDescriptor desc, int y, int indent, bool selected)
{
int x = drawLabel(indent, y, selected? OptionMenuSettings.mFontColorSelection : OptionMenuSettings.mFontColor);
@ -164,7 +164,7 @@ class OptionMenuItemReverbOption : OptionMenuItemOptionBase
{
return int(ReverbEdit.GetValue(mValIndex));
}
override void SetSelection(int Selection)
{
ReverbEdit.SetValue(mValIndex, Selection);
@ -182,7 +182,7 @@ class OptionMenuItemSliderReverbEditOption : OptionMenuSliderBase
int mValIndex;
String mEditValue;
TextEnterMenu mEnter;
OptionMenuItemSliderReverbEditOption Init(String label, double min, double max, double step, int showval, int valindex)
{
Super.Init(label, min, max, step, showval);
@ -190,7 +190,7 @@ class OptionMenuItemSliderReverbEditOption : OptionMenuSliderBase
mEnter = null;
return self;
}
override double GetSliderValue()
{
@ -201,7 +201,7 @@ class OptionMenuItemSliderReverbEditOption : OptionMenuSliderBase
{
ReverbEdit.SetValue(mValIndex, val);
}
override bool Selectable()
{
return !ReverbEdit.GrayCheck();
@ -228,7 +228,7 @@ class OptionMenuItemSliderReverbEditOption : OptionMenuSliderBase
}
return indent;
}
override bool MenuEvent (int mkey, bool fromcontroller)
{
if (mkey == Menu.MKEY_Enter)
@ -253,6 +253,6 @@ class OptionMenuItemSliderReverbEditOption : OptionMenuSliderBase
return Super.MenuEvent(mkey, fromcontroller);
}
}

View file

@ -38,7 +38,7 @@ class TextEnterMenu : Menu
{
const INPUTGRID_WIDTH = 13;
const INPUTGRID_HEIGHT = 5;
const Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-=.,!?@'\":;[]()<>^#$%&*/_ \b";
String mEnterString;
@ -50,7 +50,7 @@ class TextEnterMenu : Menu
int CursorSize;
bool AllowColors;
Font displayFont;
//=============================================================================
//
//
@ -106,13 +106,13 @@ class TextEnterMenu : Menu
{
return mEnterString;
}
override bool TranslateKeyboardEvents()
{
return mInputGridOkay;
}
//=============================================================================
//
//
@ -303,7 +303,7 @@ class TextEnterMenu : Menu
return false;
}
//=============================================================================
//
//
@ -375,5 +375,5 @@ class TextEnterMenu : Menu
}
Super.Drawer();
}
}

View file

@ -23,22 +23,22 @@ class StatusBarCore native ui
DI_MIRROR = 0x1000, // flip the texture horizontally, like a mirror
DI_ITEM_RELCENTER = 0x2000,
DI_MIRRORY = 0x40000000,
DI_SCREEN_AUTO = 0, // decide based on given offsets.
DI_SCREEN_MANUAL_ALIGN = 0x4000, // If this is on, the following flags will have an effect
DI_SCREEN_TOP = DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_VCENTER = 0x8000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_BOTTOM = 0x10000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_VOFFSET = 0x18000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_VMASK = 0x18000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_LEFT = DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_HCENTER = 0x20000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_RIGHT = 0x40000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_HOFFSET = 0x60000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_HMASK = 0x60000 | DI_SCREEN_MANUAL_ALIGN,
DI_SCREEN_LEFT_TOP = DI_SCREEN_TOP | DI_SCREEN_LEFT,
DI_SCREEN_RIGHT_TOP = DI_SCREEN_TOP | DI_SCREEN_RIGHT,
DI_SCREEN_LEFT_BOTTOM = DI_SCREEN_BOTTOM | DI_SCREEN_LEFT,
@ -49,21 +49,21 @@ class StatusBarCore native ui
DI_SCREEN_CENTER_TOP = DI_SCREEN_TOP | DI_SCREEN_HCENTER,
DI_SCREEN_CENTER_BOTTOM = DI_SCREEN_BOTTOM | DI_SCREEN_HCENTER,
DI_SCREEN_OFFSETS = DI_SCREEN_HOFFSET | DI_SCREEN_VOFFSET,
DI_ITEM_AUTO = 0, // equivalent with bottom center, which is the default alignment.
DI_ITEM_TOP = 0x80000,
DI_ITEM_VCENTER = 0x100000,
DI_ITEM_BOTTOM = 0, // this is the default vertical alignment
DI_ITEM_VOFFSET = 0x180000,
DI_ITEM_VMASK = 0x180000,
DI_ITEM_LEFT = 0x200000,
DI_ITEM_HCENTER = 0, // this is the default horizontal alignment
DI_ITEM_RIGHT = 0x400000,
DI_ITEM_HOFFSET = 0x600000,
DI_ITEM_HMASK = 0x600000,
DI_ITEM_LEFT_TOP = DI_ITEM_TOP|DI_ITEM_LEFT,
DI_ITEM_RIGHT_TOP = DI_ITEM_TOP|DI_ITEM_RIGHT,
DI_ITEM_LEFT_BOTTOM = DI_ITEM_BOTTOM|DI_ITEM_LEFT,
@ -71,7 +71,7 @@ class StatusBarCore native ui
DI_ITEM_CENTER = DI_ITEM_VCENTER|DI_ITEM_HCENTER,
DI_ITEM_CENTER_BOTTOM = DI_ITEM_BOTTOM|DI_ITEM_HCENTER,
DI_ITEM_OFFSETS = DI_ITEM_HOFFSET|DI_ITEM_VOFFSET,
DI_TEXT_ALIGN_LEFT = 0,
DI_TEXT_ALIGN_RIGHT = 0x800000,
DI_TEXT_ALIGN_CENTER = 0x1000000,
@ -94,7 +94,7 @@ class StatusBarCore native ui
FNF_WHENNOTZERO = 0x1,
FNF_FILLZEROS = 0x2,
}
// These are block properties for the drawers. A child class can set them to have a block of items use the same settings.
native double Alpha;
native Vector2 drawOffset; // can be set by subclasses to offset drawing operations
@ -118,17 +118,17 @@ class StatusBarCore native ui
native double, double, double, double TransformRect(double x, double y, double w, double h, int flags = 0);
native void Fill(Color col, double x, double y, double w, double h, int flags = 0);
native void SetClipRect(double x, double y, double w, double h, int flags = 0);
native void SetSize(int height, int vwidth, int vheight, int hwidth = -1, int hheight = -1);
native Vector2 GetHUDScale();
native void BeginStatusBar(bool forceScaled = false, int resW = -1, int resH = -1, int rel = -1);
native void BeginHUD(double Alpha = 1., bool forcescaled = false, int resW = -1, int resH = -1);
void ClearClipRect()
{
screen.ClearClipRect();
}
//============================================================================
//
// Returns how much the status bar's graphics extend into the view
@ -137,7 +137,7 @@ class StatusBarCore native ui
// by the element requesting this information.
//
//============================================================================
virtual int GetProtrusion(double scaleratio) const
{
return 0;
@ -156,7 +156,7 @@ class LinearValueInterpolator : Object
{
int mCurrentValue;
int mMaxChange;
static LinearValueInterpolator Create(int startval, int maxchange)
{
let v = new("LinearValueInterpolator");
@ -164,12 +164,12 @@ class LinearValueInterpolator : Object
v.mMaxChange = maxchange;
return v;
}
void Reset(int value)
{
mCurrentValue = value;
}
// This must be called periodically in the status bar's Tick function.
// Do not call this in the Draw function because that may skip some frames!
void Update(int destvalue)
@ -183,7 +183,7 @@ class LinearValueInterpolator : Object
mCurrentValue = min(destvalue, mCurrentValue + mMaxChange);
}
}
// This must be called in the draw function to retrieve the value for output.
int GetValue()
{
@ -197,8 +197,8 @@ class DynamicValueInterpolator : Object
int mMinChange;
int mMaxChange;
double mChangeFactor;
static DynamicValueInterpolator Create(int startval, double changefactor, int minchange, int maxchange)
{
let v = new("DynamicValueInterpolator");
@ -208,12 +208,12 @@ class DynamicValueInterpolator : Object
v.mChangeFactor = changefactor;
return v;
}
void Reset(int value)
{
mCurrentValue = value;
}
// This must be called periodically in the status bar's Tick function.
// Do not call this in the Draw function because that may skip some frames!
void Update(int destvalue)
@ -228,7 +228,7 @@ class DynamicValueInterpolator : Object
mCurrentValue = min(destvalue, mCurrentValue + diff);
}
}
// This must be called in the draw function to retrieve the value for output.
int GetValue()
{