Skip to content

Commit a4d757d

Browse files
committed
fix #18
1 parent 0bd39b8 commit a4d757d

23 files changed

Lines changed: 271 additions & 171 deletions

src/CameraController.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ class CameraController
3131
virtual void InputEvent(MouseScrollInputEvent& inputEvent)
3232
{
3333
}
34+
virtual void InputEventLost()
35+
{
36+
}
3437

3538
public:
3639
GameCamera* mCamera = nullptr;

src/CarnageGame.cpp

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -68,29 +68,38 @@ void CarnageGame::UpdateFrame()
6868
}
6969
}
7070

71+
void CarnageGame::InputEventLost()
72+
{
73+
for (int ihuman = 0; ihuman < GAME_MAX_PLAYERS; ++ihuman)
74+
{
75+
if (mHumanSlot[ihuman].mCharPedestrian == nullptr)
76+
continue;
77+
78+
mHumanSlot[ihuman].mCharController.InputEventLost();
79+
mHumanSlot[ihuman].mCharView.InputEventLost();
80+
}
81+
}
82+
7183
void CarnageGame::InputEvent(KeyInputEvent& inputEvent)
7284
{
73-
if (inputEvent.mConsumed)
74-
return;
75-
76-
if (inputEvent.mKeycode == eKeycode_TILDE && inputEvent.mPressed) // show debug console
85+
if (inputEvent.HasPressed(eKeycode_TILDE)) // show debug console
7786
{
7887
gDebugConsoleWindow.mWindowShown = !gDebugConsoleWindow.mWindowShown;
7988
return;
8089
}
81-
if (inputEvent.mKeycode == eKeycode_F3 && inputEvent.mPressed)
90+
if (inputEvent.HasPressed(eKeycode_F3))
8291
{
8392
gRenderManager.ReloadRenderPrograms();
8493
return;
8594
}
8695

87-
if (inputEvent.mKeycode == eKeycode_ESCAPE && inputEvent.mPressed)
96+
if (inputEvent.HasPressed(eKeycode_ESCAPE))
8897
{
8998
gSystem.QuitRequest();
9099
return;
91100
}
92101

93-
if (inputEvent.mKeycode == eKeycode_C && inputEvent.mPressed)
102+
if (inputEvent.HasPressed(eKeycode_C))
94103
{
95104
gGameCheatsWindow.mWindowShown = !gGameCheatsWindow.mWindowShown;
96105
return;
@@ -103,9 +112,6 @@ void CarnageGame::InputEvent(KeyInputEvent& inputEvent)
103112

104113
mHumanSlot[ihuman].mCharController.InputEvent(inputEvent);
105114
mHumanSlot[ihuman].mCharView.InputEvent(inputEvent);
106-
107-
if (inputEvent.mConsumed)
108-
break;
109115
}
110116
}
111117

@@ -117,9 +123,6 @@ void CarnageGame::InputEvent(MouseButtonInputEvent& inputEvent)
117123
continue;
118124

119125
mHumanSlot[ihuman].mCharView.InputEvent(inputEvent);
120-
121-
if (inputEvent.mConsumed)
122-
break;
123126
}
124127
}
125128

@@ -131,9 +134,6 @@ void CarnageGame::InputEvent(MouseMovedInputEvent& inputEvent)
131134
continue;
132135

133136
mHumanSlot[ihuman].mCharView.InputEvent(inputEvent);
134-
135-
if (inputEvent.mConsumed)
136-
break;
137137
}
138138
}
139139

@@ -145,9 +145,6 @@ void CarnageGame::InputEvent(MouseScrollInputEvent& inputEvent)
145145
continue;
146146

147147
mHumanSlot[ihuman].mCharView.InputEvent(inputEvent);
148-
149-
if (inputEvent.mConsumed)
150-
break;
151148
}
152149
}
153150

@@ -163,9 +160,6 @@ void CarnageGame::InputEvent(GamepadInputEvent& inputEvent)
163160
continue;
164161

165162
mHumanSlot[ihuman].mCharController.InputEvent(inputEvent);
166-
167-
if (inputEvent.mConsumed)
168-
break;
169163
}
170164
}
171165

src/CarnageGame.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "HumanCharacterView.h"
77

88
// top level game application controller
9-
class CarnageGame final: public cxx::noncopyable
9+
class CarnageGame final: public InputEventsHandler
1010
{
1111
public:
1212
// temporary
@@ -35,12 +35,15 @@ class CarnageGame final: public cxx::noncopyable
3535

3636
// Common processing
3737
void UpdateFrame();
38-
void InputEvent(KeyInputEvent& inputEvent);
39-
void InputEvent(MouseButtonInputEvent& inputEvent);
40-
void InputEvent(MouseMovedInputEvent& inputEvent);
41-
void InputEvent(MouseScrollInputEvent& inputEvent);
42-
void InputEvent(KeyCharEvent& inputEvent);
43-
void InputEvent(GamepadInputEvent& inputEvent);
38+
39+
// override InputEventsHandler
40+
void InputEvent(KeyInputEvent& inputEvent) override;
41+
void InputEvent(MouseButtonInputEvent& inputEvent) override;
42+
void InputEvent(MouseMovedInputEvent& inputEvent) override;
43+
void InputEvent(MouseScrollInputEvent& inputEvent) override;
44+
void InputEvent(KeyCharEvent& inputEvent) override;
45+
void InputEvent(GamepadInputEvent& inputEvent) override;
46+
void InputEventLost() override;
4447

4548
// Initialize player data
4649
void SetupHumanCharacter(int playerIndex, Pedestrian* pedestrian);

src/CharacterController.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ void CharacterController::ResetControlState(Pedestrian* pedestrian)
1616
// reset control actions
1717
for (int iaction = 0; iaction < ePedestrianAction_COUNT; ++iaction)
1818
{
19-
pedestrian->mCtlActions[iaction] = false;
19+
pedestrian->mCtlState.Clear();
2020
}
2121
}
2222

