Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 8ada2db

Browse files
authored
Implement ACTivities JSON loading
You better hope that works
1 parent 5b1f8ea commit 8ada2db

File tree

1 file changed

+54
-51
lines changed

1 file changed

+54
-51
lines changed

game/server/ai_activity.cpp

Lines changed: 54 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,54 @@
88
#include "ai_activity.h"
99
#include "ai_basenpc.h"
1010
#include "stringregistry.h"
11+
#include "json.hpp" // Include nlohmann/json.hpp
12+
13+
14+
using json = nlohmann::json;
15+
using namespace std;
16+
17+
void traverse_json(const json& j, const string& prefix, vector<string>& paths) {
18+
if (j.is_object()) {
19+
for (auto& [key, value] : j.items()) {
20+
if (key == "1") {
21+
continue;
22+
}
23+
string new_prefix = prefix + key;
24+
if (key.back() != ' ') {new_prefix += '_';}
25+
traverse_json(value, new_prefix, paths);
26+
}
27+
} else if (j.is_array()) {
28+
for (size_t i = 0; i < j.size(); ++i) {
29+
if (j[i].is_number() && j[i] == 0) {
30+
continue;
31+
}
32+
if (i == 1) {
33+
continue;
34+
}
35+
string key = to_string(i);
36+
string new_prefix = prefix;
37+
if (key != "0") {
38+
new_prefix += key + '_';
39+
}
40+
traverse_json(j[i], new_prefix, paths);
41+
}
42+
} else if (j.is_string()) {
43+
string path = prefix + j.get<string>();
44+
paths.push_back(path);
45+
}
46+
}
47+
48+
vector<string> json_to_paths(const string& filename) {
49+
// Read JSON file
50+
ifstream file(filename);
51+
json j;
52+
file >> j;
53+
54+
// Store paths
55+
vector<string> paths;
56+
traverse_json(j, "", paths);
57+
return paths;
58+
}
1159

1260
// memdbgon must be the last include file in a .cpp file!!!
1361
#include "tier0/memdbgon.h"
@@ -88,57 +136,12 @@ int CAI_BaseNPC::GetActivityID(const char* actName)
88136
//-----------------------------------------------------------------------------
89137
void CAI_BaseNPC::InitDefaultActivitySR(void)
90138
{
91-
ADD_ACTIVITY_TO_SR( ACT_INVALID );
92-
ADD_ACTIVITY_TO_SR( ACT_RESET );
93-
ADD_ACTIVITY_TO_SR( ACT_IDLE );
94-
ADD_ACTIVITY_TO_SR( ACT_TRANSITION );
95-
ADD_ACTIVITY_TO_SR( ACT_COVER );
96-
ADD_ACTIVITY_TO_SR( ACT_COVER_MED );
97-
ADD_ACTIVITY_TO_SR( ACT_COVER_LOW );
98-
ADD_ACTIVITY_TO_SR( ACT_WALK );
99-
ADD_ACTIVITY_TO_SR( ACT_WALK_AIM );
100-
ADD_ACTIVITY_TO_SR( ACT_WALK_CROUCH );
101-
ADD_ACTIVITY_TO_SR( ACT_WALK_CROUCH_AIM );
102-
ADD_ACTIVITY_TO_SR( ACT_RUN );
103-
ADD_ACTIVITY_TO_SR( ACT_RUN_AIM );
104-
ADD_ACTIVITY_TO_SR( ACT_RUN_CROUCH );
105-
ADD_ACTIVITY_TO_SR( ACT_RUN_CROUCH_AIM );
106-
ADD_ACTIVITY_TO_SR( ACT_RUN_PROTECTED );
107-
ADD_ACTIVITY_TO_SR( ACT_SCRIPT_CUSTOM_MOVE );
108-
ADD_ACTIVITY_TO_SR( ACT_RANGE_ATTACK1 );
109-
ADD_ACTIVITY_TO_SR( ACT_RANGE_ATTACK2 );
110-
ADD_ACTIVITY_TO_SR( ACT_RANGE_ATTACK1_LOW );
111-
ADD_ACTIVITY_TO_SR( ACT_RANGE_ATTACK2_LOW );
112-
ADD_ACTIVITY_TO_SR( ACT_DIESIMPLE );
113-
ADD_ACTIVITY_TO_SR( ACT_DIEBACKWARD );
114-
ADD_ACTIVITY_TO_SR( ACT_DIEFORWARD );
115-
ADD_ACTIVITY_TO_SR( ACT_DIEVIOLENT );
116-
ADD_ACTIVITY_TO_SR( ACT_DIERAGDOLL );
117-
ADD_ACTIVITY_TO_SR( ACT_FLY );
118-
ADD_ACTIVITY_TO_SR( ACT_HOVER );
119-
ADD_ACTIVITY_TO_SR( ACT_GLIDE );
120-
ADD_ACTIVITY_TO_SR( ACT_SWIM );
121-
ADD_ACTIVITY_TO_SR( ACT_JUMP );
122-
ADD_ACTIVITY_TO_SR( ACT_HOP );
123-
ADD_ACTIVITY_TO_SR( ACT_LEAP );
124-
ADD_ACTIVITY_TO_SR( ACT_LAND );
125-
ADD_ACTIVITY_TO_SR( ACT_CLIMB_UP );
126-
ADD_ACTIVITY_TO_SR( ACT_CLIMB_DOWN );
127-
ADD_ACTIVITY_TO_SR( ACT_CLIMB_DISMOUNT );
128-
ADD_ACTIVITY_TO_SR( ACT_SHIPLADDER_UP );
129-
ADD_ACTIVITY_TO_SR( ACT_SHIPLADDER_DOWN );
130-
ADD_ACTIVITY_TO_SR( ACT_STRAFE_LEFT );
131-
ADD_ACTIVITY_TO_SR( ACT_STRAFE_RIGHT );
132-
ADD_ACTIVITY_TO_SR( ACT_ROLL_LEFT );
133-
ADD_ACTIVITY_TO_SR( ACT_ROLL_RIGHT );
134-
ADD_ACTIVITY_TO_SR( ACT_TURN_LEFT );
135-
ADD_ACTIVITY_TO_SR( ACT_TURN_RIGHT );
136-
ADD_ACTIVITY_TO_SR( ACT_CROUCH );
137-
ADD_ACTIVITY_TO_SR( ACT_CROUCHIDLE );
138-
ADD_ACTIVITY_TO_SR( ACT_STAND );
139-
ADD_ACTIVITY_TO_SR( ACT_USE );
140-
ADD_ACTIVITY_TO_SR( ACT_ALIEN_BURROW_IDLE );
141-
ADD_ACTIVITY_TO_SR( ACT_ALIEN_BURROW_OUT );
139+
string filename = "../../configs/activities.json";
140+
vector<string> paths = json_to_paths(filename);
141+
142+
for (const auto& path : paths) {
143+
ADD_ACTIVITY_TO_SR(path);
144+
}
142145

143146
ADD_ACTIVITY_TO_SR( ACT_SIGNAL1 );
144147
ADD_ACTIVITY_TO_SR( ACT_SIGNAL2 );

0 commit comments

Comments
 (0)