You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
5.7 KiB
277 lines
5.7 KiB
2 years ago
|
//---------------------------------------------------------
|
||
|
//---------------------------------------------------------
|
||
|
//- ---
|
||
|
//- vgui_keypad.cpp ---
|
||
|
//- ---
|
||
|
//---------------------------------------------------------
|
||
|
//---------------------------------------------------------
|
||
|
//- code duy keypad ---
|
||
|
//---------------------------------------------------------
|
||
|
//---------------------------------------------------------
|
||
|
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------
|
||
|
//inclusions
|
||
|
|
||
|
#include "vgui_int.h"
|
||
|
#include "VGUI_Font.h"
|
||
|
#include "VGUI_ScrollPanel.h"
|
||
|
#include "VGUI_TextImage.h"
|
||
|
#include "hud.h"
|
||
|
#include "cl_util.h"
|
||
|
#include "vgui_TeamFortressViewport.h"
|
||
|
#include "crutches.h" //Load some code crutches for HLINVASION, modif de Roy
|
||
|
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------
|
||
|
|
||
|
#define TARGA_LEFT (int)(ScreenWidth / 2) - 100
|
||
|
#define TARGA_TOP (int)(ScreenHeight / 2) - 148
|
||
|
|
||
|
#define BUTTON_X 39
|
||
|
#define BUTTON_Y 34
|
||
|
|
||
|
#define LIGNE_1 84
|
||
|
#define LIGNE_2 132
|
||
|
#define LIGNE_3 180
|
||
|
#define LIGNE_4 228
|
||
|
|
||
|
#define COLONE_1 22
|
||
|
#define COLONE_2 80
|
||
|
#define COLONE_3 139
|
||
|
|
||
|
#define QUIT_BUTTON -1
|
||
|
#define ERASE_BUTTON -2
|
||
|
|
||
|
#define DIGIT_LEFT ( TARGA_LEFT + 50 )
|
||
|
#define DIGIT_TOP ( TARGA_TOP + 28 )
|
||
|
|
||
|
#define DIGIT_WIDTH 24
|
||
|
|
||
|
//---------------------------------------------------------
|
||
|
|
||
|
class CHandler_Keypad : public InputSignal
|
||
|
{
|
||
|
private:
|
||
|
CKeypad *p;
|
||
|
int m_iX;
|
||
|
int m_iY;
|
||
|
#ifdef DOUBLECLICKFIXPATH_INVASION_VGUI
|
||
|
int skipTime = 0; //Just an integer to store double-press fix, modif de Roy
|
||
|
#endif
|
||
|
|
||
|
public:
|
||
|
CHandler_Keypad( CKeypad *pKeypad )
|
||
|
{
|
||
|
p = pKeypad;
|
||
|
}
|
||
|
|
||
|
void cursorEntered(Panel *panel) {};
|
||
|
void mouseReleased(MouseCode code,Panel* panel) {};
|
||
|
void mouseDoublePressed(MouseCode code,Panel* panel) {};
|
||
|
void cursorExited(Panel* panel) {};
|
||
|
void mouseWheeled(int delta,Panel* panel) {};
|
||
|
void keyPressed(KeyCode code,Panel* panel) {};
|
||
|
void keyTyped(KeyCode code,Panel* panel) {};
|
||
|
void keyReleased(KeyCode code,Panel* panel) {};
|
||
|
void keyFocusTicked(Panel* panel) {};
|
||
|
|
||
|
void cursorMoved(int x,int y,Panel* panel) { m_iX = x ; m_iY = y; };
|
||
|
void mousePressed(MouseCode code,Panel* panel);
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
void CHandler_Keypad :: mousePressed(MouseCode code,Panel* panel)
|
||
|
{
|
||
|
#ifdef DOUBLECLICKFIXPATH_INVASION_VGUI
|
||
|
if(skipTime>0){
|
||
|
skipTime--;
|
||
|
return;
|
||
|
}
|
||
|
skipTime = 1; //Skip every second press modif de Roy
|
||
|
#endif
|
||
|
int colone = 0;
|
||
|
int ligne = 0;
|
||
|
|
||
|
if ( m_iX > COLONE_3 && m_iX < COLONE_3 + BUTTON_X )
|
||
|
colone = 3;
|
||
|
else if ( m_iX > COLONE_2 && m_iX < COLONE_2 + BUTTON_X )
|
||
|
colone = 2;
|
||
|
else if ( m_iX > COLONE_1 && m_iX < COLONE_1 + BUTTON_X )
|
||
|
colone = 1;
|
||
|
|
||
|
if ( m_iY > LIGNE_4 && m_iY < LIGNE_4 + BUTTON_Y )
|
||
|
ligne = 4;
|
||
|
else if ( m_iY > LIGNE_3 && m_iY < LIGNE_3 + BUTTON_Y )
|
||
|
ligne = 3;
|
||
|
else if ( m_iY > LIGNE_2 && m_iY < LIGNE_2 + BUTTON_Y )
|
||
|
ligne = 2;
|
||
|
else if ( m_iY > LIGNE_1 && m_iY < LIGNE_1 + BUTTON_Y )
|
||
|
ligne = 1;
|
||
|
|
||
|
|
||
|
if ( colone != 0 && ligne != 0 )
|
||
|
{
|
||
|
int pad [4] [3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { QUIT_BUTTON, 0, ERASE_BUTTON } };
|
||
|
|
||
|
int number = pad [ligne-1] [colone-1];
|
||
|
|
||
|
|
||
|
// commandes sp
|
||
|
|
||
|
if ( number == QUIT_BUTTON )
|
||
|
{
|
||
|
/* // blip
|
||
|
gEngfuncs.pfnClientCmd("ordimenu 1" );
|
||
|
gViewPort->HideTopMenu();
|
||
|
return;
|
||
|
*/
|
||
|
/* CMenuHandler_TextWindow *pClose = new CMenuHandler_TextWindow(HIDE_TEXTWINDOW);
|
||
|
pClose->actionPerformed ( p );
|
||
|
*/
|
||
|
|
||
|
|
||
|
// p->m_pCancelButton->doClick();
|
||
|
return;
|
||
|
|
||
|
}
|
||
|
else if ( number == ERASE_BUTTON )
|
||
|
{
|
||
|
// blip
|
||
|
gEngfuncs.pfnClientCmd("ordimenu 1" );
|
||
|
p->Initialize ();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// chiffres
|
||
|
|
||
|
int pos = 0;
|
||
|
|
||
|
for ( int i=0; i<4; i++ )
|
||
|
{
|
||
|
if ( p->m_iDigit[i] != -1 )
|
||
|
pos ++;
|
||
|
else break;
|
||
|
}
|
||
|
|
||
|
// complet
|
||
|
|
||
|
if ( pos == 4 )
|
||
|
return;
|
||
|
|
||
|
// nouveau chiffre
|
||
|
|
||
|
p->m_iDigit [pos] = number;
|
||
|
|
||
|
// nouvelle image
|
||
|
|
||
|
char buf [32];
|
||
|
sprintf ( buf, "%i", number );
|
||
|
|
||
|
|
||
|
p->m_pDigit [pos]-> m_pTGA = LoadTGA(buf);
|
||
|
p->m_pDigit [pos]->setImage( p->m_pDigit [pos]->m_pTGA );
|
||
|
|
||
|
|
||
|
// contr
|
||
|
|
||
|
if ( pos == 3 )
|
||
|
{
|
||
|
int combi = p->m_iDigit[0]*1000 + p->m_iDigit[1]*100 + p->m_iDigit[2]*10 + p->m_iDigit[3];
|
||
|
|
||
|
if ( combi == p->m_iCode && combi != 0 )
|
||
|
{
|
||
|
// bonne combi
|
||
|
// blip
|
||
|
gEngfuncs.pfnClientCmd("ordimenu 1" );
|
||
|
|
||
|
char buf2[32];
|
||
|
sprintf ( buf2, "keypad %i", p->m_iEnt );
|
||
|
gEngfuncs.pfnClientCmd( buf2 );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
gEngfuncs.pfnClientCmd("keypad 0" );
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
// blip
|
||
|
gEngfuncs.pfnClientCmd("ordimenu 1" );
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
|
||
|
CKeypad :: CKeypad(int iTrans, int iRemoveMe, int x,int y,int wide,int tall) : CMenuPanel(iTrans, iRemoveMe, x,y,wide,tall)
|
||
|
{
|
||
|
// image
|
||
|
|
||
|
m_pImage = new CImageLabel( "keypad", TARGA_LEFT, TARGA_TOP );
|
||
|
m_pImage->setParent( this );
|
||
|
m_pImage->addInputSignal ( new CHandler_Keypad ( this ) );
|
||
|
|
||
|
// d
|
||
|
|
||
|
m_pCancelButton = new CommandButton( "", COLONE_1, LIGNE_4, BUTTON_X, BUTTON_Y, true );
|
||
|
m_pCancelButton->setParent ( m_pImage );
|
||
|
m_pCancelButton->setFgColor(0,0,0,255);
|
||
|
m_pCancelButton->setBgColor(0,0,0,255);
|
||
|
|
||
|
m_pCancelButton->setButtonBorderEnabled( false );
|
||
|
m_pCancelButton->setPaintBorderEnabled ( false );
|
||
|
m_pCancelButton->setPaintBackgroundEnabled( false );
|
||
|
|
||
|
m_pCancelButton->addActionSignal( new CMenuHandler_TextWindow(HIDE_TEXTWINDOW) );
|
||
|
|
||
|
|
||
|
Initialize(); // ?
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
//====================================================
|
||
|
|
||
|
|
||
|
void CKeypad::Initialize( void )
|
||
|
{
|
||
|
for (int i=0; i<4; i++ )
|
||
|
{
|
||
|
if ( m_pDigit[i] != NULL )
|
||
|
{
|
||
|
m_pDigit [i]-> m_pTGA = LoadTGA("");
|
||
|
m_pDigit [i]->setImage( m_pDigit [i]->m_pTGA );
|
||
|
}
|
||
|
|
||
|
else
|
||
|
{
|
||
|
m_pDigit [i] = new CImageLabel( "", DIGIT_LEFT + i * DIGIT_WIDTH, DIGIT_TOP );
|
||
|
m_pDigit [i]->setParent ( this );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for ( int i=0; i<4; i++ )
|
||
|
m_iDigit [i] = -1;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void CKeypad::Reset( void )
|
||
|
{
|
||
|
Initialize ();
|
||
|
|
||
|
CMenuPanel::Reset();
|
||
|
|
||
|
}
|