Skip to content

Commit 0116021

Browse files
committed
1 parent 040c039 commit 0116021

12 files changed

Lines changed: 459 additions & 174 deletions
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"player1":
3+
{
4+
"controller_type": "Keyboard",
5+
"keys":
6+
{
7+
"in_car":
8+
{
9+
"LeaveCar": "Enter",
10+
"HandBrake": "Space",
11+
"Accelerate": "Up",
12+
"Reverse": "Down",
13+
"SteerLeft": "Left",
14+
"SteerRight": "Right",
15+
"Horn": "Tab"
16+
},
17+
"on_foot":
18+
{
19+
"TurnLeft": "Left",
20+
"TurnRight": "Right",
21+
"Jump": "Space",
22+
"WalkBackward": "Down",
23+
"Run": "Up",
24+
"Shoot": "LCtrl",
25+
"NextWeapon": "x",
26+
"PrevWeapon": "z",
27+
"EnterCar": "Enter",
28+
"EnterCarAsPassenger": "f"
29+
}
30+
},
31+
"gamepad":
32+
{
33+
"in_car":
34+
{
35+
"LeaveCar": "X",
36+
"HandBrake": "Y",
37+
"Accelerate": "Up",
38+
"Reverse": "Down",
39+
"SteerLeft": "Left",
40+
"SteerRight": "Right",
41+
"Horn": "A"
42+
},
43+
"on_foot":
44+
{
45+
"TurnLeft": "Left",
46+
"TurnRight": "Right",
47+
"Jump": "LeftTrigger",
48+
"WalkBackward": "Down",
49+
"Run": "Up",
50+
"Shoot": "B",
51+
"NextWeapon": "LeftBumper",
52+
"PrevWeapon": "RightBumper",
53+
"EnterCar": "X",
54+
"EnterCarAsPassenger": "A"
55+
}
56+
}
57+
},
58+
"player2":
59+
{
60+
"controller_type": "Gamepad2"
61+
},
62+
"player3":
63+
{
64+
"controller_type": "Gamepad3"
65+
},
66+
"player4":
67+
{
68+
"controller_type": "Gamepad4"
69+
}
70+
}

src/Carnage3D.vcxproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ copy "$(SDKDIR)\glfw\lib-vc2015\glfw3.dll" "$(TargetDir)"</Command>
158158
<ClInclude Include="AiCharacterController.h" />
159159
<ClInclude Include="aux_math.h" />
160160
<ClInclude Include="Convert.h" />
161-
<ClInclude Include="InputActionsMapping.h" />
162161
<ClInclude Include="macro.h" />
163162
<ClInclude Include="MemoryManager.h" />
164163
<ClInclude Include="mem_allocators.h" />
@@ -243,7 +242,6 @@ copy "$(SDKDIR)\glfw\lib-vc2015\glfw3.dll" "$(TargetDir)"</Command>
243242
<ClCompile Include="GameObjectsManager.cpp" />
244243
<ClCompile Include="GpuBufferTexture.cpp" />
245244
<ClCompile Include="CharacterController.cpp" />
246-
<ClCompile Include="InputActionsMapping.cpp" />
247245
<ClCompile Include="MemoryManager.cpp" />
248246
<ClCompile Include="mem_allocators.cpp" />
249247
<ClCompile Include="path_utils.cpp" />
@@ -308,6 +306,7 @@ copy "$(SDKDIR)\glfw\lib-vc2015\glfw3.dll" "$(TargetDir)"</Command>
308306
</ProjectReference>
309307
</ItemGroup>
310308
<ItemGroup>
309+
<None Include="..\gamedata\config\inputs.json.default" />
311310
<None Include="..\gamedata\config\sys_config.json.default" />
312311
<None Include="..\gamedata\shaders\city_mesh.glsl" />
313312
<None Include="..\gamedata\shaders\debug.glsl" />

