XPlor/libs/xassets/xmenudef.h
2025-08-17 13:14:17 -04:00

314 lines
6.1 KiB
C++

#ifndef XMENUDEF_H
#define XMENUDEF_H
#include "qcolor.h"
#include "xsoundalias.h"
#include "xasset.h"
#include "xsoundaliaslist.h"
class XMaterial;
struct XRectDef
{
float x;
float y;
float w;
float h;
int horzAlign;
int vertAlign;
};
struct XWindowDef
{
const char *name;
XRectDef rect;
XRectDef rectClient;
const char *group;
int style;
int border;
int ownerDraw;
int ownerDrawFlags;
float borderSize;
int staticFlags;
int dynamicFlags[4];
int nextTime;
float foreColor[4];
float backColor[4];
float borderColor[4];
float outlineColor[4];
XMaterial *background;
};
struct XItemKeyHandler
{
int key;
const char *action;
XItemKeyHandler *next;
};
enum XOperationEnum : __int32
{
OP_NOOP = 0x0,
OP_RIGHTPAREN = 0x1,
OP_MULTIPLY = 0x2,
OP_DIVIDE = 0x3,
OP_MODULUS = 0x4,
OP_ADD = 0x5,
OP_SUBTRACT = 0x6,
OP_NOT = 0x7,
OP_LESSTHAN = 0x8,
OP_LESSTHANEQUALTO = 0x9,
OP_GREATERTHAN = 0xA,
OP_GREATERTHANEQUALTO = 0xB,
OP_EQUALS = 0xC,
OP_NOTEQUAL = 0xD,
OP_AND = 0xE,
OP_OR = 0xF,
OP_LEFTPAREN = 0x10,
OP_COMMA = 0x11,
OP_BITWISEAND = 0x12,
OP_BITWISEOR = 0x13,
OP_BITWISENOT = 0x14,
OP_BITSHIFTLEFT = 0x15,
OP_BITSHIFTRIGHT = 0x16,
OP_SIN = 0x17,
OP_FIRSTFUNCTIONCALL = 0x17,
OP_COS = 0x18,
OP_MIN = 0x19,
OP_MAX = 0x1A,
OP_MILLISECONDS = 0x1B,
OP_DVARINT = 0x1C,
OP_DVARBOOL = 0x1D,
OP_DVARFLOAT = 0x1E,
OP_DVARSTRING = 0x1F,
OP_STAT = 0x20,
OP_UIACTIVE = 0x21,
OP_FLASHBANGED = 0x22,
OP_SCOPED = 0x23,
OP_SCOREBOARDVISIBLE = 0x24,
OP_INKILLCAM = 0x25,
OP_PLAYERFIELD = 0x26,
OP_SELECTINGLOCATION = 0x27,
OP_TEAMFIELD = 0x28,
OP_OTHERTEAMFIELD = 0x29,
OP_MARINESFIELD = 0x2A,
OP_OPFORFIELD = 0x2B,
OP_MENUISOPEN = 0x2C,
OP_WRITINGDATA = 0x2D,
OP_INLOBBY = 0x2E,
OP_INPRIVATEPARTY = 0x2F,
OP_PRIVATEPARTYHOST = 0x30,
OP_PRIVATEPARTYHOSTINLOBBY = 0x31,
OP_ALONEINPARTY = 0x32,
OP_ADSJAVELIN = 0x33,
OP_WEAPLOCKBLINK = 0x34,
OP_WEAPATTACKTOP = 0x35,
OP_WEAPATTACKDIRECT = 0x36,
OP_SECONDSASTIME = 0x37,
OP_TABLELOOKUP = 0x38,
OP_LOCALIZESTRING = 0x39,
OP_LOCALVARINT = 0x3A,
OP_LOCALVARBOOL = 0x3B,
OP_LOCALVARFLOAT = 0x3C,
OP_LOCALVARSTRING = 0x3D,
OP_TIMELEFT = 0x3E,
OP_SECONDSASCOUNTDOWN = 0x3F,
OP_GAMEMSGWNDACTIVE = 0x40,
OP_TOINT = 0x41,
OP_TOSTRING = 0x42,
OP_TOFLOAT = 0x43,
OP_GAMETYPENAME = 0x44,
OP_GAMETYPE = 0x45,
OP_GAMETYPEDESCRIPTION = 0x46,
OP_SCORE = 0x47,
OP_FRIENDSONLINE = 0x48,
OP_FOLLOWING = 0x49,
OP_STATRANGEBITSSET = 0x4A,
OP_KEYBINDING = 0x4B,
OP_ACTIONSLOTUSABLE = 0x4C,
OP_HUDFADE = 0x4D,
OP_MAXPLAYERS = 0x4E,
OP_ACCEPTINGINVITE = 0x4F,
NUM_OPERATORS = 0x50,
};
enum XExpDataType : __int32
{
VAL_INT = 0x0,
VAL_FLOAT = 0x1,
VAL_STRING = 0x2,
};
union XOperandInternalDataUnion
{
int intVal;
float floatVal;
const char *string;
};
struct XOperand
{
XExpDataType dataType;
XOperandInternalDataUnion internals;
};
union entryInternalData
{
OperationEnum op;
XOperand operand;
};
struct XExpressionEntry
{
int type;
entryInternalData data;
};
struct XStatement
{
int numEntries;
XExpressionEntry **entries;
};
struct XColumnInfo
{
int pos;
int width;
int maxChars;
int alignment;
};
struct XListBoxDef
{
int startPos[4];
int endPos[4];
int drawPadding;
float elementWidth;
float elementHeight;
int elementStyle;
int numColumns;
XColumnInfo columnInfo[16];
const char *doubleClick;
int notselectable;
int noScrollBars;
int usePaging;
float selectBorder[4];
float disableColor[4];
XMaterial *selectIcon;
};
struct XEditFieldDef
{
float minVal;
float maxVal;
float defVal;
float range;
int maxChars;
int maxCharsGotoNext;
int maxPaintChars;
int paintOffset;
};
struct XMultiDef
{
const char *dvarList[32];
const char *dvarStr[32];
float dvarValue[32];
int count;
int strDef;
};
union XItemDefData
{
XListBoxDef *listBox;
XEditFieldDef *editField;
XMultiDef *multi;
const char *enumDvarName;
void *data;
};
class XMenuDef;
struct XItemDef
{
XWindowDef window;
XRectDef textRect[4];
int type;
int dataType;
int alignment;
int fontEnum;
int textAlignMode;
float textalignx;
float textaligny;
float textscale;
int textStyle;
int gameMsgWindowIndex;
int gameMsgWindowMode;
const char *text;
int itemFlags;
XMenuDef *parent;
const char *mouseEnterText;
const char *mouseExitText;
const char *mouseEnter;
const char *mouseExit;
const char *action;
const char *onAccept;
const char *onFocus;
const char *leaveFocus;
const char *dvar;
const char *dvarTest;
XItemKeyHandler *onKey;
const char *enableDvar;
int dvarFlags;
XSoundAliasList *focusSound;
float special;
int cursorPos[4];
XItemDefData typeData;
int imageTrack;
XStatement visibleExp;
XStatement textExp;
XStatement materialExp;
XStatement rectXExp;
XStatement rectYExp;
XStatement rectWExp;
XStatement rectHExp;
XStatement forecolorAExp;
};
class XMenuDef : public XAsset
{
public:
XMenuDef();
~XMenuDef();
virtual void Clear() override;
virtual void ParseData(QDataStream *aStream) override;
private:
XWindowDef mWindow;
XString* mFont;
int mFullScreen;
int mItemCount;
int mFontIndex;
int mCursorItem[4];
int mFadeCycle;
float mFadeClamp;
float mFadeAmount;
float mFadeInAmount;
float mBlurRadius;
XString* mOnOpen;
XString* mOnClose;
XString* mOnESC;
XItemKeyHandler *mOnKey;
XStatement mVisibleExp;
XString* mAllowedBinding;
XString* mSoundName;
int mImageTrack;
QColor mFocusColor;
QColor mDisableColor;
XStatement mRectXExp;
XStatement mRectYExp;
QVector<XItemDef*> mItems;
};
#endif // XMENUDEF_H