171 lines
3 KiB
C++
171 lines
3 KiB
C++
/***
|
|
*
|
|
* Copyright (c) 2016-2019 Marco 'eukara' Hladik. All rights reserved.
|
|
*
|
|
* See the file LICENSE attached with the sources for usage details.
|
|
*
|
|
****/
|
|
|
|
enum {
|
|
BTN_NEWGAME,
|
|
BTN_RESUMEGAME,
|
|
BTN_TRAINING,
|
|
BTN_CONFIG,
|
|
BTN_LOADGAME,
|
|
BTN_SAVELOAD,
|
|
BTN_README,
|
|
BTN_QUIT,
|
|
BTN_MULTIPLAYER,
|
|
BTN_EASY,
|
|
BTN_MEDIUM,
|
|
BTN_DIFFICULT,
|
|
BTN_SAVEGAME,
|
|
BTN_LOADGAME2,
|
|
BTN_CANCEL,
|
|
BTN_OPTIONS,
|
|
BTN_VIDEO,
|
|
BTN_AUDIO,
|
|
BTN_CONTROLS,
|
|
BTN_DONE,
|
|
BTN_QUICKSTART,
|
|
BTN_DEFAULTS,
|
|
BTN_OK,
|
|
BTN_VIDEOOPTIONS,
|
|
BTN_VIDEOMODES,
|
|
BTN_ADVCONTROLS,
|
|
BTN_ORDER,
|
|
BTN_DELETE,
|
|
BTN_INTERNET,
|
|
BTN_IRCCHAT,
|
|
BTN_LAN,
|
|
BTN_CUSTOMIZE,
|
|
BTN_SKIP,
|
|
BTN_EXIT,
|
|
BTN_CONNECT,
|
|
BTN_REFRESH,
|
|
BTN_FILTER1,
|
|
BTN_FILTER2,
|
|
BTN_CREATE,
|
|
BTN_CREATEGAME,
|
|
BTN_CHATROOMS,
|
|
BTN_LISTROOMS,
|
|
BTN_SEARCH,
|
|
BTN_SERVERS,
|
|
BTN_JOIN,
|
|
BTN_FIND,
|
|
BTN_CREATEROOM,
|
|
BTN_JOINGAME,
|
|
BTN_SEARCHGAMES,
|
|
BTN_FINDGAME,
|
|
BTN_STARTGAME,
|
|
BTN_GAMEINFO,
|
|
BTN_UPDATELIST,
|
|
BTN_ADDSERVER,
|
|
BTN_DISCONNECT,
|
|
BTN_CONSOLE,
|
|
BTN_CONTENTCONTROL,
|
|
BTN_UPDATE,
|
|
BTN_VISITFRAGNET,
|
|
BTN_PREVIEWS,
|
|
BTN_ADVOPTIONS,
|
|
BTN_3DINFO,
|
|
BTN_CUSTOMGAME,
|
|
BTN_ACTIVATE,
|
|
BTN_INSTALL,
|
|
BTN_VISITWEB,
|
|
BTN_REFRESHLIST,
|
|
BTN_DEACTIVATE,
|
|
BTN_SPECTATEGAME,
|
|
BTN_SPECTATEGAMES
|
|
};
|
|
|
|
class CMainButton:CWidget
|
|
{
|
|
int m_bitmap;
|
|
float m_alpha;
|
|
int m_hover;
|
|
int m_click;
|
|
virtual void() m_execute = 0;
|
|
|
|
int m_length;
|
|
|
|
void() CMainButton;
|
|
virtual void() Draw;
|
|
virtual void(float type, float x, float y, float devid) Input;
|
|
|
|
virtual void(int i) SetImage;
|
|
virtual void(int i) SetLength;
|
|
virtual void(void() vFunc) SetExecute;
|
|
};
|
|
|
|
void CMainButton::CMainButton(void)
|
|
{
|
|
m_alpha = 1.0f;
|
|
m_length = 156;
|
|
}
|
|
|
|
void CMainButton::Draw(void)
|
|
{
|
|
if (!m_execute) {
|
|
drawsubpic([g_menuofs[0]+m_x,g_menuofs[1]+m_y], [156,26], g_bmp[0],
|
|
[0,(m_bitmap * 3) * g_btnofs], [1,g_btnofs], [1,1,1], 0.75f, 1);
|
|
return;
|
|
}
|
|
if (m_click) {
|
|
drawsubpic([g_menuofs[0]+m_x,g_menuofs[1]+m_y], [156,26], g_bmp[0],
|
|
[0,((m_bitmap * 3)+2) * g_btnofs], [1,g_btnofs],
|
|
[1,1,1], 1.0f, 1);
|
|
return;
|
|
}
|
|
drawsubpic([g_menuofs[0]+m_x,g_menuofs[1]+m_y], [156,26], g_bmp[0],
|
|
[0,(m_bitmap * 3) * g_btnofs], [1,g_btnofs], [1,1,1], 1.0f, 1);
|
|
|
|
drawsubpic([g_menuofs[0]+m_x,g_menuofs[1]+m_y], [156,26], g_bmp[0],
|
|
[0,((m_bitmap * 3)+1) * g_btnofs], [1,g_btnofs],
|
|
[1,1,1], 1 - m_alpha, 1);
|
|
|
|
if (m_hover) {
|
|
m_alpha -= frametime * 16;
|
|
} else {
|
|
m_alpha += frametime * 2;
|
|
}
|
|
|
|
m_alpha = bound(0.0f, m_alpha, 1.0f);
|
|
}
|
|
|
|
void CMainButton::Input(float type, float x, float y, float devid)
|
|
{
|
|
if (Util_CheckMouse(m_x, m_y, m_length, 26) == TRUE) {
|
|
m_hover = TRUE;
|
|
} else {
|
|
m_hover = FALSE;
|
|
}
|
|
|
|
if (m_hover && type == IE_KEYDOWN && x == K_MOUSE1) {
|
|
localsound("../media/launch_select2.wav");
|
|
m_click = TRUE;
|
|
}
|
|
|
|
if (type == IE_KEYUP && x == K_MOUSE1) {
|
|
if (m_click) {
|
|
if (m_execute) {
|
|
m_execute();
|
|
}
|
|
m_click = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CMainButton::SetImage(int i)
|
|
{
|
|
m_bitmap = i;
|
|
}
|
|
void CMainButton::SetLength(int i)
|
|
{
|
|
m_length = i;
|
|
}
|
|
|
|
void CMainButton::SetExecute(void() vFunc)
|
|
{
|
|
m_execute = vFunc;
|
|
}
|