Skip to content

Commit 9fbad1a

Browse files
committed
fixed bad key codes handling
1 parent e867233 commit 9fbad1a

File tree

8 files changed

+113
-104
lines changed

8 files changed

+113
-104
lines changed

game/History.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- ������������� ��������� ����� ������ � �������������� �������������.
66
- ���������� ������ ������� msgbox.
77
- ���������� ��������� ���������� �������.
8+
- ���������� ��������� ������������ �������� ����������.
89

910
* 1.51.2 beta
1011
- ���������� ����������� ����� ������ ������ ������.

game/src/tank/DefaultCamera.cpp

Lines changed: 78 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -11,83 +11,83 @@ DefaultCamera::DefaultCamera()
1111
{
1212
_dwTimeX = _dwTimeY = GetTickCount();
1313
}
14-
15-
void DefaultCamera::HandleMovement(float worldWidth, float worldHeight,
16-
float screenWidth, float screenHeight)
17-
{
18-
static char lastIn = 0, LastOut = 0;
19-
static float levels[] = { 0.0625f, 0.125f, 0.25f, 0.5f, 1.0f, 1.5f, 2.0f };
20-
static int level = 4;
21-
22-
if( !lastIn && g_env.envInputs.keys[DIK_PGUP] )
23-
level = __min(level+1, sizeof(levels) / sizeof(float) - 1);
24-
lastIn = g_env.envInputs.keys[DIK_PGUP];
25-
26-
if( !LastOut && g_env.envInputs.keys[DIK_PGDN] )
27-
level = __max(level-1, 0);
28-
LastOut = g_env.envInputs.keys[DIK_PGDN];
29-
30-
_zoom = levels[level];
31-
32-
bool bMove = false;
33-
DWORD dwCurTime = GetTickCount();
34-
DWORD dt = DWORD(_dt);
35-
36-
if( 0 == g_env.envInputs.mouse_x || g_env.envInputs.keys[DIK_LEFTARROW] )
37-
{
38-
bMove = true;
39-
while( dwCurTime - _dwTimeX > dt )
40-
{
41-
_pos.x -= CELL_SIZE;
42-
_dwTimeX += dt;
43-
}
44-
}
45-
else
46-
if( screenWidth - 1 == g_env.envInputs.mouse_x || g_env.envInputs.keys[DIK_RIGHTARROW] )
47-
{
48-
bMove = true;
49-
while( dwCurTime - _dwTimeX > dt )
50-
{
51-
_pos.x += CELL_SIZE;
52-
_dwTimeX += dt;
53-
}
54-
}
55-
else
56-
_dwTimeX = GetTickCount();
57-
//---------------------------------------
58-
if( 0 == g_env.envInputs.mouse_y || g_env.envInputs.keys[DIK_UPARROW] )
59-
{
60-
bMove = true;
61-
while( dwCurTime - _dwTimeY > dt )
62-
{
63-
_pos.y -= CELL_SIZE;
64-
_dwTimeY += dt;
65-
}
66-
}
67-
else
68-
if( screenHeight - 1 == g_env.envInputs.mouse_y || g_env.envInputs.keys[DIK_DOWNARROW] )
69-
{
70-
bMove = true;
71-
while( dwCurTime - _dwTimeY > dt )
72-
{
73-
_pos.y += CELL_SIZE;
74-
_dwTimeY += dt;
75-
}
76-
}
77-
else
78-
_dwTimeY = GetTickCount();
79-
//---------------------------------------
80-
if( bMove )
81-
_dt = __max(10.0f, 1.0f / (1.0f / _dt + 0.001f));
82-
else
83-
_dt = 50.0f;
84-
//------------------------------------------------------
85-
int dx = __max(0, (int) (screenWidth / _zoom - worldWidth) / 2);
86-
int dy = __max(0, (int) (screenHeight / _zoom - worldHeight) / 2);
87-
_pos.x = (float) __max(int(_pos.x), dx);
88-
_pos.x = (float) __min(int(_pos.x), int(worldWidth - screenWidth / _zoom) + dx);
89-
_pos.y = (float) __max(int(_pos.y), dy);
90-
_pos.y = (float) __min(int(_pos.y), int(worldHeight - screenHeight / _zoom) + dy);
91-
}
14+
15+
void DefaultCamera::HandleMovement(float worldWidth, float worldHeight,
16+
float screenWidth, float screenHeight)
17+
{
18+
static char lastIn = 0, LastOut = 0;
19+
static float levels[] = { 0.0625f, 0.125f, 0.25f, 0.5f, 1.0f, 1.5f, 2.0f };
20+
static int level = 4;
21+
22+
if( !lastIn && g_env.envInputs.IsKeyPressed(DIK_PGUP) )
23+
level = __min(level+1, sizeof(levels) / sizeof(float) - 1);
24+
lastIn = g_env.envInputs.IsKeyPressed(DIK_PGUP);
25+
26+
if( !LastOut && g_env.envInputs.IsKeyPressed(DIK_PGDN) )
27+
level = __max(level-1, 0);
28+
LastOut = g_env.envInputs.IsKeyPressed(DIK_PGDN);
29+
30+
_zoom = levels[level];
31+
32+
bool bMove = false;
33+
DWORD dwCurTime = GetTickCount();
34+
DWORD dt = DWORD(_dt);
35+
36+
if( 0 == g_env.envInputs.mouse_x || g_env.envInputs.IsKeyPressed(DIK_LEFTARROW) )
37+
{
38+
bMove = true;
39+
while( dwCurTime - _dwTimeX > dt )
40+
{
41+
_pos.x -= CELL_SIZE;
42+
_dwTimeX += dt;
43+
}
44+
}
45+
else
46+
if( screenWidth - 1 == g_env.envInputs.mouse_x || g_env.envInputs.IsKeyPressed(DIK_RIGHTARROW) )
47+
{
48+
bMove = true;
49+
while( dwCurTime - _dwTimeX > dt )
50+
{
51+
_pos.x += CELL_SIZE;
52+
_dwTimeX += dt;
53+
}
54+
}
55+
else
56+
_dwTimeX = GetTickCount();
57+
//---------------------------------------
58+
if( 0 == g_env.envInputs.mouse_y || g_env.envInputs.IsKeyPressed(DIK_UPARROW) )
59+
{
60+
bMove = true;
61+
while( dwCurTime - _dwTimeY > dt )
62+
{
63+
_pos.y -= CELL_SIZE;
64+
_dwTimeY += dt;
65+
}
66+
}
67+
else
68+
if( screenHeight - 1 == g_env.envInputs.mouse_y || g_env.envInputs.IsKeyPressed(DIK_DOWNARROW) )
69+
{
70+
bMove = true;
71+
while( dwCurTime - _dwTimeY > dt )
72+
{
73+
_pos.y += CELL_SIZE;
74+
_dwTimeY += dt;
75+
}
76+
}
77+
else
78+
_dwTimeY = GetTickCount();
79+
//---------------------------------------
80+
if( bMove )
81+
_dt = __max(10.0f, 1.0f / (1.0f / _dt + 0.001f));
82+
else
83+
_dt = 50.0f;
84+
//------------------------------------------------------
85+
int dx = __max(0, (int) (screenWidth / _zoom - worldWidth) / 2);
86+
int dy = __max(0, (int) (screenHeight / _zoom - worldHeight) / 2);
87+
_pos.x = (float) __max(int(_pos.x), dx);
88+
_pos.x = (float) __min(int(_pos.x), int(worldWidth - screenWidth / _zoom) + dx);
89+
_pos.y = (float) __max(int(_pos.y), dy);
90+
_pos.y = (float) __min(int(_pos.y), int(worldHeight - screenHeight / _zoom) + dy);
91+
}
9292