src/Carnage3D.vcxproj.filters

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,6 @@
304304
<ClInclude Include="TrimeshBuffer.h">
305305
<Filter>Game\Rendering</Filter>
306306
</ClInclude>
307-
<ClInclude Include="InputActionsMapping.h">
308-
<Filter>Game</Filter>
309-
</ClInclude>
310307
</ItemGroup>
311308
<ItemGroup>
312309
<ClCompile Include="stdafx.cpp">
@@ -476,9 +473,6 @@
476473
<ClCompile Include="TrimeshBuffer.cpp">
477474
<Filter>Game\Rendering</Filter>
478475
</ClCompile>
479-
<ClCompile Include="InputActionsMapping.cpp">
480-
<Filter>Game</Filter>
481-
</ClCompile>
482476
</ItemGroup>
483477
<ItemGroup>
484478
<None Include="..\gamedata\config\sys_config.json.default">
@@ -499,6 +493,9 @@
499493
<None Include="..\gamedata\shaders\texture_color.glsl">
500494
<Filter>Data\shaders</Filter>
501495
</None>
496+
<None Include="..\gamedata\config\inputs.json.default">
497+
<Filter>Data\config</Filter>
498+
</None>
502499
</ItemGroup>
503500
<ItemGroup>
504501
<Text Include="..\docs\CorrectionsToCDS.txt">

src/CarnageGame.cpp

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,20 @@
88
#include "Pedestrian.h"
99
#include "MemoryManager.h"
1010

11+
static const char* InputsConfigPath = "config/inputs.json";
12+
13+
//////////////////////////////////////////////////////////////////////////
14+
1115
CarnageGame gCarnageGame;
1216

17+
//////////////////////////////////////////////////////////////////////////
18+
1319
bool CarnageGame::Initialize()
1420
{
1521
gGameCheatsWindow.mWindowShown = true; // show by default
1622

23+
SetInputActionsFromConfig();
24+
1725
gGameRules.LoadDefaults();
1826
if (gSystem.mStartupParams.mDebugMapName.empty())
1927
{
@@ -70,7 +78,7 @@ bool CarnageGame::Initialize()
7078
}
7179

7280
mPlayerPedestrian = mObjectsManager.CreatePedestrian(pos);
73-
mHumanController.SetCharacter(mPlayerPedestrian);
81+
mHumanCharacters[0].SetCharacter(mPlayerPedestrian);
7482

7583
SetCameraController(&mFollowCameraController);
7684

@@ -115,22 +123,30 @@ void CarnageGame::InputEvent(KeyInputEvent& inputEvent)
115123
return;
116124
}
117125

118-
mHumanController.InputEvent(inputEvent);
119-
120126
if (inputEvent.mKeycode == eKeycode_ESCAPE && inputEvent.mPressed)
121127
{
122128
gSystem.QuitRequest();
129+
return;
123130
}
124131

125132
if (inputEvent.mKeycode == eKeycode_C && inputEvent.mPressed)
126133
{
127134
gGameCheatsWindow.mWindowShown = !gGameCheatsWindow.mWindowShown;
135+
return;
128136
}
129137

130138
if (mCameraController)
131139
{
132140
mCameraController->InputEvent(inputEvent);
133141
}
142+
143+
for (HumanCharacterController& currentController: mHumanCharacters)
144+
{
145+
if (inputEvent.mConsumed)
146+
break;
147+
148+
currentController.InputEvent(inputEvent);
149+
}
134150
}
135151

136152
void CarnageGame::InputEvent(MouseButtonInputEvent& inputEvent)
@@ -163,7 +179,13 @@ void CarnageGame::InputEvent(KeyCharEvent& inputEvent)
163179

164180
void CarnageGame::InputEvent(GamepadInputEvent& inputEvent)
165181
{
166-
182+
for (int icurr = 0; icurr < GAME_MAX_PLAYERS; ++icurr)
183+
{
184+
if (inputEvent.mConsumed)
185+
break;
186+
187+
mHumanCharacters[icurr].InputEvent(inputEvent);
188+
}
167189
}
168190

