mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-29 15:12:11 +00:00
# Conflicts: # src/menu/playerdisplay.cpp
This commit is contained in:
commit
a52f79055d
25 changed files with 739 additions and 499 deletions
|
@ -1253,6 +1253,7 @@ set (PCH_SOURCES
|
||||||
textures/pngtexture.cpp
|
textures/pngtexture.cpp
|
||||||
textures/rawpagetexture.cpp
|
textures/rawpagetexture.cpp
|
||||||
textures/emptytexture.cpp
|
textures/emptytexture.cpp
|
||||||
|
textures/backdroptexture.cpp
|
||||||
textures/texture.cpp
|
textures/texture.cpp
|
||||||
textures/texturemanager.cpp
|
textures/texturemanager.cpp
|
||||||
textures/tgatexture.cpp
|
textures/tgatexture.cpp
|
||||||
|
|
|
@ -1901,7 +1901,6 @@ void AM_drawSubsectors()
|
||||||
PalEntry flatcolor;
|
PalEntry flatcolor;
|
||||||
mpoint_t originpt;
|
mpoint_t originpt;
|
||||||
|
|
||||||
screen->StartSimplePolys();
|
|
||||||
for (int i = 0; i < numsubsectors; ++i)
|
for (int i = 0; i < numsubsectors; ++i)
|
||||||
{
|
{
|
||||||
if (subsectors[i].flags & SSECF_POLYORG)
|
if (subsectors[i].flags & SSECF_POLYORG)
|
||||||
|
@ -2058,7 +2057,6 @@ void AM_drawSubsectors()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
screen->FinishSimplePolys();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
|
@ -181,6 +181,27 @@ void FBaseCVar::SetGenericRep (UCVarValue value, ECVarType type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(_CVar, GetInt)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(FBaseCVar);
|
||||||
|
auto v = self->GetGenericRep(CVAR_Int);
|
||||||
|
ACTION_RETURN_INT(v.Int);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(_CVar, GetFloat)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(FBaseCVar);
|
||||||
|
auto v = self->GetGenericRep(CVAR_Float);
|
||||||
|
ACTION_RETURN_FLOAT(v.Int);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(_CVar, GetString)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(FBaseCVar);
|
||||||
|
auto v = self->GetGenericRep(CVAR_String);
|
||||||
|
ACTION_RETURN_STRING(v.String);
|
||||||
|
}
|
||||||
|
|
||||||
bool FBaseCVar::ToBool (UCVarValue value, ECVarType type)
|
bool FBaseCVar::ToBool (UCVarValue value, ECVarType type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
|
|
@ -616,6 +616,10 @@ DEFINE_ACTION_FUNCTION(DObject, GetClassName)
|
||||||
ACTION_RETURN_INT(self->GetClass()->TypeName);
|
ACTION_RETURN_INT(self->GetClass()->TypeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(DObject, MSTime)
|
||||||
|
{
|
||||||
|
ACTION_RETURN_INT(I_MSTime());
|
||||||
|
}
|
||||||
|
|
||||||
void *DObject::ScriptVar(FName field, PType *type)
|
void *DObject::ScriptVar(FName field, PType *type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -211,9 +211,6 @@ public:
|
||||||
bool StartOffscreen();
|
bool StartOffscreen();
|
||||||
void EndOffscreen();
|
void EndOffscreen();
|
||||||
|
|
||||||
void StartSimplePolys();
|
|
||||||
void FinishSimplePolys();
|
|
||||||
|
|
||||||
void FillSimplePoly(FTexture *texture, FVector2 *points, int npoints,
|
void FillSimplePoly(FTexture *texture, FVector2 *points, int npoints,
|
||||||
double originx, double originy, double scalex, double scaley,
|
double originx, double originy, double scalex, double scaley,
|
||||||
DAngle rotation, FDynamicColormap *colormap, PalEntry flatcolor, int lightlevel, int bottomclip);
|
DAngle rotation, FDynamicColormap *colormap, PalEntry flatcolor, int lightlevel, int bottomclip);
|
||||||
|
|
|
@ -1052,6 +1052,11 @@ void FGLInterface::PrecacheTexture(FTexture *tex, int cache)
|
||||||
FMaterial * gltex = FMaterial::ValidateTexture(tex, false);
|
FMaterial * gltex = FMaterial::ValidateTexture(tex, false);
|
||||||
if (gltex) gltex->Precache();
|
if (gltex) gltex->Precache();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// make sure that software pixel buffers do not stick around for unneeded textures.
|
||||||
|
tex->Unload();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -118,130 +118,6 @@ public:
|
||||||
mBlue = (float)BPART(DWORD(*mCVar));
|
mBlue = (float)BPART(DWORD(*mCVar));
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
bool MouseEvent(int type, int mx, int my)
|
|
||||||
{
|
|
||||||
int olditem = mDesc->mSelectedItem;
|
|
||||||
bool res = Super::MouseEvent(type, mx, my);
|
|
||||||
|
|
||||||
if (mDesc->mSelectedItem == -1 || mDesc->mSelectedItem == mStartItem+7)
|
|
||||||
{
|
|
||||||
int y = (-mDesc->mPosition + BigFont->GetHeight() + mDesc->mItems.Size() * OptionSettings.mLinespacing) * CleanYfac_1;
|
|
||||||
int h = (screen->GetHeight() - y) / 16;
|
|
||||||
int fh = OptionSettings.mLinespacing * CleanYfac_1;
|
|
||||||
int w = fh;
|
|
||||||
int yy = y + 2 * CleanYfac_1;
|
|
||||||
int indent = (screen->GetWidth() / 2);
|
|
||||||
|
|
||||||
if (h > fh) h = fh;
|
|
||||||
else if (h < 4) return res; // no space to draw it.
|
|
||||||
|
|
||||||
int box_y = y - 2 * CleanYfac_1;
|
|
||||||
int box_x = indent - 16*w;
|
|
||||||
|
|
||||||
if (mx >= box_x && mx < box_x + 16*w && my >= box_y && my < box_y + 16*h)
|
|
||||||
{
|
|
||||||
int cell_x = (mx - box_x) / w;
|
|
||||||
int cell_y = (my - box_y) / h;
|
|
||||||
|
|
||||||
if (olditem != mStartItem+7 || cell_x != mGridPosX || cell_y != mGridPosY)
|
|
||||||
{
|
|
||||||
mGridPosX = cell_x;
|
|
||||||
mGridPosY = cell_y;
|
|
||||||
//S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", snd_menuvolume, ATTN_NONE);
|
|
||||||
}
|
|
||||||
mDesc->mSelectedItem = mStartItem+7;
|
|
||||||
if (type == MOUSE_Release)
|
|
||||||
{
|
|
||||||
MenuEvent(MKEY_Enter, true);
|
|
||||||
if (m_use_mouse == 2) mDesc->mSelectedItem = -1;
|
|
||||||
}
|
|
||||||
res = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void Drawer()
|
|
||||||
{
|
|
||||||
Super::Drawer();
|
|
||||||
|
|
||||||
if (mCVar == NULL) return;
|
|
||||||
int y = (-mDesc->mPosition + BigFont->GetHeight() + mDesc->mItems.Size() * OptionSettings.mLinespacing) * CleanYfac_1;
|
|
||||||
int h = (screen->GetHeight() - y) / 16;
|
|
||||||
int fh = OptionSettings.mLinespacing * CleanYfac_1;
|
|
||||||
int w = fh;
|
|
||||||
int yy = y;
|
|
||||||
|
|
||||||
if (h > fh) h = fh;
|
|
||||||
else if (h < 4) return; // no space to draw it.
|
|
||||||
|
|
||||||
int indent = (screen->GetWidth() / 2);
|
|
||||||
int p = 0;
|
|
||||||
|
|
||||||
for(int i = 0; i < 16; i++, y += h)
|
|
||||||
{
|
|
||||||
int box_x, box_y;
|
|
||||||
int x1;
|
|
||||||
|
|
||||||
box_y = y - 2 * CleanYfac_1;
|
|
||||||
box_x = indent - 16*w;
|
|
||||||
for (x1 = 0; x1 < 16; ++x1, p++)
|
|
||||||
{
|
|
||||||
screen->Clear (box_x, box_y, box_x + w, box_y + h, p, 0);
|
|
||||||
if ((mDesc->mSelectedItem == mStartItem+7) &&
|
|
||||||
(/*p == CurrColorIndex ||*/ (i == mGridPosY && x1 == mGridPosX)))
|
|
||||||
{
|
|
||||||
int r, g, b;
|
|
||||||
DWORD col;
|
|
||||||
double blinky;
|
|
||||||
if (i == mGridPosY && x1 == mGridPosX)
|
|
||||||
{
|
|
||||||
r = 255, g = 128, b = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
r = 200, g = 200, b = 255;
|
|
||||||
}
|
|
||||||
// Make sure the cursors stand out against similar colors
|
|
||||||
// by pulsing them.
|
|
||||||
blinky = fabs(sin(I_MSTime()/1000.0)) * 0.5 + 0.5;
|
|
||||||
col = MAKEARGB(255,int(r*blinky),int(g*blinky),int(b*blinky));
|
|
||||||
|
|
||||||
screen->Clear (box_x, box_y, box_x + w, box_y + 1, -1, col);
|
|
||||||
screen->Clear (box_x, box_y + h-1, box_x + w, box_y + h, -1, col);
|
|
||||||
screen->Clear (box_x, box_y, box_x + 1, box_y + h, -1, col);
|
|
||||||
screen->Clear (box_x + w - 1, box_y, box_x + w, box_y + h, -1, col);
|
|
||||||
}
|
|
||||||
box_x += w;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
y = yy;
|
|
||||||
DWORD newColor = MAKEARGB(255, int(mRed), int(mGreen), int(mBlue));
|
|
||||||
DWORD oldColor = DWORD(*mCVar) | 0xFF000000;
|
|
||||||
|
|
||||||
int x = screen->GetWidth()*2/3;
|
|
||||||
|
|
||||||
screen->Clear (x, y, x + 48*CleanXfac_1, y + 48*CleanYfac_1, -1, oldColor);
|
|
||||||
screen->Clear (x + 48*CleanXfac_1, y, x + 48*2*CleanXfac_1, y + 48*CleanYfac_1, -1, newColor);
|
|
||||||
|
|
||||||
y += 49*CleanYfac_1;
|
|
||||||
screen->DrawText (SmallFont, CR_GRAY, x+(24-SmallFont->StringWidth("Old")/2)*CleanXfac_1, y,
|
|
||||||
"Old", DTA_CleanNoMove_1, true, TAG_DONE);
|
|
||||||
screen->DrawText (SmallFont, CR_WHITE, x+(48+24-SmallFont->StringWidth("New")/2)*CleanXfac_1, y,
|
|
||||||
"New", DTA_CleanNoMove_1, true, TAG_DONE);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS(DColorPickerMenu, true, false)
|
IMPLEMENT_CLASS(DColorPickerMenu, true, false)
|
||||||
|
|
|
@ -149,7 +149,7 @@ bool DMenu::Responder (event_t *ev)
|
||||||
res = MouseEventBack(MOUSE_Click, ev->data1, ev->data2);
|
res = MouseEventBack(MOUSE_Click, ev->data1, ev->data2);
|
||||||
// make the menu's mouse handler believe that the current coordinate is outside the valid range
|
// make the menu's mouse handler believe that the current coordinate is outside the valid range
|
||||||
if (res) ev->data2 = -1;
|
if (res) ev->data2 = -1;
|
||||||
res |= MouseEvent(MOUSE_Click, ev->data1, ev->data2);
|
res |= CallMouseEvent(MOUSE_Click, ev->data1, ev->data2);
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
SetCapture();
|
SetCapture();
|
||||||
|
@ -163,7 +163,7 @@ bool DMenu::Responder (event_t *ev)
|
||||||
{
|
{
|
||||||
res = MouseEventBack(MOUSE_Move, ev->data1, ev->data2);
|
res = MouseEventBack(MOUSE_Move, ev->data1, ev->data2);
|
||||||
if (res) ev->data2 = -1;
|
if (res) ev->data2 = -1;
|
||||||
res |= MouseEvent(MOUSE_Move, ev->data1, ev->data2);
|
res |= CallMouseEvent(MOUSE_Move, ev->data1, ev->data2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ev->subtype == EV_GUI_LButtonUp)
|
else if (ev->subtype == EV_GUI_LButtonUp)
|
||||||
|
@ -173,7 +173,7 @@ bool DMenu::Responder (event_t *ev)
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
res = MouseEventBack(MOUSE_Release, ev->data1, ev->data2);
|
res = MouseEventBack(MOUSE_Release, ev->data1, ev->data2);
|
||||||
if (res) ev->data2 = -1;
|
if (res) ev->data2 = -1;
|
||||||
res |= MouseEvent(MOUSE_Release, ev->data1, ev->data2);
|
res |= CallMouseEvent(MOUSE_Release, ev->data1, ev->data2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -217,7 +217,7 @@ bool DMenu::CallMenuEvent(int mkey, bool fromcontroller)
|
||||||
int retval;
|
int retval;
|
||||||
VMReturn ret(&retval);
|
VMReturn ret(&retval);
|
||||||
GlobalVMStack.Call(func, params, 3, &ret, 1, nullptr);
|
GlobalVMStack.Call(func, params, 3, &ret, 1, nullptr);
|
||||||
return retval;
|
return !!retval;
|
||||||
}
|
}
|
||||||
else return MenuEvent(mkey, fromcontroller);
|
else return MenuEvent(mkey, fromcontroller);
|
||||||
}
|
}
|
||||||
|
@ -253,6 +253,28 @@ bool DMenu::MouseEvent(int type, int x, int y)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(DMenu, MouseEvent)
|
||||||
|
{
|
||||||
|
PARAM_SELF_PROLOGUE(DMenu);
|
||||||
|
PARAM_INT(type);
|
||||||
|
PARAM_INT(x);
|
||||||
|
PARAM_INT(y);
|
||||||
|
ACTION_RETURN_BOOL(self->MouseEvent(type, x, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DMenu::CallMouseEvent(int type, int x, int y)
|
||||||
|
{
|
||||||
|
IFVIRTUAL(DMenu, MouseEvent)
|
||||||
|
{
|
||||||
|
VMValue params[] = { (DObject*)this, type, x, y };
|
||||||
|
int retval;
|
||||||
|
VMReturn ret(&retval);
|
||||||
|
GlobalVMStack.Call(func, params, 4, &ret, 1, nullptr);
|
||||||
|
return !!retval;
|
||||||
|
}
|
||||||
|
else return MouseEvent (type, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -335,6 +357,26 @@ void DMenu::Drawer ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(DMenu, Drawer)
|
||||||
|
{
|
||||||
|
PARAM_SELF_PROLOGUE(DMenu);
|
||||||
|
self->Drawer();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DMenu::CallDrawer()
|
||||||
|
{
|
||||||
|
IFVIRTUAL(DMenu, Drawer)
|
||||||
|
{
|
||||||
|
VMValue params[] = { (DObject*)this };
|
||||||
|
GlobalVMStack.Call(func, params, 1, nullptr, 0, nullptr);
|
||||||
|
}
|
||||||
|
else Drawer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool DMenu::DimAllowed()
|
bool DMenu::DimAllowed()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
@ -778,7 +820,7 @@ void M_Drawer (void)
|
||||||
screen->Dim(fade);
|
screen->Dim(fade);
|
||||||
V_SetBorderNeedRefresh();
|
V_SetBorderNeedRefresh();
|
||||||
}
|
}
|
||||||
DMenu::CurrentMenu->Drawer();
|
DMenu::CurrentMenu->CallDrawer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1034,7 +1076,7 @@ CCMD(reset2saved)
|
||||||
//native OptionMenuItem OptionMenuDescriptor.GetItem(Name iname);
|
//native OptionMenuItem OptionMenuDescriptor.GetItem(Name iname);
|
||||||
//native void OptionMenuItem.drawLabel(int indent, int y, EColorRange color, bool grayed = false);
|
//native void OptionMenuItem.drawLabel(int indent, int y, EColorRange color, bool grayed = false);
|
||||||
|
|
||||||
DEFINE_FIELD(DMenuDescriptor, mMenuName)
|
DEFINE_FIELD(DMenuDescriptor, mMenuName)
|
||||||
DEFINE_FIELD(DMenuDescriptor, mNetgameMessage)
|
DEFINE_FIELD(DMenuDescriptor, mNetgameMessage)
|
||||||
DEFINE_FIELD(DMenuDescriptor, mClass)
|
DEFINE_FIELD(DMenuDescriptor, mClass)
|
||||||
|
|
||||||
|
@ -1062,3 +1104,11 @@ DEFINE_FIELD(DOptionMenu, VisBottom)
|
||||||
DEFINE_FIELD(DOptionMenu, mFocusControl)
|
DEFINE_FIELD(DOptionMenu, mFocusControl)
|
||||||
DEFINE_FIELD(DOptionMenu, mDesc)
|
DEFINE_FIELD(DOptionMenu, mDesc)
|
||||||
|
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mTitleColor)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mFontColor)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mFontColorValue)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mFontColorMore)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mFontColorHeader)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mFontColorHighlight)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mFontColorSelection)
|
||||||
|
DEFINE_FIELD(FOptionMenuSettings, mLinespacing)
|
||||||
|
|
|
@ -19,7 +19,7 @@ EXTERN_CVAR(Int, m_use_mouse);
|
||||||
struct event_t;
|
struct event_t;
|
||||||
class FTexture;
|
class FTexture;
|
||||||
class FFont;
|
class FFont;
|
||||||
enum EColorRange;
|
enum EColorRange : int;
|
||||||
class FPlayerClass;
|
class FPlayerClass;
|
||||||
class FKeyBindings;
|
class FKeyBindings;
|
||||||
|
|
||||||
|
@ -244,6 +244,8 @@ public:
|
||||||
virtual bool MouseEvent(int type, int x, int y);
|
virtual bool MouseEvent(int type, int x, int y);
|
||||||
|
|
||||||
bool CallMenuEvent(int mkey, bool fromcontroller);
|
bool CallMenuEvent(int mkey, bool fromcontroller);
|
||||||
|
bool CallMouseEvent(int type, int x, int y);
|
||||||
|
void CallDrawer();
|
||||||
|
|
||||||
bool MouseEventBack(int type, int x, int y);
|
bool MouseEventBack(int type, int x, int y);
|
||||||
void SetCapture();
|
void SetCapture();
|
||||||
|
@ -708,4 +710,4 @@ void M_InitVideoModesMenu ();
|
||||||
void M_MarkMenus();
|
void M_MarkMenus();
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -297,7 +297,7 @@ bool DTextEnterMenu::MenuEvent (int key, bool fromcontroller)
|
||||||
|
|
||||||
void DTextEnterMenu::Drawer ()
|
void DTextEnterMenu::Drawer ()
|
||||||
{
|
{
|
||||||
mParentMenu->Drawer();
|
mParentMenu->CallDrawer();
|
||||||
if (mInputGridOkay)
|
if (mInputGridOkay)
|
||||||
{
|
{
|
||||||
const int cell_width = 18 * CleanXfac;
|
const int cell_width = 18 * CleanXfac;
|
||||||
|
|
|
@ -426,7 +426,7 @@ public:
|
||||||
|
|
||||||
void Drawer()
|
void Drawer()
|
||||||
{
|
{
|
||||||
mParentMenu->Drawer();
|
mParentMenu->CallDrawer();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -49,301 +49,6 @@
|
||||||
#include "r_data/r_translate.h"
|
#include "r_data/r_translate.h"
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
// Used by the player display
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
struct FBackdropTexture : public FTexture
|
|
||||||
{
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
COS_SIZE = 256,
|
|
||||||
ANGLESHIFT = 24
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr uint32_t DEGREES(double v)
|
|
||||||
{
|
|
||||||
return uint32_t((v)*(0x40000000 / 90.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
static double TORAD(uint32_t x)
|
|
||||||
{
|
|
||||||
return x*(M_PI / 0x80000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
FBackdropTexture();
|
|
||||||
|
|
||||||
const BYTE *GetColumn(unsigned int column, const Span **spans_out);
|
|
||||||
const BYTE *GetPixels();
|
|
||||||
bool CheckModified();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
uint32_t costab[COS_SIZE];
|
|
||||||
BYTE Pixels[144*160];
|
|
||||||
static const Span DummySpan[2];
|
|
||||||
int LastRenderTic;
|
|
||||||
|
|
||||||
uint32_t time1, time2, time3, time4;
|
|
||||||
uint32_t t1ang, t2ang, z1ang, z2ang;
|
|
||||||
|
|
||||||
void Render();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// A 32x32 cloud rendered with Photoshop, plus some other filters
|
|
||||||
static BYTE pattern1[1024] =
|
|
||||||
{
|
|
||||||
5, 9, 7,10, 9,15, 9, 7, 8,10, 5, 3, 5, 7, 9, 8,14, 8, 4, 7, 8, 9, 5, 7,14, 7, 0, 7,13,13, 9, 6,
|
|
||||||
2, 7, 9, 7, 7,10, 8, 8,11,10, 6, 7,10, 7, 5, 6, 6, 4, 7,13,15,16,11,15,11, 8, 0, 4,13,22,17,11,
|
|
||||||
5, 9, 9, 7, 9,10, 4, 3, 6, 7, 8, 6, 5, 4, 2, 2, 1, 4, 6,11,15,15,14,13,17, 9, 5, 9,11,12,17,20,
|
|
||||||
9,16, 9, 8,12,13, 7, 3, 7, 9, 5, 4, 2, 5, 5, 5, 7,11, 6, 7, 6,13,17,10,10, 9,12,17,14,12,16,15,
|
|
||||||
15,13, 5, 3, 9,10, 4,10,12,12, 7, 9, 8, 8, 8,10, 7, 6, 5, 5, 5, 6,11, 9, 3,13,16,18,21,16,23,18,
|
|
||||||
23,13, 0, 0, 0, 0, 0,12,18,14,15,16,13, 7, 7, 5, 9, 6, 6, 8, 4, 0, 0, 0, 0,14,19,17,14,20,21,25,
|
|
||||||
19,20,14,13, 7, 5,13,19,14,13,17,15,14, 7, 3, 5, 6,11, 7, 7, 8, 8,10, 9, 9,18,17,15,14,15,18,16,
|
|
||||||
16,29,24,23,18, 9,17,20,11, 5,12,15,15,12, 6, 3, 4, 6, 7,10,13,18,18,19,16,12,17,19,23,16,14,14,
|
|
||||||
9,18,20,26,19, 5,18,18,10, 5,12,15,14,17,11, 6,11, 9,10,13,10,20,24,20,21,20,14,18,15,22,20,19,
|
|
||||||
0, 6,16,18, 8, 7,15,18,10,13,17,17,13,11,15,11,19,12,13,10, 4,15,19,21,21,24,14, 9,17,20,24,17,
|
|
||||||
18,17, 7, 7,16,21,22,15, 5,14,20,14,13,21,13, 8,12,14, 7, 8,11,15,13,11,16,17, 7, 5,12,17,19,14,
|
|
||||||
25,23,17,16,23,18,15, 7, 0, 6,11, 6,11,15,11, 7,12, 7, 4,10,16,13, 7, 7,15,13, 9,15,21,14, 5, 0,
|
|
||||||
18,22,21,21,21,22,12, 6,14,20,15, 6,10,19,13, 8, 7, 3, 7,12,14,16, 9,12,22,15,12,18,24,19,17, 9,
|
|
||||||
0,15,18,21,17,25,14,13,19,21,21,11, 6,13,16,16,12,10,12,11,13,20,14,13,18,13, 9,15,16,25,31,20,
|
|
||||||
5,20,24,16, 7,14,14,11,18,19,19, 6, 0, 5,11,14,17,16,19,14,15,21,19,15,14,14, 8, 0, 7,24,18,16,
|
|
||||||
9,17,15, 7, 6,14,12, 7,14,16,11, 4, 7, 6,13,16,15,13,12,20,21,20,21,17,18,26,14, 0,13,23,21,11,
|
|
||||||
9,12,18,11,15,21,13, 8,13,13,10, 7,13, 8, 8,19,13, 7, 4,15,19,18,14,12,14,15, 8, 6,16,22,22,15,
|
|
||||||
9,17,14,19,15,14,15, 9,11, 9, 6, 8,14,13,13,12, 5, 0, 0, 6,12,13, 7, 7, 9, 7, 0,12,21,16,15,18,
|
|
||||||
15,16,18,11, 6, 8,15, 9, 2, 0, 5,10,10,16, 9, 0, 4,12,15, 9,12, 9, 7, 7,12, 7, 0, 6,12, 6, 9,13,
|
|
||||||
12,19,15,14,11, 7, 8, 9,12,10, 5, 5, 7,12,12,10,14,16,16,11, 8,12,10,12,10, 8,10,10,14,12,16,16,
|
|
||||||
16,17,20,22,12,15,12,14,19,11, 6, 5,10,13,17,17,21,19,15, 9, 6, 9,15,18,10,10,18,14,20,15,16,17,
|
|
||||||
11,19,19,18,19,14,17,13,12,12, 7,11,18,17,16,15,19,19,10, 2, 0, 8,15,12, 8,11,12,10,19,20,19,19,
|
|
||||||
6,14,18,13,13,16,16,12, 5, 8,10,12,10,13,18,12, 9,10, 7, 6, 5,11, 8, 6, 7,13,16,13,10,15,20,14,
|
|
||||||
0, 5,12,12, 4, 0, 9,16, 9,10,12, 8, 0, 9,13, 9, 0, 2, 4, 7,10, 6, 7, 3, 4,11,16,18,10,11,21,21,
|
|
||||||
16,13,11,15, 8, 0, 5, 9, 8, 7, 6, 3, 0, 9,17, 9, 0, 0, 0, 3, 5, 4, 3, 5, 7,15,16,16,17,14,22,22,
|
|
||||||
24,14,15,12, 9, 0, 5,10, 8, 4, 7,12,10,11,12, 7, 6, 8, 6, 5, 7, 8, 8,11,13,10,15,14,12,18,20,16,
|
|
||||||
16,17,17,18,12, 9,12,16,10, 5, 6,20,13,15, 8, 4, 8, 9, 8, 7, 9,11,12,17,16,16,11,10, 9,10, 5, 0,
|
|
||||||
0,14,18,18,15,16,14, 9,10, 9, 9,15,14,10, 4, 6,10, 8, 8, 7,10, 9,10,16,18,10, 0, 0, 7,12,10, 8,
|
|
||||||
0,14,19,14, 9,11,11, 8, 8,10,15, 9,10, 7, 4,10,13, 9, 7, 5, 5, 7, 7, 7,13,13, 5, 5,14,22,18,16,
|
|
||||||
0,10,14,10, 3, 6, 5, 6, 8, 9, 8, 9, 5, 9, 8, 9, 6, 8, 8, 8, 1, 0, 0, 0, 9,17,12,12,17,19,20,13,
|
|
||||||
6,11,17,11, 5, 5, 8,10, 6, 5, 6, 6, 3, 7, 9, 7, 6, 8,12,10, 4, 8, 6, 6,11,16,16,15,16,17,17,16,
|
|
||||||
11, 9,10,10, 5, 6,12,10, 5, 1, 6,10, 5, 3, 3, 5, 4, 7,15,10, 7,13, 7, 8,15,11,15,15,15, 8,11,15,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Just a 32x32 cloud rendered with the standard Photoshop filter
|
|
||||||
static BYTE pattern2[1024] =
|
|
||||||
{
|
|
||||||
9, 9, 8, 8, 8, 8, 6, 6,13,13,11,21,19,21,23,18,23,24,19,19,24,17,18,12, 9,14, 8,12,12, 5, 8, 6,
|
|
||||||
11,10, 6, 7, 8, 8, 9,13,10,11,17,15,23,22,23,22,20,26,27,26,17,21,20,14,12, 8,11, 8,11, 7, 8, 7,
|
|
||||||
6, 9,13,13,10, 9,13, 7,12,13,16,19,16,20,22,25,22,25,27,22,21,23,15,10,14,14,15,13,12, 8,12, 6,
|
|
||||||
6, 7,12,12,12,16, 9,12,12,15,16,11,21,24,19,24,23,26,28,27,26,21,14,15, 7, 7,10,15,12,11,10, 9,
|
|
||||||
7,14,11,16,12,18,16,14,16,14,11,14,15,21,23,17,20,18,26,24,27,18,20,11,11,14,10,17,17,10, 6,10,
|
|
||||||
13, 9,14,10,13,11,14,15,18,15,15,12,19,19,20,18,22,20,19,22,19,19,19,20,17,15,15,11,16,14,10, 8,
|
|
||||||
13,16,12,16,17,19,17,18,15,19,14,18,15,14,15,17,21,19,23,18,23,22,18,18,17,15,15,16,12,12,15,10,
|
|
||||||
10,12,14,10,16,11,18,15,21,20,20,17,18,19,16,19,14,20,19,14,19,25,22,21,22,24,18,12, 9, 9, 8, 6,
|
|
||||||
10,10,13, 9,15,13,20,19,22,18,18,17,17,21,21,13,13,12,19,18,16,17,27,26,22,23,20,17,12,11, 8, 9,
|
|
||||||
7,13,14,15,11,13,18,22,19,23,23,20,22,24,21,14,12,16,17,19,18,18,22,18,24,23,19,17,16,14, 8, 7,
|
|
||||||
12,12, 8, 8,16,20,26,25,28,28,22,29,23,22,21,18,13,16,15,15,20,17,25,24,19,17,17,17,15,10, 8, 9,
|
|
||||||
7,12,15,11,17,20,25,25,25,29,30,31,28,26,18,16,17,18,20,21,22,20,23,19,18,19,10,16,16,11,11, 8,
|
|
||||||
5, 6, 8,14,14,17,17,21,27,23,27,31,27,22,23,21,19,19,21,19,20,19,17,22,13,17,12,15,10,10,12, 6,
|
|
||||||
8, 9, 8,14,15,16,15,18,27,26,23,25,23,22,18,21,20,17,19,20,20,16,20,14,15,13,12, 8, 8, 7,11,13,
|
|
||||||
7, 6,11,11,11,13,15,22,25,24,26,22,24,26,23,18,24,24,20,18,20,16,17,12,12,12,10, 8,11, 9, 6, 8,
|
|
||||||
9,10, 9, 6, 5,14,16,19,17,21,26,20,23,19,19,17,20,21,26,25,23,21,17,13,12, 5,13,11, 7,12,10,12,
|
|
||||||
6, 5, 4,10,11, 9,10,13,17,20,20,18,23,26,27,20,21,24,20,19,24,20,18,10,11, 3, 6,13, 9, 6, 8, 8,
|
|
||||||
1, 2, 2,11,13,13,11,16,16,16,19,21,20,23,22,28,21,20,19,18,23,16,18, 7, 5, 9, 7, 6, 5,10, 8, 8,
|
|
||||||
0, 0, 6, 9,11,15,12,12,19,18,19,26,22,24,26,30,23,22,22,16,20,19,12,12, 3, 4, 6, 5, 4, 7, 2, 4,
|
|
||||||
2, 0, 0, 7,11, 8,14,13,15,21,26,28,25,24,27,26,23,24,22,22,15,17,12, 8,10, 7, 7, 4, 0, 5, 0, 1,
|
|
||||||
1, 2, 0, 1, 9,14,13,10,19,24,22,29,30,28,30,30,31,23,24,19,17,14,13, 8, 8, 8, 1, 4, 0, 0, 0, 3,
|
|
||||||
5, 2, 4, 2, 9, 8, 8, 8,18,23,20,27,30,27,31,25,28,30,28,24,24,15,11,14,10, 3, 4, 3, 0, 0, 1, 3,
|
|
||||||
9, 3, 4, 3, 5, 6, 8,13,14,23,21,27,28,27,28,27,27,29,30,24,22,23,13,15, 8, 6, 2, 0, 4, 3, 4, 1,
|
|
||||||
6, 5, 5, 3, 9, 3, 6,14,13,16,23,26,28,23,30,31,28,29,26,27,21,20,15,15,13, 9, 1, 0, 2, 0, 5, 8,
|
|
||||||
8, 4, 3, 7, 2, 0,10, 7,10,14,21,21,29,28,25,27,30,28,25,24,27,22,19,13,10, 5, 0, 0, 0, 0, 0, 7,
|
|
||||||
7, 6, 7, 0, 2, 2, 5, 6,15,11,19,24,22,29,27,31,30,30,31,28,23,18,14,14, 7, 5, 0, 0, 1, 0, 1, 0,
|
|
||||||
5, 5, 5, 0, 0, 4, 5,11, 7,10,13,20,21,21,28,31,28,30,26,28,25,21, 9,12, 3, 3, 0, 2, 2, 2, 0, 1,
|
|
||||||
3, 3, 0, 2, 0, 3, 5, 3,11,11,16,19,19,27,26,26,30,27,28,26,23,22,16, 6, 2, 2, 3, 2, 0, 2, 4, 0,
|
|
||||||
0, 0, 0, 3, 3, 1, 0, 4, 5, 9,11,16,24,20,28,26,28,24,28,25,22,21,16, 5, 7, 5, 7, 3, 2, 3, 3, 6,
|
|
||||||
0, 0, 2, 0, 2, 0, 4, 3, 8,12, 9,17,16,23,23,27,27,22,26,22,21,21,13,14, 5, 3, 7, 3, 2, 4, 6, 1,
|
|
||||||
2, 5, 6, 4, 0, 1, 5, 8, 7, 6,15,17,22,20,24,28,23,25,20,21,18,16,13,15,13,10, 8, 5, 5, 9, 3, 7,
|
|
||||||
7, 7, 0, 5, 1, 6, 7, 9,12, 9,12,21,22,25,24,22,23,25,24,18,24,22,17,13,10, 9,10, 9, 6,11, 6, 5,
|
|
||||||
};
|
|
||||||
|
|
||||||
const FTexture::Span FBackdropTexture::DummySpan[2] = { { 0, 160 }, { 0, 0 } };
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
FBackdropTexture::FBackdropTexture()
|
|
||||||
{
|
|
||||||
Width = 144;
|
|
||||||
Height = 160;
|
|
||||||
WidthBits = 8;
|
|
||||||
HeightBits = 8;
|
|
||||||
WidthMask = 255;
|
|
||||||
LastRenderTic = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < COS_SIZE; ++i)
|
|
||||||
{
|
|
||||||
costab[i] = uint32_t(cos(i * (M_PI / (COS_SIZE / 2))) * 65536);
|
|
||||||
}
|
|
||||||
|
|
||||||
time1 = DEGREES(180);
|
|
||||||
time2 = DEGREES(56);
|
|
||||||
time3 = DEGREES(99);
|
|
||||||
time4 = DEGREES(1);
|
|
||||||
t1ang = DEGREES(90);
|
|
||||||
t2ang = 0;
|
|
||||||
z1ang = 0;
|
|
||||||
z2ang = DEGREES(45);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
bool FBackdropTexture::CheckModified()
|
|
||||||
{
|
|
||||||
return LastRenderTic != gametic;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
const BYTE *FBackdropTexture::GetColumn(unsigned int column, const Span **spans_out)
|
|
||||||
{
|
|
||||||
if (LastRenderTic != gametic)
|
|
||||||
{
|
|
||||||
Render();
|
|
||||||
}
|
|
||||||
column = clamp(column, 0u, 143u);
|
|
||||||
if (spans_out != NULL)
|
|
||||||
{
|
|
||||||
*spans_out = DummySpan;
|
|
||||||
}
|
|
||||||
return Pixels + column*160;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
const BYTE *FBackdropTexture::GetPixels()
|
|
||||||
{
|
|
||||||
if (LastRenderTic != gametic)
|
|
||||||
{
|
|
||||||
Render();
|
|
||||||
}
|
|
||||||
return Pixels;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
// This is one plasma and two rotozoomers. I think it turned out quite awesome.
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
void FBackdropTexture::Render()
|
|
||||||
{
|
|
||||||
BYTE *from;
|
|
||||||
int width, height, pitch;
|
|
||||||
|
|
||||||
width = 160;
|
|
||||||
height = 144;
|
|
||||||
pitch = width;
|
|
||||||
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
const DWORD a1add = DEGREES(0.5);
|
|
||||||
const DWORD a2add = DEGREES(359);
|
|
||||||
const DWORD a3add = DEGREES(5 / 7.f);
|
|
||||||
const DWORD a4add = DEGREES(358.66666);
|
|
||||||
|
|
||||||
const DWORD t1add = DEGREES(358);
|
|
||||||
const DWORD t2add = DEGREES(357.16666);
|
|
||||||
const DWORD t3add = DEGREES(2.285);
|
|
||||||
const DWORD t4add = DEGREES(359.33333);
|
|
||||||
const DWORD x1add = 5 * 524288;
|
|
||||||
const DWORD x2add = 0u - 13 * 524288;
|
|
||||||
const DWORD z1add = 3 * 524288;
|
|
||||||
const DWORD z2add = 4 * 524288;
|
|
||||||
|
|
||||||
|
|
||||||
DWORD a1, a2, a3, a4;
|
|
||||||
SDWORD c1, c2, c3, c4;
|
|
||||||
DWORD tx, ty, tc, ts;
|
|
||||||
DWORD ux, uy, uc, us;
|
|
||||||
DWORD ltx, lty, lux, luy;
|
|
||||||
|
|
||||||
from = Pixels;
|
|
||||||
|
|
||||||
a3 = time3;
|
|
||||||
a4 = time4;
|
|
||||||
|
|
||||||
double z1 = (cos(TORAD(z2ang)) / 4 + 0.5) * (0x8000000);
|
|
||||||
double z2 = (cos(TORAD(z1ang)) / 4 + 0.75) * (0x8000000);
|
|
||||||
|
|
||||||
tc = SDWORD(cos(TORAD(t1ang)) * z1);
|
|
||||||
ts = SDWORD(sin(TORAD(t1ang)) * z1);
|
|
||||||
uc = SDWORD(cos(TORAD(t2ang)) * z2);
|
|
||||||
us = SDWORD(sin(TORAD(t2ang)) * z2);
|
|
||||||
|
|
||||||
ltx = -width / 2 * tc;
|
|
||||||
lty = -width / 2 * ts;
|
|
||||||
lux = -width / 2 * uc;
|
|
||||||
luy = -width / 2 * us;
|
|
||||||
|
|
||||||
for (y = 0; y < height; ++y)
|
|
||||||
{
|
|
||||||
a1 = time1;
|
|
||||||
a2 = time2;
|
|
||||||
c3 = SDWORD(cos(TORAD(a3)) * 65536.0);
|
|
||||||
c4 = SDWORD(cos(TORAD(a4)) * 65536.0);
|
|
||||||
tx = ltx - (y - height / 2)*ts;
|
|
||||||
ty = lty + (y - height / 2)*tc;
|
|
||||||
ux = lux - (y - height / 2)*us;
|
|
||||||
uy = luy + (y - height / 2)*uc;
|
|
||||||
for (x = 0; x < width; ++x)
|
|
||||||
{
|
|
||||||
c1 = costab[a1 >> ANGLESHIFT];
|
|
||||||
c2 = costab[a2 >> ANGLESHIFT];
|
|
||||||
from[x] = ((c1 + c2 + c3 + c4) >> (16 + 3 - 7)) + 128 // plasma
|
|
||||||
+ pattern1[(tx >> 27) + ((ty >> 22) & 992)] // rotozoomer 1
|
|
||||||
+ pattern2[(ux >> 27) + ((uy >> 22) & 992)]; // rotozoomer 2
|
|
||||||
tx += tc;
|
|
||||||
ty += ts;
|
|
||||||
ux += uc;
|
|
||||||
uy += us;
|
|
||||||
a1 += a1add;
|
|
||||||
a2 += a2add;
|
|
||||||
}
|
|
||||||
a3 += a3add;
|
|
||||||
a4 += a4add;
|
|
||||||
from += pitch;
|
|
||||||
}
|
|
||||||
|
|
||||||
time1 += t1add;
|
|
||||||
time2 += t2add;
|
|
||||||
time3 += t3add;
|
|
||||||
time4 += t4add;
|
|
||||||
t1ang += x1add;
|
|
||||||
t2ang += x2add;
|
|
||||||
z1ang += z1add;
|
|
||||||
z2ang += z2add;
|
|
||||||
|
|
||||||
LastRenderTic = gametic;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
@ -364,7 +69,8 @@ DListMenuItemPlayerDisplay::DListMenuItemPlayerDisplay(DListMenuDescriptor *menu
|
||||||
bdremap->Remap[i] = ColorMatcher.Pick (r, g, b);
|
bdremap->Remap[i] = ColorMatcher.Pick (r, g, b);
|
||||||
bdremap->Palette[i] = PalEntry(255, r, g, b);
|
bdremap->Palette[i] = PalEntry(255, r, g, b);
|
||||||
}
|
}
|
||||||
mBackdrop = new FBackdropTexture;
|
auto id = TexMan.CheckForTexture("PlayerBackdrop", FTexture::TEX_MiscPatch);
|
||||||
|
mBackdrop = TexMan[id];
|
||||||
mPlayerClass = NULL;
|
mPlayerClass = NULL;
|
||||||
mPlayerState = NULL;
|
mPlayerState = NULL;
|
||||||
mNoportrait = np;
|
mNoportrait = np;
|
||||||
|
@ -386,7 +92,6 @@ DListMenuItemPlayerDisplay::DListMenuItemPlayerDisplay(DListMenuDescriptor *menu
|
||||||
|
|
||||||
void DListMenuItemPlayerDisplay::OnDestroy()
|
void DListMenuItemPlayerDisplay::OnDestroy()
|
||||||
{
|
{
|
||||||
delete mBackdrop;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
|
@ -7747,6 +7747,7 @@ FxExpression *FxMemberFunctionCall::Resolve(FCompileContext& ctx)
|
||||||
if (MethodName == NAME_Size)
|
if (MethodName == NAME_Size)
|
||||||
{
|
{
|
||||||
FxExpression *x = new FxMemberIdentifier(Self, NAME_Size, ScriptPosition); // todo: obfuscate the name to prevent direct access.
|
FxExpression *x = new FxMemberIdentifier(Self, NAME_Size, ScriptPosition); // todo: obfuscate the name to prevent direct access.
|
||||||
|
Self->ValueType = static_cast<PDynArray*>(Self->ValueType)->BackingType;
|
||||||
Self = nullptr;
|
Self = nullptr;
|
||||||
delete this;
|
delete this;
|
||||||
return x->Resolve(ctx);
|
return x->Resolve(ctx);
|
||||||
|
|
|
@ -54,6 +54,8 @@
|
||||||
#include "p_checkposition.h"
|
#include "p_checkposition.h"
|
||||||
#include "r_sky.h"
|
#include "r_sky.h"
|
||||||
#include "v_font.h"
|
#include "v_font.h"
|
||||||
|
#include "v_video.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
|
||||||
static TArray<FPropertyInfo*> properties;
|
static TArray<FPropertyInfo*> properties;
|
||||||
static TArray<AFuncDesc> AFTable;
|
static TArray<AFuncDesc> AFTable;
|
||||||
|
@ -841,6 +843,34 @@ void InitThingdef()
|
||||||
fieldptr = new PField("intermissionfont", fontptr, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&IntermissionFont);
|
fieldptr = new PField("intermissionfont", fontptr, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&IntermissionFont);
|
||||||
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanXFac", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanXfac);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanYFac", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanYfac);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanWidth", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanWidth);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanHeight", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanHeight);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanXFac_1", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanXfac_1);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanYFac_1", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanYfac_1);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanWidth_1", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanWidth_1);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("CleanHeight_1", TypeSInt32, VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&CleanHeight_1);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
fieldptr = new PField("OptionMenuSettings", NewStruct("FOptionMenuSettings", nullptr), VARF_Native | VARF_Static | VARF_ReadOnly, (intptr_t)&OptionSettings);
|
||||||
|
Namespaces.GlobalNamespace->Symbols.AddSymbol(fieldptr);
|
||||||
|
|
||||||
|
|
||||||
// Argh. It sucks when bad hacks need to be supported. WP_NOCHANGE is just a bogus pointer but it used everywhere as a special flag.
|
// Argh. It sucks when bad hacks need to be supported. WP_NOCHANGE is just a bogus pointer but it used everywhere as a special flag.
|
||||||
// It cannot be defined as constant because constants can either be numbers or strings but nothing else, so the only 'solution'
|
// It cannot be defined as constant because constants can either be numbers or strings but nothing else, so the only 'solution'
|
||||||
// is to create a static variable from it and reference that in the script. Yuck!!!
|
// is to create a static variable from it and reference that in the script. Yuck!!!
|
||||||
|
|
|
@ -69,7 +69,7 @@ static FString GetStringConst(FxExpression *ex, FCompileContext &ctx)
|
||||||
{
|
{
|
||||||
ex = new FxStringCast(ex);
|
ex = new FxStringCast(ex);
|
||||||
ex = ex->Resolve(ctx);
|
ex = ex->Resolve(ctx);
|
||||||
return static_cast<FxConstant*>(ex)->GetValue().GetString();
|
return ex ? static_cast<FxConstant*>(ex)->GetValue().GetString() : FString();
|
||||||
}
|
}
|
||||||
|
|
||||||
int ZCCCompiler::IntConstFromNode(ZCC_TreeNode *node, PStruct *cls)
|
int ZCCCompiler::IntConstFromNode(ZCC_TreeNode *node, PStruct *cls)
|
||||||
|
|
361
src/textures/backdroptexture.cpp
Normal file
361
src/textures/backdroptexture.cpp
Normal file
|
@ -0,0 +1,361 @@
|
||||||
|
/*
|
||||||
|
** backdroptexture.cpp
|
||||||
|
** The player display background for the player setup and class selection screen
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 1999-2010 Randy Heit
|
||||||
|
** Copyright 2010 Christoph Oelckers
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "doomtype.h"
|
||||||
|
#include "doomstat.h"
|
||||||
|
#include "d_player.h"
|
||||||
|
#include "templates.h"
|
||||||
|
#include "menu/menu.h"
|
||||||
|
#include "colormatcher.h"
|
||||||
|
#include "textures/textures.h"
|
||||||
|
#include "w_wad.h"
|
||||||
|
#include "v_font.h"
|
||||||
|
#include "v_video.h"
|
||||||
|
#include "g_level.h"
|
||||||
|
#include "gi.h"
|
||||||
|
#include "r_defs.h"
|
||||||
|
#include "r_state.h"
|
||||||
|
#include "r_data/r_translate.h"
|
||||||
|
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
// Used by the player display
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
struct FBackdropTexture : public FTexture
|
||||||
|
{
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
COS_SIZE = 256,
|
||||||
|
ANGLESHIFT = 24
|
||||||
|
};
|
||||||
|
|
||||||
|
static constexpr uint32_t DEGREES(double v)
|
||||||
|
{
|
||||||
|
return uint32_t((v)*(0x40000000 / 90.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
static double TORAD(uint32_t x)
|
||||||
|
{
|
||||||
|
return x*(M_PI / 0x80000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
FBackdropTexture();
|
||||||
|
|
||||||
|
const uint8_t *GetColumn(unsigned int column, const Span **spans_out);
|
||||||
|
const uint8_t *GetPixels();
|
||||||
|
void Unload();
|
||||||
|
bool CheckModified();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint32_t costab[COS_SIZE];
|
||||||
|
uint8_t *Pixels;
|
||||||
|
static const Span DummySpan[2];
|
||||||
|
int LastRenderTic;
|
||||||
|
|
||||||
|
uint32_t time1, time2, time3, time4;
|
||||||
|
uint32_t t1ang, t2ang, z1ang, z2ang;
|
||||||
|
|
||||||
|
void Render();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// A 32x32 cloud rendered with Photoshop, plus some other filters
|
||||||
|
static uint8_t pattern1[1024] =
|
||||||
|
{
|
||||||
|
5, 9, 7,10, 9,15, 9, 7, 8,10, 5, 3, 5, 7, 9, 8,14, 8, 4, 7, 8, 9, 5, 7,14, 7, 0, 7,13,13, 9, 6,
|
||||||
|
2, 7, 9, 7, 7,10, 8, 8,11,10, 6, 7,10, 7, 5, 6, 6, 4, 7,13,15,16,11,15,11, 8, 0, 4,13,22,17,11,
|
||||||
|
5, 9, 9, 7, 9,10, 4, 3, 6, 7, 8, 6, 5, 4, 2, 2, 1, 4, 6,11,15,15,14,13,17, 9, 5, 9,11,12,17,20,
|
||||||
|
9,16, 9, 8,12,13, 7, 3, 7, 9, 5, 4, 2, 5, 5, 5, 7,11, 6, 7, 6,13,17,10,10, 9,12,17,14,12,16,15,
|
||||||
|
15,13, 5, 3, 9,10, 4,10,12,12, 7, 9, 8, 8, 8,10, 7, 6, 5, 5, 5, 6,11, 9, 3,13,16,18,21,16,23,18,
|
||||||
|
23,13, 0, 0, 0, 0, 0,12,18,14,15,16,13, 7, 7, 5, 9, 6, 6, 8, 4, 0, 0, 0, 0,14,19,17,14,20,21,25,
|
||||||
|
19,20,14,13, 7, 5,13,19,14,13,17,15,14, 7, 3, 5, 6,11, 7, 7, 8, 8,10, 9, 9,18,17,15,14,15,18,16,
|
||||||
|
16,29,24,23,18, 9,17,20,11, 5,12,15,15,12, 6, 3, 4, 6, 7,10,13,18,18,19,16,12,17,19,23,16,14,14,
|
||||||
|
9,18,20,26,19, 5,18,18,10, 5,12,15,14,17,11, 6,11, 9,10,13,10,20,24,20,21,20,14,18,15,22,20,19,
|
||||||
|
0, 6,16,18, 8, 7,15,18,10,13,17,17,13,11,15,11,19,12,13,10, 4,15,19,21,21,24,14, 9,17,20,24,17,
|
||||||
|
18,17, 7, 7,16,21,22,15, 5,14,20,14,13,21,13, 8,12,14, 7, 8,11,15,13,11,16,17, 7, 5,12,17,19,14,
|
||||||
|
25,23,17,16,23,18,15, 7, 0, 6,11, 6,11,15,11, 7,12, 7, 4,10,16,13, 7, 7,15,13, 9,15,21,14, 5, 0,
|
||||||
|
18,22,21,21,21,22,12, 6,14,20,15, 6,10,19,13, 8, 7, 3, 7,12,14,16, 9,12,22,15,12,18,24,19,17, 9,
|
||||||
|
0,15,18,21,17,25,14,13,19,21,21,11, 6,13,16,16,12,10,12,11,13,20,14,13,18,13, 9,15,16,25,31,20,
|
||||||
|
5,20,24,16, 7,14,14,11,18,19,19, 6, 0, 5,11,14,17,16,19,14,15,21,19,15,14,14, 8, 0, 7,24,18,16,
|
||||||
|
9,17,15, 7, 6,14,12, 7,14,16,11, 4, 7, 6,13,16,15,13,12,20,21,20,21,17,18,26,14, 0,13,23,21,11,
|
||||||
|
9,12,18,11,15,21,13, 8,13,13,10, 7,13, 8, 8,19,13, 7, 4,15,19,18,14,12,14,15, 8, 6,16,22,22,15,
|
||||||
|
9,17,14,19,15,14,15, 9,11, 9, 6, 8,14,13,13,12, 5, 0, 0, 6,12,13, 7, 7, 9, 7, 0,12,21,16,15,18,
|
||||||
|
15,16,18,11, 6, 8,15, 9, 2, 0, 5,10,10,16, 9, 0, 4,12,15, 9,12, 9, 7, 7,12, 7, 0, 6,12, 6, 9,13,
|
||||||
|
12,19,15,14,11, 7, 8, 9,12,10, 5, 5, 7,12,12,10,14,16,16,11, 8,12,10,12,10, 8,10,10,14,12,16,16,
|
||||||
|
16,17,20,22,12,15,12,14,19,11, 6, 5,10,13,17,17,21,19,15, 9, 6, 9,15,18,10,10,18,14,20,15,16,17,
|
||||||
|
11,19,19,18,19,14,17,13,12,12, 7,11,18,17,16,15,19,19,10, 2, 0, 8,15,12, 8,11,12,10,19,20,19,19,
|
||||||
|
6,14,18,13,13,16,16,12, 5, 8,10,12,10,13,18,12, 9,10, 7, 6, 5,11, 8, 6, 7,13,16,13,10,15,20,14,
|
||||||
|
0, 5,12,12, 4, 0, 9,16, 9,10,12, 8, 0, 9,13, 9, 0, 2, 4, 7,10, 6, 7, 3, 4,11,16,18,10,11,21,21,
|
||||||
|
16,13,11,15, 8, 0, 5, 9, 8, 7, 6, 3, 0, 9,17, 9, 0, 0, 0, 3, 5, 4, 3, 5, 7,15,16,16,17,14,22,22,
|
||||||
|
24,14,15,12, 9, 0, 5,10, 8, 4, 7,12,10,11,12, 7, 6, 8, 6, 5, 7, 8, 8,11,13,10,15,14,12,18,20,16,
|
||||||
|
16,17,17,18,12, 9,12,16,10, 5, 6,20,13,15, 8, 4, 8, 9, 8, 7, 9,11,12,17,16,16,11,10, 9,10, 5, 0,
|
||||||
|
0,14,18,18,15,16,14, 9,10, 9, 9,15,14,10, 4, 6,10, 8, 8, 7,10, 9,10,16,18,10, 0, 0, 7,12,10, 8,
|
||||||
|
0,14,19,14, 9,11,11, 8, 8,10,15, 9,10, 7, 4,10,13, 9, 7, 5, 5, 7, 7, 7,13,13, 5, 5,14,22,18,16,
|
||||||
|
0,10,14,10, 3, 6, 5, 6, 8, 9, 8, 9, 5, 9, 8, 9, 6, 8, 8, 8, 1, 0, 0, 0, 9,17,12,12,17,19,20,13,
|
||||||
|
6,11,17,11, 5, 5, 8,10, 6, 5, 6, 6, 3, 7, 9, 7, 6, 8,12,10, 4, 8, 6, 6,11,16,16,15,16,17,17,16,
|
||||||
|
11, 9,10,10, 5, 6,12,10, 5, 1, 6,10, 5, 3, 3, 5, 4, 7,15,10, 7,13, 7, 8,15,11,15,15,15, 8,11,15,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Just a 32x32 cloud rendered with the standard Photoshop filter
|
||||||
|
static uint8_t pattern2[1024] =
|
||||||
|
{
|
||||||
|
9, 9, 8, 8, 8, 8, 6, 6,13,13,11,21,19,21,23,18,23,24,19,19,24,17,18,12, 9,14, 8,12,12, 5, 8, 6,
|
||||||
|
11,10, 6, 7, 8, 8, 9,13,10,11,17,15,23,22,23,22,20,26,27,26,17,21,20,14,12, 8,11, 8,11, 7, 8, 7,
|
||||||
|
6, 9,13,13,10, 9,13, 7,12,13,16,19,16,20,22,25,22,25,27,22,21,23,15,10,14,14,15,13,12, 8,12, 6,
|
||||||
|
6, 7,12,12,12,16, 9,12,12,15,16,11,21,24,19,24,23,26,28,27,26,21,14,15, 7, 7,10,15,12,11,10, 9,
|
||||||
|
7,14,11,16,12,18,16,14,16,14,11,14,15,21,23,17,20,18,26,24,27,18,20,11,11,14,10,17,17,10, 6,10,
|
||||||
|
13, 9,14,10,13,11,14,15,18,15,15,12,19,19,20,18,22,20,19,22,19,19,19,20,17,15,15,11,16,14,10, 8,
|
||||||
|
13,16,12,16,17,19,17,18,15,19,14,18,15,14,15,17,21,19,23,18,23,22,18,18,17,15,15,16,12,12,15,10,
|
||||||
|
10,12,14,10,16,11,18,15,21,20,20,17,18,19,16,19,14,20,19,14,19,25,22,21,22,24,18,12, 9, 9, 8, 6,
|
||||||
|
10,10,13, 9,15,13,20,19,22,18,18,17,17,21,21,13,13,12,19,18,16,17,27,26,22,23,20,17,12,11, 8, 9,
|
||||||
|
7,13,14,15,11,13,18,22,19,23,23,20,22,24,21,14,12,16,17,19,18,18,22,18,24,23,19,17,16,14, 8, 7,
|
||||||
|
12,12, 8, 8,16,20,26,25,28,28,22,29,23,22,21,18,13,16,15,15,20,17,25,24,19,17,17,17,15,10, 8, 9,
|
||||||
|
7,12,15,11,17,20,25,25,25,29,30,31,28,26,18,16,17,18,20,21,22,20,23,19,18,19,10,16,16,11,11, 8,
|
||||||
|
5, 6, 8,14,14,17,17,21,27,23,27,31,27,22,23,21,19,19,21,19,20,19,17,22,13,17,12,15,10,10,12, 6,
|
||||||
|
8, 9, 8,14,15,16,15,18,27,26,23,25,23,22,18,21,20,17,19,20,20,16,20,14,15,13,12, 8, 8, 7,11,13,
|
||||||
|
7, 6,11,11,11,13,15,22,25,24,26,22,24,26,23,18,24,24,20,18,20,16,17,12,12,12,10, 8,11, 9, 6, 8,
|
||||||
|
9,10, 9, 6, 5,14,16,19,17,21,26,20,23,19,19,17,20,21,26,25,23,21,17,13,12, 5,13,11, 7,12,10,12,
|
||||||
|
6, 5, 4,10,11, 9,10,13,17,20,20,18,23,26,27,20,21,24,20,19,24,20,18,10,11, 3, 6,13, 9, 6, 8, 8,
|
||||||
|
1, 2, 2,11,13,13,11,16,16,16,19,21,20,23,22,28,21,20,19,18,23,16,18, 7, 5, 9, 7, 6, 5,10, 8, 8,
|
||||||
|
0, 0, 6, 9,11,15,12,12,19,18,19,26,22,24,26,30,23,22,22,16,20,19,12,12, 3, 4, 6, 5, 4, 7, 2, 4,
|
||||||
|
2, 0, 0, 7,11, 8,14,13,15,21,26,28,25,24,27,26,23,24,22,22,15,17,12, 8,10, 7, 7, 4, 0, 5, 0, 1,
|
||||||
|
1, 2, 0, 1, 9,14,13,10,19,24,22,29,30,28,30,30,31,23,24,19,17,14,13, 8, 8, 8, 1, 4, 0, 0, 0, 3,
|
||||||
|
5, 2, 4, 2, 9, 8, 8, 8,18,23,20,27,30,27,31,25,28,30,28,24,24,15,11,14,10, 3, 4, 3, 0, 0, 1, 3,
|
||||||
|
9, 3, 4, 3, 5, 6, 8,13,14,23,21,27,28,27,28,27,27,29,30,24,22,23,13,15, 8, 6, 2, 0, 4, 3, 4, 1,
|
||||||
|
6, 5, 5, 3, 9, 3, 6,14,13,16,23,26,28,23,30,31,28,29,26,27,21,20,15,15,13, 9, 1, 0, 2, 0, 5, 8,
|
||||||
|
8, 4, 3, 7, 2, 0,10, 7,10,14,21,21,29,28,25,27,30,28,25,24,27,22,19,13,10, 5, 0, 0, 0, 0, 0, 7,
|
||||||
|
7, 6, 7, 0, 2, 2, 5, 6,15,11,19,24,22,29,27,31,30,30,31,28,23,18,14,14, 7, 5, 0, 0, 1, 0, 1, 0,
|
||||||
|
5, 5, 5, 0, 0, 4, 5,11, 7,10,13,20,21,21,28,31,28,30,26,28,25,21, 9,12, 3, 3, 0, 2, 2, 2, 0, 1,
|
||||||
|
3, 3, 0, 2, 0, 3, 5, 3,11,11,16,19,19,27,26,26,30,27,28,26,23,22,16, 6, 2, 2, 3, 2, 0, 2, 4, 0,
|
||||||
|
0, 0, 0, 3, 3, 1, 0, 4, 5, 9,11,16,24,20,28,26,28,24,28,25,22,21,16, 5, 7, 5, 7, 3, 2, 3, 3, 6,
|
||||||
|
0, 0, 2, 0, 2, 0, 4, 3, 8,12, 9,17,16,23,23,27,27,22,26,22,21,21,13,14, 5, 3, 7, 3, 2, 4, 6, 1,
|
||||||
|
2, 5, 6, 4, 0, 1, 5, 8, 7, 6,15,17,22,20,24,28,23,25,20,21,18,16,13,15,13,10, 8, 5, 5, 9, 3, 7,
|
||||||
|
7, 7, 0, 5, 1, 6, 7, 9,12, 9,12,21,22,25,24,22,23,25,24,18,24,22,17,13,10, 9,10, 9, 6,11, 6, 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
const FTexture::Span FBackdropTexture::DummySpan[2] = { { 0, 160 }, { 0, 0 } };
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
FBackdropTexture::FBackdropTexture()
|
||||||
|
{
|
||||||
|
Pixels = nullptr;
|
||||||
|
Width = 144;
|
||||||
|
Height = 160;
|
||||||
|
WidthBits = 8;
|
||||||
|
HeightBits = 8;
|
||||||
|
WidthMask = 255;
|
||||||
|
LastRenderTic = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < COS_SIZE; ++i)
|
||||||
|
{
|
||||||
|
costab[i] = uint32_t(cos(i * (M_PI / (COS_SIZE / 2))) * 65536);
|
||||||
|
}
|
||||||
|
|
||||||
|
time1 = DEGREES(180);
|
||||||
|
time2 = DEGREES(56);
|
||||||
|
time3 = DEGREES(99);
|
||||||
|
time4 = DEGREES(1);
|
||||||
|
t1ang = DEGREES(90);
|
||||||
|
t2ang = 0;
|
||||||
|
z1ang = 0;
|
||||||
|
z2ang = DEGREES(45);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
bool FBackdropTexture::CheckModified()
|
||||||
|
{
|
||||||
|
return LastRenderTic != gametic;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FBackdropTexture::Unload()
|
||||||
|
{
|
||||||
|
if (Pixels != nullptr) delete[] Pixels;
|
||||||
|
Pixels = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
const uint8_t *FBackdropTexture::GetColumn(unsigned int column, const Span **spans_out)
|
||||||
|
{
|
||||||
|
if (LastRenderTic != gametic)
|
||||||
|
{
|
||||||
|
Render();
|
||||||
|
}
|
||||||
|
column = clamp(column, 0u, 143u);
|
||||||
|
if (spans_out != nullptr)
|
||||||
|
{
|
||||||
|
*spans_out = DummySpan;
|
||||||
|
}
|
||||||
|
return Pixels + column*160;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
const uint8_t *FBackdropTexture::GetPixels()
|
||||||
|
{
|
||||||
|
if (LastRenderTic != gametic)
|
||||||
|
{
|
||||||
|
Render();
|
||||||
|
}
|
||||||
|
return Pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
// This is one plasma and two rotozoomers. I think it turned out quite awesome.
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
void FBackdropTexture::Render()
|
||||||
|
{
|
||||||
|
uint8_t *from;
|
||||||
|
int width, height, pitch;
|
||||||
|
|
||||||
|
if (Pixels == nullptr) Pixels = new uint8_t[160 * 144];
|
||||||
|
width = 160;
|
||||||
|
height = 144;
|
||||||
|
pitch = width;
|
||||||
|
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
const DWORD a1add = DEGREES(0.5);
|
||||||
|
const DWORD a2add = DEGREES(359);
|
||||||
|
const DWORD a3add = DEGREES(5 / 7.f);
|
||||||
|
const DWORD a4add = DEGREES(358.66666);
|
||||||
|
|
||||||
|
const DWORD t1add = DEGREES(358);
|
||||||
|
const DWORD t2add = DEGREES(357.16666);
|
||||||
|
const DWORD t3add = DEGREES(2.285);
|
||||||
|
const DWORD t4add = DEGREES(359.33333);
|
||||||
|
const DWORD x1add = 5 * 524288;
|
||||||
|
const DWORD x2add = 0u - 13 * 524288;
|
||||||
|
const DWORD z1add = 3 * 524288;
|
||||||
|
const DWORD z2add = 4 * 524288;
|
||||||
|
|
||||||
|
|
||||||
|
DWORD a1, a2, a3, a4;
|
||||||
|
SDWORD c1, c2, c3, c4;
|
||||||
|
DWORD tx, ty, tc, ts;
|
||||||
|
DWORD ux, uy, uc, us;
|
||||||
|
DWORD ltx, lty, lux, luy;
|
||||||
|
|
||||||
|
from = Pixels;
|
||||||
|
|
||||||
|
a3 = time3;
|
||||||
|
a4 = time4;
|
||||||
|
|
||||||
|
double z1 = (cos(TORAD(z2ang)) / 4 + 0.5) * (0x8000000);
|
||||||
|
double z2 = (cos(TORAD(z1ang)) / 4 + 0.75) * (0x8000000);
|
||||||
|
|
||||||
|
tc = SDWORD(cos(TORAD(t1ang)) * z1);
|
||||||
|
ts = SDWORD(sin(TORAD(t1ang)) * z1);
|
||||||
|
uc = SDWORD(cos(TORAD(t2ang)) * z2);
|
||||||
|
us = SDWORD(sin(TORAD(t2ang)) * z2);
|
||||||
|
|
||||||
|
ltx = -width / 2 * tc;
|
||||||
|
lty = -width / 2 * ts;
|
||||||
|
lux = -width / 2 * uc;
|
||||||
|
luy = -width / 2 * us;
|
||||||
|
|
||||||
|
for (y = 0; y < height; ++y)
|
||||||
|
{
|
||||||
|
a1 = time1;
|
||||||
|
a2 = time2;
|
||||||
|
c3 = SDWORD(cos(TORAD(a3)) * 65536.0);
|
||||||
|
c4 = SDWORD(cos(TORAD(a4)) * 65536.0);
|
||||||
|
tx = ltx - (y - height / 2)*ts;
|
||||||
|
ty = lty + (y - height / 2)*tc;
|
||||||
|
ux = lux - (y - height / 2)*us;
|
||||||
|
uy = luy + (y - height / 2)*uc;
|
||||||
|
for (x = 0; x < width; ++x)
|
||||||
|
{
|
||||||
|
c1 = costab[a1 >> ANGLESHIFT];
|
||||||
|
c2 = costab[a2 >> ANGLESHIFT];
|
||||||
|
from[x] = ((c1 + c2 + c3 + c4) >> (16 + 3 - 7)) + 128 // plasma
|
||||||
|
+ pattern1[(tx >> 27) + ((ty >> 22) & 992)] // rotozoomer 1
|
||||||
|
+ pattern2[(ux >> 27) + ((uy >> 22) & 992)]; // rotozoomer 2
|
||||||
|
tx += tc;
|
||||||
|
ty += ts;
|
||||||
|
ux += uc;
|
||||||
|
uy += us;
|
||||||
|
a1 += a1add;
|
||||||
|
a2 += a2add;
|
||||||
|
}
|
||||||
|
a3 += a3add;
|
||||||
|
a4 += a4add;
|
||||||
|
from += pitch;
|
||||||
|
}
|
||||||
|
|
||||||
|
time1 += t1add;
|
||||||
|
time2 += t2add;
|
||||||
|
time3 += t3add;
|
||||||
|
time4 += t4add;
|
||||||
|
t1ang += x1add;
|
||||||
|
t2ang += x2add;
|
||||||
|
z1ang += z1add;
|
||||||
|
z2ang += z2add;
|
||||||
|
|
||||||
|
LastRenderTic = gametic;
|
||||||
|
}
|
||||||
|
|
||||||
|
FTexture *GetBackdropTexture()
|
||||||
|
{
|
||||||
|
auto t = new FBackdropTexture;
|
||||||
|
t->Name = "PlayerBackdrop";
|
||||||
|
return t;
|
||||||
|
}
|
|
@ -976,6 +976,7 @@ void FTextureManager::SortTexturesByType(int start, int end)
|
||||||
// FTextureManager :: Init
|
// FTextureManager :: Init
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
FTexture *GetBackdropTexture();
|
||||||
|
|
||||||
void FTextureManager::Init()
|
void FTextureManager::Init()
|
||||||
{
|
{
|
||||||
|
@ -987,6 +988,7 @@ void FTextureManager::Init()
|
||||||
|
|
||||||
// Texture 0 is a dummy texture used to indicate "no texture"
|
// Texture 0 is a dummy texture used to indicate "no texture"
|
||||||
AddTexture (new FDummyTexture);
|
AddTexture (new FDummyTexture);
|
||||||
|
AddTexture(GetBackdropTexture());
|
||||||
|
|
||||||
int wadcnt = Wads.GetNumWads();
|
int wadcnt = Wads.GetNumWads();
|
||||||
for(int i = 0; i< wadcnt; i++)
|
for(int i = 0; i< wadcnt; i++)
|
||||||
|
|
|
@ -468,12 +468,15 @@ static void ListEnd(VMVa_List &tags)
|
||||||
|
|
||||||
int ListGetInt(VMVa_List &tags)
|
int ListGetInt(VMVa_List &tags)
|
||||||
{
|
{
|
||||||
if (tags.curindex < tags.numargs && tags.args[tags.curindex].Type == REGT_INT)
|
if (tags.curindex < tags.numargs)
|
||||||
{
|
{
|
||||||
return tags.args[tags.curindex++].i;
|
if (tags.args[tags.curindex].Type == REGT_INT)
|
||||||
|
{
|
||||||
|
return tags.args[tags.curindex++].i;
|
||||||
|
}
|
||||||
|
ThrowAbortException(X_OTHER, "Invalid parameter in draw function, int expected");
|
||||||
}
|
}
|
||||||
ThrowAbortException(X_OTHER, "Invalid parameter in draw function, int expected");
|
return TAG_DONE;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline double ListGetDouble(VMVa_List &tags)
|
static inline double ListGetDouble(VMVa_List &tags)
|
||||||
|
@ -1384,18 +1387,18 @@ void DCanvas::Clear (int left, int top, int right, int bottom, int palcolor, uin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
DEFINE_ACTION_FUNCTION(_Screen, Clear)
|
||||||
//
|
{
|
||||||
// no-ops. This is so that renderer backends can better manage the
|
PARAM_PROLOGUE;
|
||||||
// processing of the subsector drawing in the automap
|
PARAM_INT(x1);
|
||||||
//
|
PARAM_INT(y1);
|
||||||
//==========================================================================
|
PARAM_INT(x2);
|
||||||
|
PARAM_INT(y2);
|
||||||
void DCanvas::StartSimplePolys()
|
PARAM_INT(color);
|
||||||
{}
|
PARAM_INT_DEF(palcol);
|
||||||
|
screen->Clear(x1, y1, x2, y2, palcol, color);
|
||||||
void DCanvas::FinishSimplePolys()
|
return 0;
|
||||||
{}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
|
|
@ -853,6 +853,12 @@ DEFINE_ACTION_FUNCTION(FFont, GetCharWidth)
|
||||||
ACTION_RETURN_INT(self->GetCharWidth(code));
|
ACTION_RETURN_INT(self->GetCharWidth(code));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_ACTION_FUNCTION(FFont, GetHeight)
|
||||||
|
{
|
||||||
|
PARAM_SELF_STRUCT_PROLOGUE(FFont);
|
||||||
|
ACTION_RETURN_INT(self->GetHeight());
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// Find string width using this font
|
// Find string width using this font
|
||||||
|
|
|
@ -40,7 +40,7 @@ class DCanvas;
|
||||||
struct FRemapTable;
|
struct FRemapTable;
|
||||||
class FTexture;
|
class FTexture;
|
||||||
|
|
||||||
enum EColorRange
|
enum EColorRange : int
|
||||||
{
|
{
|
||||||
CR_UNDEFINED = -1,
|
CR_UNDEFINED = -1,
|
||||||
CR_BRICK,
|
CR_BRICK,
|
||||||
|
@ -67,7 +67,6 @@ enum EColorRange
|
||||||
CR_DARKGRAY,
|
CR_DARKGRAY,
|
||||||
CR_CYAN,
|
CR_CYAN,
|
||||||
NUM_TEXT_COLORS,
|
NUM_TEXT_COLORS,
|
||||||
FORCE_DWORD = 0x7fffffff // required for script access.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int NumTextColors;
|
extern int NumTextColors;
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
|
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
#include "templates.h"
|
#include "templates.h"
|
||||||
|
#include "gstrings.h"
|
||||||
|
|
||||||
int ListGetInt(VMVa_List &tags);
|
int ListGetInt(VMVa_List &tags);
|
||||||
|
|
||||||
|
@ -239,7 +240,8 @@ DEFINE_ACTION_FUNCTION(_Screen, DrawText)
|
||||||
PARAM_STRING(chr);
|
PARAM_STRING(chr);
|
||||||
|
|
||||||
VMVa_List args = { param + 5, 0, numparam - 5 };
|
VMVa_List args = { param + 5, 0, numparam - 5 };
|
||||||
screen->DrawText(font, cr, x, y, chr, args);
|
const char *txt = chr[0] == '$' ? GStrings(chr) : chr.GetChars();
|
||||||
|
screen->DrawText(font, cr, x, y, txt, args);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -229,9 +229,6 @@ public:
|
||||||
// Fill an area with a texture
|
// Fill an area with a texture
|
||||||
virtual void FlatFill (int left, int top, int right, int bottom, FTexture *src, bool local_origin=false);
|
virtual void FlatFill (int left, int top, int right, int bottom, FTexture *src, bool local_origin=false);
|
||||||
|
|
||||||
virtual void StartSimplePolys();
|
|
||||||
virtual void FinishSimplePolys();
|
|
||||||
|
|
||||||
// Fill a simple polygon with a texture
|
// Fill a simple polygon with a texture
|
||||||
virtual void FillSimplePoly(FTexture *tex, FVector2 *points, int npoints,
|
virtual void FillSimplePoly(FTexture *tex, FVector2 *points, int npoints,
|
||||||
double originx, double originy, double scalex, double scaley, DAngle rotation,
|
double originx, double originy, double scalex, double scaley, DAngle rotation,
|
||||||
|
|
|
@ -103,6 +103,32 @@ enum DrawTextureTags
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Screen native
|
struct Screen native
|
||||||
|
{
|
||||||
|
int CleanWidth, CleanHeight;
|
||||||
|
int CleanXFac, CleanYFac;
|
||||||
|
int CleanWidth_1, CleanHeight_1;
|
||||||
|
int CleanXFac_1, CleanYFac_1;
|
||||||
|
|
||||||
|
native static Color PaletteColor(int index);
|
||||||
|
native static int GetWidth();
|
||||||
|
native static int GetHeight();
|
||||||
|
native static void Clear(int left, int top, int right, int bottom, Color color, int palcolor = -1);
|
||||||
|
|
||||||
|
native static void DrawHUDTexture(TextureID tex, double x, double y);
|
||||||
|
native static vararg void DrawTexture(TextureID tex, bool animate, double x, double y, ...);
|
||||||
|
native static vararg void DrawChar(Font font, int normalcolor, double x, double y, int character, ...);
|
||||||
|
native static vararg void DrawText(Font font, int normalcolor, double x, double y, String text, ...);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class BrokenLines : Object native
|
||||||
|
{
|
||||||
|
native int Count();
|
||||||
|
native int StringWidth(int line);
|
||||||
|
native String StringAt(int line);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Font native
|
||||||
{
|
{
|
||||||
enum EColorRange
|
enum EColorRange
|
||||||
{
|
{
|
||||||
|
@ -133,27 +159,10 @@ struct Screen native
|
||||||
NUM_TEXT_COLORS
|
NUM_TEXT_COLORS
|
||||||
};
|
};
|
||||||
|
|
||||||
native static Color PaletteColor(int index);
|
|
||||||
native static int GetWidth();
|
|
||||||
native static int GetHeight();
|
|
||||||
native static void DrawHUDTexture(TextureID tex, double x, double y);
|
|
||||||
native static vararg void DrawTexture(TextureID tex, bool animate, double x, double y, ...);
|
|
||||||
native static vararg void DrawChar(Font font, int normalcolor, double x, double y, int character, ...);
|
|
||||||
native static vararg void DrawText(Font font, int normalcolor, double x, double y, String text, ...);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class BrokenLines : Object native
|
|
||||||
{
|
|
||||||
native int Count();
|
|
||||||
native int StringWidth(int line);
|
|
||||||
native String StringAt(int line);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Font native
|
|
||||||
{
|
|
||||||
native int GetCharWidth(int code);
|
native int GetCharWidth(int code);
|
||||||
native int StringWidth(String code);
|
native int StringWidth(String code);
|
||||||
|
native int GetHeight();
|
||||||
|
|
||||||
native static int FindFontColor(Name color);
|
native static int FindFontColor(Name color);
|
||||||
native static Font FindFont(Name fontname);
|
native static Font FindFont(Name fontname);
|
||||||
native static Font GetFont(Name fontname);
|
native static Font GetFont(Name fontname);
|
||||||
|
@ -173,6 +182,9 @@ struct DamageTypeDefinition native
|
||||||
|
|
||||||
struct CVar native
|
struct CVar native
|
||||||
{
|
{
|
||||||
|
native int GetInt();
|
||||||
|
native double GetFloat();
|
||||||
|
native String GetString();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct GameInfoStruct native
|
struct GameInfoStruct native
|
||||||
|
@ -200,6 +212,7 @@ class Object native
|
||||||
native static bool S_ChangeMusic(String music_name, int order = 0, bool looping = true, bool force = false);
|
native static bool S_ChangeMusic(String music_name, int order = 0, bool looping = true, bool force = false);
|
||||||
native static uint BAM(double angle);
|
native static uint BAM(double angle);
|
||||||
native static void SetMusicVolume(float vol);
|
native static void SetMusicVolume(float vol);
|
||||||
|
native static uint MSTime();
|
||||||
|
|
||||||
native Name GetClassName();
|
native Name GetClassName();
|
||||||
native void Destroy();
|
native void Destroy();
|
||||||
|
|
|
@ -1,3 +1,36 @@
|
||||||
|
/*
|
||||||
|
** colorpickermenu.txt
|
||||||
|
** The color picker menu
|
||||||
|
**
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
** Copyright 2010-2017 Christoph Oelckers
|
||||||
|
** All rights reserved.
|
||||||
|
**
|
||||||
|
** Redistribution and use in source and binary forms, with or without
|
||||||
|
** modification, are permitted provided that the following conditions
|
||||||
|
** are met:
|
||||||
|
**
|
||||||
|
** 1. Redistributions of source code must retain the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer.
|
||||||
|
** 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
** notice, this list of conditions and the following disclaimer in the
|
||||||
|
** documentation and/or other materials provided with the distribution.
|
||||||
|
** 3. The name of the author may not be used to endorse or promote products
|
||||||
|
** derived from this software without specific prior written permission.
|
||||||
|
**
|
||||||
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**---------------------------------------------------------------------------
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
class ColorpickerMenu : Menu native
|
class ColorpickerMenu : Menu native
|
||||||
{
|
{
|
||||||
|
@ -98,5 +131,130 @@ class ColorpickerMenu : Menu native
|
||||||
return Super.MenuEvent(mkey, fromcontroller);
|
return Super.MenuEvent(mkey, fromcontroller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
override bool MouseEvent(int type, int mx, int my)
|
||||||
|
{
|
||||||
|
int olditem = mDesc.mSelectedItem;
|
||||||
|
bool res = Super.MouseEvent(type, mx, my);
|
||||||
|
|
||||||
|
if (mDesc.mSelectedItem == -1 || mDesc.mSelectedItem == mStartItem+7)
|
||||||
|
{
|
||||||
|
int y = (-mDesc.mPosition + BigFont.GetHeight() + mDesc.mItems.Size() * OptionMenuSettings.mLinespacing) * CleanYfac_1;
|
||||||
|
int h = (screen.GetHeight() - y) / 16;
|
||||||
|
int fh = OptionMenuSettings.mLinespacing * CleanYfac_1;
|
||||||
|
int w = fh;
|
||||||
|
int yy = y + 2 * CleanYfac_1;
|
||||||
|
int indent = (screen.GetWidth() / 2);
|
||||||
|
|
||||||
|
if (h > fh) h = fh;
|
||||||
|
else if (h < 4) return res; // no space to draw it.
|
||||||
|
|
||||||
|
int box_y = y - 2 * CleanYfac_1;
|
||||||
|
int box_x = indent - 16*w;
|
||||||
|
|
||||||
|
if (mx >= box_x && mx < box_x + 16*w && my >= box_y && my < box_y + 16*h)
|
||||||
|
{
|
||||||
|
int cell_x = (mx - box_x) / w;
|
||||||
|
int cell_y = (my - box_y) / h;
|
||||||
|
|
||||||
|
if (olditem != mStartItem+7 || cell_x != mGridPosX || cell_y != mGridPosY)
|
||||||
|
{
|
||||||
|
mGridPosX = cell_x;
|
||||||
|
mGridPosY = cell_y;
|
||||||
|
//S_Sound (CHAN_VOICE | CHAN_UI, "menu/cursor", snd_menuvolume, ATTN_NONE);
|
||||||
|
}
|
||||||
|
mDesc.mSelectedItem = mStartItem+7;
|
||||||
|
if (type == MOUSE_Release)
|
||||||
|
{
|
||||||
|
MenuEvent(MKEY_Enter, true);
|
||||||
|
if (m_use_mouse == 2) mDesc.mSelectedItem = -1;
|
||||||
|
}
|
||||||
|
res = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
override void Drawer()
|
||||||
|
{
|
||||||
|
Super.Drawer();
|
||||||
|
|
||||||
|
if (mCVar == null) return;
|
||||||
|
int y = (-mDesc.mPosition + BigFont.GetHeight() + mDesc.mItems.Size() * OptionMenuSettings.mLinespacing) * CleanYfac_1;
|
||||||
|
int fh = OptionMenuSettings.mLinespacing * CleanYfac_1;
|
||||||
|
int h = (screen.GetHeight() - y) / 16;
|
||||||
|
int w = fh;
|
||||||
|
int yy = y;
|
||||||
|
|
||||||
|
if (h > fh) h = fh;
|
||||||
|
else if (h < 4) return; // no space to draw it.
|
||||||
|
|
||||||
|
int indent = (screen.GetWidth() / 2);
|
||||||
|
int p = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
int box_x, box_y;
|
||||||
|
int x1;
|
||||||
|
|
||||||
|
box_y = y - 2 * CleanYfac_1;
|
||||||
|
box_x = indent - 16*w;
|
||||||
|
for (x1 = 0; x1 < 16; ++x1)
|
||||||
|
{
|
||||||
|
screen.Clear (box_x, box_y, box_x + w, box_y + h, 0, p);
|
||||||
|
if ((mDesc.mSelectedItem == mStartItem+7) &&
|
||||||
|
(/*p == CurrColorIndex ||*/ (i == mGridPosY && x1 == mGridPosX)))
|
||||||
|
{
|
||||||
|
int r, g, b;
|
||||||
|
Color col;
|
||||||
|
double blinky;
|
||||||
|
if (i == mGridPosY && x1 == mGridPosX)
|
||||||
|
{
|
||||||
|
r = 255; g = 128; b = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = 200; g = 200; b = 255;
|
||||||
|
}
|
||||||
|
// Make sure the cursors stand out against similar colors
|
||||||
|
// by pulsing them.
|
||||||
|
blinky = abs(sin(MSTime()/1000.0)) * 0.5 + 0.5;
|
||||||
|
col = Color(255, int(r*blinky), int(g*blinky), int(b*blinky));
|
||||||
|
|
||||||
|
screen.Clear (box_x, box_y, box_x + w, box_y + 1, col);
|
||||||
|
screen.Clear (box_x, box_y + h-1, box_x + w, box_y + h, col);
|
||||||
|
screen.Clear (box_x, box_y, box_x + 1, box_y + h, col);
|
||||||
|
screen.Clear (box_x + w - 1, box_y, box_x + w, box_y + h, col);
|
||||||
|
}
|
||||||
|
box_x += w;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
y += h;
|
||||||
|
}
|
||||||
|
y = yy;
|
||||||
|
color newColor = Color(255, int(mRed), int(mGreen), int(mBlue));
|
||||||
|
color oldColor = mCVar.GetInt() | 0xFF000000;
|
||||||
|
|
||||||
|
int x = screen.GetWidth()*2/3;
|
||||||
|
|
||||||
|
screen.Clear (x, y, x + 48*CleanXfac_1, y + 48*CleanYfac_1, oldColor);
|
||||||
|
screen.Clear (x + 48*CleanXfac_1, y, x + 48*2*CleanXfac_1, y + 48*CleanYfac_1, newColor);
|
||||||
|
|
||||||
|
y += 49*CleanYfac_1;
|
||||||
|
screen.DrawText (SmallFont, Font.CR_GRAY, x+(24-SmallFont.StringWidth("Old")/2)*CleanXfac_1, y, "Old", DTA_CleanNoMove_1, true);
|
||||||
|
screen.DrawText (SmallFont, Font.CR_WHITE, x+(48+24-SmallFont.StringWidth("New")/2)*CleanXfac_1, y, "New", DTA_CleanNoMove_1, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,30 +1,39 @@
|
||||||
|
|
||||||
enum EMenuKey
|
|
||||||
{
|
|
||||||
MKEY_Up,
|
|
||||||
MKEY_Down,
|
|
||||||
MKEY_Left,
|
|
||||||
MKEY_Right,
|
|
||||||
MKEY_PageUp,
|
|
||||||
MKEY_PageDown,
|
|
||||||
MKEY_Enter,
|
|
||||||
MKEY_Back,
|
|
||||||
MKEY_Clear,
|
|
||||||
NUM_MKEYS,
|
|
||||||
|
|
||||||
// These are not buttons but events sent from other menus
|
|
||||||
|
|
||||||
MKEY_Input,
|
|
||||||
MKEY_Abort,
|
|
||||||
MKEY_MBYes,
|
|
||||||
MKEY_MBNo,
|
|
||||||
}
|
|
||||||
|
|
||||||
class Menu : Object native
|
class Menu : Object native
|
||||||
{
|
{
|
||||||
|
enum EMenuKey
|
||||||
|
{
|
||||||
|
MKEY_Up,
|
||||||
|
MKEY_Down,
|
||||||
|
MKEY_Left,
|
||||||
|
MKEY_Right,
|
||||||
|
MKEY_PageUp,
|
||||||
|
MKEY_PageDown,
|
||||||
|
MKEY_Enter,
|
||||||
|
MKEY_Back,
|
||||||
|
MKEY_Clear,
|
||||||
|
NUM_MKEYS,
|
||||||
|
|
||||||
|
// These are not buttons but events sent from other menus
|
||||||
|
|
||||||
|
MKEY_Input,
|
||||||
|
MKEY_Abort,
|
||||||
|
MKEY_MBYes,
|
||||||
|
MKEY_MBNo,
|
||||||
|
}
|
||||||
|
|
||||||
|
enum EMenuMouse
|
||||||
|
{
|
||||||
|
MOUSE_Click,
|
||||||
|
MOUSE_Move,
|
||||||
|
MOUSE_Release
|
||||||
|
};
|
||||||
|
|
||||||
//native static int MenuTime();
|
//native static int MenuTime();
|
||||||
|
|
||||||
native virtual bool MenuEvent (int mkey, bool fromcontroller);
|
native virtual bool MenuEvent (int mkey, bool fromcontroller);
|
||||||
|
native virtual bool MouseEvent(int type, int mx, int my);
|
||||||
|
native virtual void Drawer();
|
||||||
|
|
||||||
void MenuSound(Sound snd)
|
void MenuSound(Sound snd)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue