Skip to content

Commit 893cd3f

Browse files
committed
WIP of xrAI and xrSE_Factory. Replace magical constants. Small code cleanup. Perhaps I fixed a strange bug (or not bug?) replacing level_graph().clear_mask(m_border) --> level_graph().clear_mask(m_internal).
1 parent b62d302 commit 893cd3f

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

src/utils/xrAI/space_restrictor_wrapper.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@ bool CSpaceRestrictorWrapper::inside(const Fvector& position, float radius) cons
4242
{
4343
switch (i.type)
4444
{
45-
case 0:
45+
case CShapeData::cfSphere:
4646
{
4747
Fsphere temp;
4848
m_xform.transform_tiny(temp.P, i.data.sphere.P);
4949
temp.R = i.data.sphere.R;
5050
if (sphere.intersect(temp))
51-
return (true);
51+
return true;
5252

5353
continue;
5454
}
55-
case 1:
55+
case CShapeData::cfBox:
5656
{
5757
Fmatrix temp;
5858
temp.mul_43(m_xform, i.data.box);
@@ -97,7 +97,7 @@ bool CSpaceRestrictorWrapper::inside(const Fvector& position, float radius) cons
9797
plane.build(points[1], points[0], points[6]);
9898
if (plane.classify(sphere.P) > sphere.R)
9999
break;
100-
return (true);
100+
return true;
101101
}
102102
default: NODEFAULT;
103103
}
@@ -135,15 +135,15 @@ void CSpaceRestrictorWrapper::fill_shape(const CShapeData::shape_def& shape)
135135
Fvector start, dest;
136136
switch (shape.type)
137137
{
138-
case 0:
138+
case CShapeData::cfSphere:
139139
{
140140
start.sub(Fvector().set(shape.data.sphere.P), Fvector().set(shape.data.sphere.R, 0.f, shape.data.sphere.R));
141141
dest.add(Fvector().set(shape.data.sphere.P), Fvector().set(shape.data.sphere.R, 0.f, shape.data.sphere.R));
142142
start.add(object().o_Position);
143143
dest.add(object().o_Position);
144144
break;
145145
}
146-
case 1:
146+
case CShapeData::cfBox:
147147
{
148148
Fvector points[8] = {Fvector().set(-.5f, -.5f, -.5f), Fvector().set(-.5f, -.5f, +.5f),
149149
Fvector().set(-.5f, +.5f, -.5f), Fvector().set(-.5f, +.5f, +.5f), Fvector().set(+.5f, -.5f, -.5f),
@@ -207,7 +207,6 @@ struct sort_by_xz_predicate
207207

208208
void CSpaceRestrictorWrapper::build_border()
209209
{
210-
typedef CShapeData::ShapeVec ShapeVec;
211210
for (auto &i : object().shapes)
212211
fill_shape(i);
213212

@@ -246,27 +245,30 @@ void CSpaceRestrictorWrapper::verify_connectivity()
246245

247246
if (!level_graph().valid_vertex_id(start_vertex_id))
248247
{
249-
Msg("Warning : restrictor %s covers the whole AI map");
248+
Msg("Warning : restrictor %s covers the whole AI map", object().name_replace());
250249
return;
251250
}
252251

253-
level_graph().set_mask(m_border);
252+
//level_graph().set_mask(m_border);
253+
level_graph().set_mask(m_internal);
254254

255255
xr_vector<u32> nodes;
256256

257257
graph_engine().search(level_graph(), start_vertex_id, start_vertex_id, &nodes,
258258
GraphEngineSpace::CFlooder(GraphEngineSpace::_dist_type(6000), GraphEngineSpace::_iteration_type(-1), u32(-1)));
259259

260-
level_graph().clear_mask(m_border);
260+
//level_graph().clear_mask(m_border);
261+
level_graph().clear_mask(m_internal);
261262

262263
VERIFY(nodes.size() + m_internal.size() <= level_graph().header().vertex_count());
263264
if (nodes.size() + m_internal.size() == level_graph().header().vertex_count())
264265
return;
265266

266-
Msg("! %d nodes are disconnected!", level_graph().header().vertex_count() - (nodes.size() + m_internal.size()));
267+
Msg("! %7d nodes are disconnected! Restrictor '%s' separates AI map into several disconnected components",
268+
level_graph().header().vertex_count() - (nodes.size() + m_internal.size()), object().name_replace());
267269

268-
R_ASSERT3(nodes.size() + m_internal.size() == level_graph().header().vertex_count(),
269-
"Restrictor separates AI map into several disconnected components", object().name_replace());
270+
//R_ASSERT3(nodes.size() + m_internal.size() == level_graph().header().vertex_count(),
271+
// "Restrictor separates AI map into several disconnected components", object().name_replace());
270272
}
271273

272274
void CSpaceRestrictorWrapper::verify(CLevelGraph& level_graph, CGraphEngine& graph_engine, bool no_separator_check)

src/utils/xrAI/xrAI_Readme.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ The following keys are supported / required:
88
-s <NAME,...> == build game spawn data
99
-out <FILE> == name of output file (default: 'NAME.spawn')
1010
-start <NAME> == name of game start level
11-
-no_separator_check == do not verify connectivity between levels
11+
-no_separator_check == do not verify that restrictors separates AI map into several disconnected components
1212
-verify <NAME> == verify compiled 'level.ai'
1313
-noverbose == do not print all single linked vertices (print only count)
1414

0 commit comments

Comments
 (0)