9393
// end of file

game/src/tank/InputManager.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ InputManager::InputManager(HWND hWnd)
99
{
1010
TRACE("init direct input");
1111

12-
ZeroMemory(g_env.envInputs.keys, sizeof(g_env.envInputs.keys));
12+
ZeroMemory(g_env.envInputs._keys, sizeof(g_env.envInputs._keys));
1313

1414
DWORD dwPriority = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND;
1515

@@ -62,10 +62,10 @@ HRESULT InputManager::InquireInputDevices()
6262
return S_OK;
6363
}
6464

65-
ZeroMemory(g_env.envInputs.keys, sizeof(g_env.envInputs.keys));
65+
ZeroMemory(g_env.envInputs._keys, sizeof(g_env.envInputs._keys));
6666
for( int i = 0; i < sizeof(data); ++i )
6767
{
68-
g_env.envInputs.keys[i] = (data[i] & 0x80) != 0;
68+
g_env.envInputs._keys[i] = (data[i] & 0x80) != 0;
6969
}
7070

7171

game/src/tank/Main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ static void RenderFrame(bool thumbnail)
126126

127127
// check if print screen key is pressed
128128
static char _oldRQ = 0;
129-
if( g_env.envInputs.keys[DIK_SYSRQ] && !_oldRQ )
129+
if( g_env.envInputs.IsKeyPressed(DIK_SYSRQ) && !_oldRQ )
130130
OnPrintScreen();
131-
_oldRQ = g_env.envInputs.keys[DIK_SYSRQ];
131+
_oldRQ = g_env.envInputs.IsKeyPressed(DIK_SYSRQ);
132132
}
133133

