gwnavruntime/queries/blobs/diskcastquerydisplaylistbuilder.h Source File

diskcastquerydisplaylistbuilder.h
Go to the documentation of this file.
1 /*
2 * Copyright 2015 Autodesk, Inc. All rights reserved.
3 * Use of this software is subject to the terms of the Autodesk license agreement and any attachments or Appendices thereto provided at the time of installation or download,
4 * or which otherwise accompanies this software in either electronic or hard copy form, or which is signed by you and accepted by Autodesk.
5 */
6 
7 // Primary contact: MAMU - secondary contact: NOBODY
8 #ifndef Navigation_DiskCastQuery_DisplayListBuilder_H
9 #define Navigation_DiskCastQuery_DisplayListBuilder_H
10 
15 
16 namespace Kaim
17 {
18 
19 class DiskCastQueryDisplayListBuilder : public IDisplayListBuilder
20 {
21 private:
22  virtual void DoBuild(ScopedDisplayList* displayList, char* blob, KyUInt32 /*deepBlobSize*/ = 0)
23  {
24  const DiskCastQueryBlob* queryBlob = (DiskCastQueryBlob*) blob;
25  KyFloat32 triangleZOffset = 0.1f;
26 
27  DiskCastQueryOutputBlob* queryOutputBlob = queryBlob->m_queryOutput.Ptr();
28  if (queryOutputBlob != NULL)
29  {
30  Vec3f offsetVector = Vec3f::UnitZ();
31  KyUInt32 subdivisionCount = 24;
32 
33  VisualShapeColor shapeColor;
34  switch((DiskCastQueryResult)queryOutputBlob->m_result)
35  {
36  case DISKCAST_NOT_INITIALIZED: break;
38  {
39  displayList->PushText(queryBlob->m_startPos3f + offsetVector, VisualColor::Red, "Not processed...");
40 
41  shapeColor.m_lineColor = VisualColor::Orange;
42  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
43  queryBlob->m_radius, subdivisionCount, shapeColor);
44  }
45  break;
47  {
48  shapeColor.m_lineColor = VisualColor::Red;
49  displayList->PushText(queryBlob->m_startPos3f + offsetVector, shapeColor.m_lineColor, "Start outside!");
50  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
51  queryBlob->m_radius, subdivisionCount, shapeColor);
52  }
53  break;
55  {
56  shapeColor.m_lineColor = VisualColor::Red;
57 
58  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
59 
60  triangle.A.z += triangleZOffset;
61  triangle.B.z += triangleZOffset;
62  triangle.C.z += triangleZOffset;
63  displayList->PushTriangle(triangle, shapeColor);
64 
65  displayList->PushText(queryBlob->m_startPos3f + offsetVector, shapeColor.m_lineColor, "Start NavTag forbidden!");
66  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
67  queryBlob->m_radius, subdivisionCount, shapeColor);
68  }
69  break;
71  {
72  shapeColor.m_lineColor = VisualColor::Lime;
73 
74  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
75 
76  triangle.A.z += triangleZOffset;
77  triangle.B.z += triangleZOffset;
78  triangle.C.z += triangleZOffset;
79  displayList->PushTriangle(triangle, shapeColor);
80 
81  shapeColor.m_lineColor = VisualColor::Orange;
82  displayList->PushLine(queryOutputBlob->m_collisionPos3f, queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor);
83  displayList->PushText(queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor, "Collision point");
84  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
85  queryBlob->m_radius, subdivisionCount, shapeColor);
86  }
87  break;
89  {
90  shapeColor.m_lineColor = VisualColor::Lime;
91 
92  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
93 
94  triangle.A.z += triangleZOffset;
95  triangle.B.z += triangleZOffset;
96  triangle.C.z += triangleZOffset;
97  displayList->PushTriangle(triangle, shapeColor);
98 
99  shapeColor.m_lineColor = VisualColor::Red;
100  displayList->PushLine(queryOutputBlob->m_collisionPos3f, queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor);
101  displayList->PushText(queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor, "Collision point (arrival error)");
102  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
103  queryBlob->m_radius, subdivisionCount, shapeColor);
104  }
105  break;
107  {
108  shapeColor.m_lineColor = VisualColor::Lime;
109 
110  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
111 
112  triangle.A.z += triangleZOffset;
113  triangle.B.z += triangleZOffset;
114  triangle.C.z += triangleZOffset;
115  displayList->PushTriangle(triangle, shapeColor);
116 
117  shapeColor.m_lineColor = VisualColor::Red;
118  displayList->PushText(queryBlob->m_startPos3f + offsetVector, shapeColor.m_lineColor, "Lack of working memory!");
119  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
120  queryBlob->m_radius, subdivisionCount, shapeColor);
121  }
122  break;
124  {
125  shapeColor.m_lineColor = VisualColor::Red;
126  displayList->PushText(queryBlob->m_startPos3f + offsetVector, shapeColor.m_lineColor, "Unknown error!");
127  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_startPos3f + queryBlob->m_normalizedDir2d * queryBlob->m_maxDist,
128  queryBlob->m_radius, subdivisionCount, shapeColor);
129  }
130  break;
132  {
133  shapeColor.m_lineColor = VisualColor::Lime;
134 
135  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
136 
137  triangle.A.z += triangleZOffset;
138  triangle.B.z += triangleZOffset;
139  triangle.C.z += triangleZOffset;
140  displayList->PushTriangle(triangle, shapeColor);
141 
142  triangle = queryOutputBlob->m_arrivalTriangle.m_triangle;
143  triangle.A.z += triangleZOffset;
144  triangle.B.z += triangleZOffset;
145  triangle.C.z += triangleZOffset;
146  displayList->PushTriangle(triangle, shapeColor);
147 
148  displayList->PushStadium(queryBlob->m_startPos3f, queryOutputBlob->m_arrivalPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
149  }
150  break;
152  {
153  shapeColor.m_lineColor = VisualColor::Lime;
154 
155  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
156 
157  triangle.A.z += triangleZOffset;
158  triangle.B.z += triangleZOffset;
159  triangle.C.z += triangleZOffset;
160  displayList->PushTriangle(triangle, shapeColor);
161 
162  triangle = queryOutputBlob->m_arrivalTriangle.m_triangle;
163  triangle.A.z += triangleZOffset;
164  triangle.B.z += triangleZOffset;
165  triangle.C.z += triangleZOffset;
166  displayList->PushTriangle(triangle, shapeColor);
167 
168  shapeColor.m_lineColor = VisualColor::Orange;
169  displayList->PushLine(queryOutputBlob->m_collisionPos3f, queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor);
170  displayList->PushText(queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor, "Collision point");
171  displayList->PushStadium(queryBlob->m_startPos3f, queryOutputBlob->m_arrivalPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
172  }
173  break;
174  }
175 
176  QueryDynamicOutputBlob* queryDynamicOutputBlob = queryOutputBlob->m_queryDynamicOutputBlobRef.Ptr();
177  if (queryDynamicOutputBlob != NULL)
178  {
179  QueryDynamicOutputDisplayListBuilder dynamicOutputDLBuilder;
180  dynamicOutputDLBuilder.Build(displayList, (char*)queryDynamicOutputBlob, 0);
181  }
182  }
183  }
184 };
185 
186 }
187 
188 #endif
Indicates that a NavMesh triangle could not be found for the starting point.
Definition: basediskcastquery.h:30
Indicates that moving back the collision point resulted in an arrival position that is outside of the...
Definition: basediskcastquery.h:33
Definition: SF_RefCount.h:377
static const VisualColor Lime
Represents the color with RGBA values ( 0, 255, 0, 255).  
Definition: visualcolor.h:172
static const VisualColor Orange
Represents the color with RGBA values (255, 165, 0, 255).  
Definition: visualcolor.h:195
static const VisualColor Red
Represents the color with RGBA values (255, 0, 0, 255).  
Definition: visualcolor.h:209
Indicates that the starting point is too close to a NavMesh border. Either the disk does not fit in t...
Definition: basediskcastquery.h:32
Indicates that the NavTag at the starting point was forbidden.
Definition: basediskcastquery.h:31
Indicates that an unknown error occurred during the query processing.
Definition: basediskcastquery.h:35
static Vec3f UnitZ()
Returns the normalized orientation of the Z axis.
Definition: vec3f.h:218
Indicates that insufficient working memory caused the query to stop.
Definition: basediskcastquery.h:34
Indicates that the disk was able to travel its maximum distance without collision.
Definition: basediskcastquery.h:37
Definition: gamekitcrowddispersion.h:20
Indicates that the query has not yet been launched.
Definition: basediskcastquery.h:28
Indicates that a final arrival position was calculated successfully.
Definition: basediskcastquery.h:38
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
Indicates that the query has not yet been initialized.
Definition: basediskcastquery.h:27
DiskCastQueryResult
Enumerates the possible results of a DiskCastQuery.
Definition: basediskcastquery.h:25
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43