src/FollowCameraController.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,7 @@ void FollowCameraController::SetFollowTarget(Pedestrian* pedestrian)
8585
{
8686
mFollowPedestrian = pedestrian;
8787
}
88+
89+
void FollowCameraController::InputEventLost()
90+
{
91+
}

src/FollowCameraController.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ class FollowCameraController final: public CameraController
2020
void InputEvent(KeyInputEvent& inputEvent) override;
2121
void InputEvent(MouseButtonInputEvent& inputEvent) override;
2222
void InputEvent(MouseMovedInputEvent& inputEvent) override;
23-
void InputEvent(MouseScrollInputEvent& inputEvent) override;
23+
void InputEvent(MouseScrollInputEvent& inputEvent) override;
24+
void InputEventLost() override;
2425

2526
private:
2627
// parameters

src/FreeLookCameraController.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,7 @@ void FreeLookCameraController::Setup(GameCamera* gameCamera)
1717
mCamera->SetTopDownOrientation();
1818
mCamera->SetPosition(cameraPosition);
1919

20-
// reset controls flags
21-
mMoveLeft = false;
22-
mMoveRight = false;
23-
mMoveForward = false;
24-
mMoveBackward = false;
25-
mMouseDragCamera = false;
20+
ClearConstrols();
2621
}
2722

2823
void FreeLookCameraController::UpdateFrame()
@@ -145,4 +140,18 @@ void FreeLookCameraController::InputEvent(MouseScrollInputEvent& inputEvent)
145140
glm::vec3 position = mCamera->mPosition;
146141
position.y = glm::max(position.y + (0.5f * -inputEvent.mScrollY), MAP_LAYERS_COUNT * 1.0f);
147142
mCamera->SetPosition(position);
148-
}
143+
}
144+
145+
void FreeLookCameraController::InputEventLost()
146+
{
147+
ClearConstrols();
148+
}
149+
150+
void FreeLookCameraController::ClearConstrols()
151+
{
152+
mMoveLeft = false;
153+
mMoveRight = false;
154+
mMoveForward = false;
155+
mMoveBackward = false;
156+
mMouseDragCamera = false;
157+
}

src/FreeLookCameraController.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ class FreeLookCameraController final: public CameraController
1717
void InputEvent(MouseButtonInputEvent& inputEvent) override;
1818
void InputEvent(MouseMovedInputEvent& inputEvent) override;
1919
void InputEvent(MouseScrollInputEvent& inputEvent) override;
20+
void InputEventLost() override;
21+
22+
private:
23+
void ClearConstrols();
2024

2125
private:
2226
bool mMoveLeft, mMoveRight;

src/GameDefs.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,22 @@ enum eProjectileType
805805
};
806806
decl_enum_strings(eProjectileType);
807807

808+
// Pedestrian control actions status
809+
struct PedestrianCtlState
810+
{
811+
public:
812+
// Reset current state
813+
inline void Clear()
814+
{
815+
for (int icurrent = 0; icurrent < ePedestrianAction_COUNT; ++icurrent)
816+
{
817+
mCtlActions[icurrent] = false;
818+
}
819+
}
820+
public:
821+
bool mCtlActions[ePedestrianAction_COUNT]; // control actions
822+
};
823+
808824
// projectile type data
809825
struct ProjectileStyle
810826
{

src/HumanCharacterController.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,18 @@ void HumanCharacterController::InputEvent(GamepadInputEvent& inputEvent)
234234
}
235235
}
236236

237+
void HumanCharacterController::InputEventLost()
238+
{
239+
if (mCharacter)
240+
{
241+
// reset actions
242+
mCharacter->mCtlState.Clear();
243+
}
244+
}
245+
237246
bool HumanCharacterController::HandleInputAction(ePedestrianAction action, bool isActivated)
238247
{
248+
PedestrianCtlState& ctlState = mCharacter->mCtlState;
239249
switch (action)
240250
{
241251
case ePedestrianAction_SteerLeft:
@@ -250,13 +260,13 @@ bool HumanCharacterController::HandleInputAction(ePedestrianAction action, bool
250260
case ePedestrianAction_Jump:
251261
case ePedestrianAction_HandBrake:
252262
case ePedestrianAction_Shoot:
253-
mCharacter->mCtlActions[action] = isActivated;
263+
ctlState.mCtlActions[action] = isActivated;
254264
break;
255265

256266
case ePedestrianAction_Horn:
257267
if (mCharacter->IsCarPassenger())
258268
{
259-
mCharacter->mCtlActions[ePedestrianAction_Horn] = isActivated;
269+
ctlState.mCtlActions[ePedestrianAction_Horn] = isActivated;
260270
if (mCharacter->mCurrentCar->HasEmergencyLightsAnimation())
261271
{
262272
mCharacter->mCurrentCar->EnableEmergencyLights(isActivated);

0 commit comments

Comments
 (0)