134134
///////////////////////////////////////////////////////////////////////////////

game/src/tank/gc/Player.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@ void GC_PlayerLocal::ReadControllerStateAndStepPredicted(VehicleState &vs, float
605605
//
606606
// lights
607607
//
608-
bool tmp = g_env.envInputs.keys[_keyLight];
608+
bool tmp = g_env.envInputs.IsKeyPressed(_keyLight);
609609
if( tmp && !_lastLightKeyState && g_conf.sv_nightmode.Get() )
610610
{
611611
PLAY(SND_LightSwitch, GetVehicle()->GetPos());
@@ -618,14 +618,14 @@ void GC_PlayerLocal::ReadControllerStateAndStepPredicted(VehicleState &vs, float
618618
//
619619
// pickup
620620
//
621-
vs._bState_AllowDrop = g_env.envInputs.keys[_keyPickup]
622-
|| ( g_env.envInputs.keys[_keyForward] && g_env.envInputs.keys[_keyBack] )
623-
|| ( g_env.envInputs.keys[_keyLeft] && g_env.envInputs.keys[_keyRight] );
621+
vs._bState_AllowDrop = g_env.envInputs.IsKeyPressed(_keyPickup)
622+
|| ( g_env.envInputs.IsKeyPressed(_keyForward) && g_env.envInputs.IsKeyPressed(_keyBack) )
623+
|| ( g_env.envInputs.IsKeyPressed(_keyLeft) && g_env.envInputs.IsKeyPressed(_keyRight) );
624624

625625
//
626626
// fire
627627
//
628-
vs._bState_Fire = g_env.envInputs.keys[_keyFire];
628+
vs._bState_Fire = g_env.envInputs.IsKeyPressed(_keyFire);
629629

630630

631631
//
@@ -634,10 +634,10 @@ void GC_PlayerLocal::ReadControllerStateAndStepPredicted(VehicleState &vs, float
634634
if( _arcadeStyle )
635635
{
636636
vec2d tmp(0, 0);
637-
if( g_env.envInputs.keys[_keyForward] ) tmp.y -= 1;
638-
if( g_env.envInputs.keys[_keyBack] ) tmp.y += 1;
639-
if( g_env.envInputs.keys[_keyLeft] ) tmp.x -= 1;
640-
if( g_env.envInputs.keys[_keyRight] ) tmp.x += 1;
637+
if( g_env.envInputs.IsKeyPressed(_keyForward) ) tmp.y -= 1;
638+
if( g_env.envInputs.IsKeyPressed(_keyBack) ) tmp.y += 1;
639+
if( g_env.envInputs.IsKeyPressed(_keyLeft) ) tmp.x -= 1;
640+
if( g_env.envInputs.IsKeyPressed(_keyRight) ) tmp.x += 1;
641641
tmp.Normalize();
642642

643643
bool move = tmp.x || tmp.y;
@@ -654,10 +654,10 @@ void GC_PlayerLocal::ReadControllerStateAndStepPredicted(VehicleState &vs, float
654654
}
655655
else
656656
{
657-
vs._bState_MoveForward = g_env.envInputs.keys[_keyForward];
658-
vs._bState_MoveBack = g_env.envInputs.keys[_keyBack ];
659-
vs._bState_RotateLeft = g_env.envInputs.keys[_keyLeft ];
660-
vs._bState_RotateRight = g_env.envInputs.keys[_keyRight ];
657+
vs._bState_MoveForward = g_env.envInputs.IsKeyPressed(_keyForward);
658+
vs._bState_MoveBack = g_env.envInputs.IsKeyPressed(_keyBack );
659+
vs._bState_RotateLeft = g_env.envInputs.IsKeyPressed(_keyLeft );
660+
vs._bState_RotateRight = g_env.envInputs.IsKeyPressed(_keyRight );
661661
}
662662

663663
if( _moveToMouse )
@@ -709,10 +709,10 @@ void GC_PlayerLocal::ReadControllerStateAndStepPredicted(VehicleState &vs, float
709709
}
710710
else
711711
{
712-
vs._bState_TowerLeft = g_env.envInputs.keys[_keyTowerLeft];
713-
vs._bState_TowerRight = g_env.envInputs.keys[_keyTowerRight];
714-
vs._bState_TowerCenter = g_env.envInputs.keys[_keyTowerCenter]
715-
|| g_env.envInputs.keys[_keyTowerLeft] && g_env.envInputs.keys[_keyTowerRight];
712+
vs._bState_TowerLeft = g_env.envInputs.IsKeyPressed(_keyTowerLeft);
713+
vs._bState_TowerRight = g_env.envInputs.IsKeyPressed(_keyTowerRight);
714+
vs._bState_TowerCenter = g_env.envInputs.IsKeyPressed(_keyTowerCenter)
715+
|| g_env.envInputs.IsKeyPressed(_keyTowerLeft) && g_env.envInputs.IsKeyPressed(_keyTowerRight);
716716
if( vs._bState_TowerCenter )
717717
{
718718
vs._bState_TowerLeft = false;

game/src/tank/globals.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,21 @@ extern SafePtr<FS::FileSystem> g_fs;
5151

5252
struct InputState
5353
{
54-
bool keys[300];
54+
bool _keys[300];
5555
int mouse_x;
5656
int mouse_y;
5757
int mouse_wheel;
5858
bool bLButtonState;
5959
bool bRButtonState;
6060
bool bMButtonState;
61+
bool IsKeyPressed(int code)
62+
{
63+
if( code > 0 && code < sizeof(_keys) / sizeof(_keys[0]) )
64+
{
65+
return _keys[code];
66+
}
67+
return false;
68+
}
6169
};
6270

6371

game/src/tank/ui/gui_scoretable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void ScoreTable::DrawChildren(const DrawingContext *dc, float sx, float sy) cons
106106

107107
void ScoreTable::OnTimeStep(float dt)
108108
{
109-
bool tab = g_env.envInputs.keys[DIK_TAB];
109+
bool tab = g_env.envInputs.IsKeyPressed(DIK_TAB);
110110
SetVisible(!g_level->IsEmpty() && !g_level->GetEditorMode() && (tab || g_level->_limitHit));
111111
}
112112

game/src/tank/ui/gui_settings.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,9 @@ void ControlProfileDlg::OnTimeStep(float dt)
345345
_time += dt;
346346
_actions->GetData()->SetItemText(_activeIndex, 1, fmodf(_time, 0.6f) > 0.3f ? "" : "...");
347347

348-
for( int k = 0; k < sizeof(g_env.envInputs.keys) / sizeof(g_env.envInputs.keys[0]); ++k )
348+
for( int k = 0; k < sizeof(g_env.envInputs._keys) / sizeof(g_env.envInputs._keys[0]); ++k )
349349
{
350-
if( g_env.envInputs.keys[k] )
350+
if( g_env.envInputs.IsKeyPressed(k) )
351351
{
352352
if( _skipNextKey )
353353
{

0 commit comments

Comments
 (0)