2 GaNDyPaC:
Я не могу понять какой файл создавать и куда кидать на сервер или клиент
вот то что в файл нуно всунуть
Я не могу понять какой файл создавать и куда кидать на сервер или клиент
вот то что в файл нуно всунуть
Код:
// m_iState: 0 = Нет нажатия
// 1 = Нажато 1 раз
// 2 = Нажато дважды
// 3 = Готово к использованию
struct TapData_s
{
TapData_s( int key = 0, float dmin = 0, float dmax = 0 )
:m_nKey(key), m_iState(0),
m_flPressTime1(gpGlobals->curtime),
m_flPressTime2(gpGlobals->curtime+1),
m_flDelayBetweenPressesMin(dmin),
m_flDelayBetweenPressesMax(dmax)
{}
int m_iState;
int m_nKey;
float m_flPressTime1;
float m_flPressTime2;
float m_flDelayBetweenPressesMin;
float m_flDelayBetweenPressesMax;
};
class CTapHandler
{
public:
CTapHandler(){ }
~CTapHandler(){ m_vpTapDataList.PurgeAndDeleteElements(); }
void AddKeyToTrackList( const int &nKey, const float &flTimeToPressTwiceMin, const float &flTimeToPressTwiceMax )
{
bool noMatches = true; // Lolmen : Проверка на наличие такой клавиши в списке
FOR_EACH_VEC( m_vpTapDataList, i )
{
if ( m_vpTapDataList[ i ]->m_nKey == nKey )
{
noMathces = false;
break;
}
}
if ( noMatches )
m_vpTapDataList.AddToTail( new TapData(nKey, flTimeToPressTwiceMin, flTimeToPressTwiceMax) );
}
void HandleKeysTaps( const CBasePlayer *pPlayer )
{
if (!pPlayer)
return;
FOR_EACH_VEC( m_vpTapDataList, i )
{
TapData_s *pCurTap = m_vpTapDataList[ i ];
switch( pCurTap->m_iState )
{
case 0:
{ // Lolmen : Первое нажатие игроком
if ( pPlayer->m_afButtonPressed & pCurTap->m_nKey )
{
pCurTap->m_iState = 1;
pCurTap->m_flPressTime1 = gpGlobals->curtime;
}
}
break;
case 1:
{ // Lolmen : Второе нажатие игроком
if ( pPlayer->m_afButtonPressed & pCurTap->m_nKey )
{
pCurTap->m_iState = 2;
pCurTap->m_flPressTime2 = gpGlobals->curtime;
}
}
break;
case 2:
{
float dt = pCurTap->m_flPressTime2 - pCurTap->m_flPressTime1;
// Lolmen : Больше наше dt или равно минимальному времени нажатия,
// или же, меньше, а может и равно максимальному времени?
if ( dt >= pCurTap->m_flDelayBetweenPressesMin && dt <= pCurTap->m_flDelayBetweenPressesMax )
pCurTap->m_iState = 3;
else
{ // Lolmen : Если не прокатило сбрасываем статус на начало
pCurTap->m_iState = 1;
pCurTap->m_flPressTime1 = gpGlobals->curtime;
}
}
break;
default:
{ // Lolmen : На следующем кадре опять сбрасываем статус, если достигнут результ
if ( pCurTap->m_iState >= 3 )
{
pCurTap->m_iState = 1;
pCurTap->m_flPressTime1 = gpGlobals->curtime;
}
}
}
}
}
void Update( void )
{ // Lolmen : Покадровый обновитель
CBasePlayer *pPlayer = UTIL_GetLocalPlayer();
if ( pPlayer != NULL )
{
HandleKeysTaps( pPlayer );
}
}
// Эта функция вернёт true только 1 раз за кадр
bool KeyPressedTwice( const int &nKey )
{
FOR_EACH_VEC( m_vpTapDataList, i )
{
TapData_s *pCurTap = m_vpTapDataList[ i ];
if ( pCurTap->m_nKey == nKey && pCurTap->m_iState >= 3 )
return true;
}
return false;
}
private:
CUtlVector< TapData_s* > m_vpTapDataList;
};
Останнє редагування: