gwnavruntime/queries/blobs/diskcangoquerydisplaylistbuilder.h Source File

diskcangoquerydisplaylistbuilder.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_DiskCanGoQuery_DisplayListBuilder_H
9 #define Navigation_DiskCanGoQuery_DisplayListBuilder_H
10 
15 
16 namespace Kaim
17 {
18 
19 class DiskCanGoQueryDisplayListBuilder : public IDisplayListBuilder
20 {
21 private:
22  virtual void DoBuild(ScopedDisplayList* displayList, char* blob, KyUInt32 /*deepBlobSize*/ = 0)
23  {
24  const DiskCanGoQueryBlob* queryBlob = (DiskCanGoQueryBlob*) blob;
25  KyFloat32 triangleZOffset = 0.1f;
26 
27  DiskCanGoQueryOutputBlob* queryOutputBlob = queryBlob->m_queryOutput.Ptr();
28  if (queryOutputBlob != NULL)
29  {
30  Vec3f offsetVector = Vec3f::UnitZ();
31  KyFloat32 arrowHalfWidth = 0.05f;
32  KyUInt32 subdivisionCount = 24;
33 
34  VisualShapeColor shapeColor;
35  switch((DiskCanGoQueryResult)queryOutputBlob->m_result)
36  {
37  case DISKCANGO_NOT_INITIALIZED: break;
39  {
40  shapeColor.m_triangleColor = VisualColor::Orange;
41  displayList->PushArrow(queryBlob->m_startPos3f, queryBlob->m_destPos3f, arrowHalfWidth, shapeColor, 3.0f, 0.1f);
42 
43  shapeColor.SetOnlyLineColor(shapeColor.m_triangleColor);
44  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
45  }
46  break;
48  {
49  shapeColor.m_lineColor = VisualColor::Red;
50  displayList->PushText(queryBlob->m_startPos3f + offsetVector, shapeColor.m_lineColor, "Start outside!");
51  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
52  }
53  break;
55  {
56  shapeColor.m_lineColor = VisualColor::Red;
57  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
58 
59  triangle.A.z += triangleZOffset;
60  triangle.B.z += triangleZOffset;
61  triangle.C.z += triangleZOffset;
62  displayList->PushTriangle(triangle, shapeColor);
63 
64  displayList->PushText(queryBlob->m_startPos3f + offsetVector, shapeColor.m_lineColor, "Start NavTag forbidden!");
65  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
66  }
67  break;
69  {
70  shapeColor.m_lineColor = VisualColor::Lime;
71  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
72 
73  triangle.A.z += triangleZOffset;
74  triangle.B.z += triangleZOffset;
75  triangle.C.z += triangleZOffset;
76  displayList->PushTriangle(triangle, shapeColor);
77 
78  shapeColor.m_lineColor = VisualColor::Red;
79  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
80  }
81  break;
83  {
84  shapeColor.m_lineColor = VisualColor::Lime;
85  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
86 
87  triangle.A.z += triangleZOffset;
88  triangle.B.z += triangleZOffset;
89  triangle.C.z += triangleZOffset;
90  displayList->PushTriangle(triangle, shapeColor);
91 
92  shapeColor.m_lineColor = VisualColor::Red;
93  displayList->PushText(queryBlob->m_destPos3f + offsetVector, shapeColor.m_lineColor, "Arrival in wrong floor!");
94  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
95  }
96  break;
98  {
99  shapeColor.m_lineColor = VisualColor::Lime;
100  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
101 
102  triangle.A.z += triangleZOffset;
103  triangle.B.z += triangleZOffset;
104  triangle.C.z += triangleZOffset;
105  displayList->PushTriangle(triangle, shapeColor);
106 
107  shapeColor.m_lineColor = VisualColor::Red;
108  displayList->PushText(queryBlob->m_destPos3f + offsetVector, shapeColor.m_lineColor, "Lack of working memory!");
109  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
110  }
111  break;
113  {
114  shapeColor.m_lineColor = VisualColor::Red;
115  displayList->PushText(queryBlob->m_destPos3f + offsetVector, shapeColor.m_lineColor, "Unknown error!");
116  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
117  }
118  break;
120  {
121  shapeColor.m_lineColor = VisualColor::Lime;
122 
123  Triangle3f triangle = queryOutputBlob->m_startTriangle.m_triangle;
124 
125  triangle.A.z += triangleZOffset;
126  triangle.B.z += triangleZOffset;
127  triangle.C.z += triangleZOffset;
128  displayList->PushTriangle(triangle, shapeColor);
129 
130  triangle = queryOutputBlob->m_destTriangle.m_triangle;
131  triangle.A.z += triangleZOffset;
132  triangle.B.z += triangleZOffset;
133  triangle.C.z += triangleZOffset;
134  displayList->PushTriangle(triangle, shapeColor);
135 
136  displayList->PushStadium(queryBlob->m_startPos3f, queryBlob->m_destPos3f, queryBlob->m_radius, subdivisionCount, shapeColor);
137  }
138  break;
139  }
140 
141  QueryDynamicOutputBlob* queryDynamicOutputBlob = queryOutputBlob->m_queryDynamicOutputBlobRef.Ptr();
142  if (queryDynamicOutputBlob != NULL)
143  {
144  QueryDynamicOutputDisplayListBuilder dynamicOutputDLBuilder;
145  dynamicOutputDLBuilder.Build(displayList, (char*)queryDynamicOutputBlob, 0);
146  }
147  }
148  }
149 };
150 
151 }
152 
153 #endif
Indicates that a NavMesh triangle has been found for the starting point, but its NavTag is not consid...
Definition: basediskcangoquery.h:30
Indicates the query generated no results, which may indicate that the start and end points are on dif...
Definition: basediskcangoquery.h:32
Indicates the query has not yet been launched.
Definition: basediskcangoquery.h:27
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 the query has not yet been initialized.
Definition: basediskcangoquery.h:26
Indicates that a NavMesh triangle could not be found for the starting point.
Definition: basediskcangoquery.h:29
DiskCanGoQueryResult
Enumerates the possible results of a DiskCanGoQuery.
Definition: basediskcangoquery.h:24
static Vec3f UnitZ()
Returns the normalized orientation of the Z axis.
Definition: vec3f.h:218
Indicates that the disk can pass in a straight line-from start to end point-without a collision...
Definition: basediskcangoquery.h:36
Definition: gamekitcrowddispersion.h:20
Indicates that a collision was detected along the straight line between the starting and ending point...
Definition: basediskcangoquery.h:31
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
Indicates that an unknown error occurred during the query processing.
Definition: basediskcangoquery.h:34
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43
Indicates that insufficient working memory caused the query to stop.
Definition: basediskcangoquery.h:33