169191
void CarnageGame::SetCameraController(CameraController* controller)
@@ -177,3 +199,38 @@ void CarnageGame::SetCameraController(CameraController* controller)
177199
mCameraController->SetupInitial();
178200
}
179201
}
202+
203+
bool CarnageGame::SetInputActionsFromConfig()
204+
{
205+
std::string jsonContent;
206+
if (!gFiles.ReadTextFile(InputsConfigPath, jsonContent))
207+
{
208+
gConsole.LogMessage(eLogMessage_Warning, "Cannot load input config from '%s'", InputsConfigPath);
209+
return false;
210+
}
211+
212+
cxx::config_document configDocument;
213+
if (!configDocument.parse_document(jsonContent.c_str()))
214+
{
215+
gConsole.LogMessage(eLogMessage_Warning, "Cannot parse input config document");
216+
return false;
217+
}
218+
219+
cxx::string_buffer_32 tempString;
220+
for (int iplayer = 0; iplayer < GAME_MAX_PLAYERS; ++iplayer)
221+
{
222+
HumanCharacterController& currentChar = mHumanCharacters[iplayer];
223+
currentChar.mInputActionsMapping.SetNull();
224+
225+
if (iplayer == 0) // force default mapping for first player
226+
{
227+
currentChar.mInputActionsMapping.SetDefaults();
228+
}
229+
230+
tempString.printf("player%d", iplayer + 1);
231+
232+
cxx::config_node configNode = configDocument.get_root_node().get_child(tempString.c_str());
233+
currentChar.mInputActionsMapping.SetFromConfig(configNode);
234+
}
235+
return true;
236+
}

src/CarnageGame.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class CarnageGame final: public cxx::noncopyable
1616
// gamestate
1717
Pedestrian* mPlayerPedestrian = nullptr;
1818
CameraController* mCameraController = nullptr;
19-
HumanCharacterController mHumanController;
19+
HumanCharacterController mHumanCharacters[GAME_MAX_PLAYERS];
2020

2121
Timespan mGameTime;
2222

@@ -40,6 +40,7 @@ class CarnageGame final: public cxx::noncopyable
4040
void SetCameraController(CameraController* controller);
4141

4242
private:
43+
bool SetInputActionsFromConfig();
4344

4445
};
4546

src/GameDefs.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,17 @@
44

55
// side length of block cube, do not change
66
#define MAP_BLOCK_LENGTH 1.0f
7-
87
#define MAP_BLOCK_TEXTURE_DIMS 64
98
#define MAP_BLOCK_TEXTURE_AREA (MAP_BLOCK_TEXTURE_DIMS * MAP_BLOCK_TEXTURE_DIMS)
10-
119
#define MAX_MAP_BLOCK_ANIM_FRAMES 32
1210
#define MAX_CAR_DOORS 4
1311
#define MAX_CAR_REMAPS 12
1412
#define MAX_PED_REMAPS 64
1513
#define NO_REMAP -1
1614
#define MAX_SPRITE_DELTAS 32
17-
1815
// map width and height is same
1916
#define MAP_DIMENSIONS 256
2017
#define MAP_LAYERS_COUNT 6
21-
2218
#define MAP_PIXELS_PER_TILE MAP_BLOCK_TEXTURE_DIMS
2319

2420
#define SPRITE_ZERO_ANGLE 90.0f // all sprites in game are rotated at 90 degrees
@@ -27,6 +23,8 @@
2723
#define PED_SPRITE_DRAW_BOX_SIZE_PX 24 // with, height
2824
#define PED_SPRITE_DRAW_BOX_SIZE ((1.0f * PED_SPRITE_DRAW_BOX_SIZE_PX) / MAP_BLOCK_TEXTURE_DIMS)
2925

26+
#define GAME_MAX_PLAYERS 4
27+
3028
// car sprite deltas - damage
3129
#define CAR_DAMAGE_SPRITE_DELTA_FR 0 // front right
3230
#define CAR_DAMAGE_SPRITE_DELTA_BL 1 // back left
@@ -709,7 +707,10 @@ enum ePedestrianAction
709707
ePedestrianAction_Run, // overrides walk_forward and walk_backward
710708
ePedestrianAction_Shoot,
711709
ePedestrianAction_EnterCar,
710+
ePedestrianAction_EnterCarAsPassenger,
712711
ePedestrianAction_LeaveCar,
712+
ePedestrianAction_NextWeapon,
713+
ePedestrianAction_PrevWeapon,
713714

714715
// in car
715716
ePedestrianAction_HandBrake,

0 commit comments

Comments
 (0)