gwnavruntime/queries/blobs/diskexpansionquerydisplaylistbuilder.h Source File

diskexpansionquerydisplaylistbuilder.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_DiskExpansionQuery_DisplayListBuilder_H
9 #define Navigation_DiskExpansionQuery_DisplayListBuilder_H
10 
15 
16 namespace Kaim
17 {
18 
19 class DiskExpansionQueryDisplayListBuilder : public IDisplayListBuilder
20 {
21 private:
22  virtual void DoBuild(ScopedDisplayList* displayList, char* blob, KyUInt32 /*deepBlobSize*/ = 0)
23  {
24  const DiskExpansionQueryBlob* queryBlob = (DiskExpansionQueryBlob*) blob;
25  KyUInt32 subdivisionCount = 24;
26  KyFloat32 triangleZOffset = 0.1f;
27 
28  DiskExpansionQueryOutputBlob* queryOutputBlob = queryBlob->m_queryOutput.Ptr();
29  if (queryOutputBlob != NULL)
30  {
31  Vec3f offsetVector = Vec3f::UnitZ();
32 
33  VisualShapeColor shapeColor;
34  switch((DiskExpansionQueryResult)queryOutputBlob->m_result)
35  {
38  {
39  shapeColor.m_lineColor = VisualColor::Orange;
40  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, subdivisionCount, shapeColor);
41  }
42  break;
44  {
45  shapeColor.m_lineColor = VisualColor::Red;
46  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, shapeColor.m_lineColor, "Center outside!");
47  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, subdivisionCount, shapeColor);
48  }
49  break;
51  {
52  shapeColor.m_lineColor = VisualColor::Red;
53 
54  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
55 
56  triangle.A.z += triangleZOffset;
57  triangle.B.z += triangleZOffset;
58  triangle.C.z += triangleZOffset;
59  displayList->PushTriangle(triangle, shapeColor);
60 
61  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, subdivisionCount, shapeColor);
62  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, shapeColor.m_lineColor, "Center NavTag forbidden!");
63  }
64  break;
66  {
67  shapeColor.m_lineColor = VisualColor::Lime;
68  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
69 
70  triangle.A.z += triangleZOffset;
71  triangle.B.z += triangleZOffset;
72  triangle.C.z += triangleZOffset;
73  displayList->PushTriangle(triangle, shapeColor);
74 
75  shapeColor.m_lineColor = VisualColor::Red;
76  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, subdivisionCount, shapeColor);
77  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, shapeColor.m_lineColor, "Cannot expand!");
78 
79  }
80  break;
82  {
83  shapeColor.m_lineColor = VisualColor::Lime;
84  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
85 
86  triangle.A.z += triangleZOffset;
87  triangle.B.z += triangleZOffset;
88  triangle.C.z += triangleZOffset;
89  displayList->PushTriangle(triangle, shapeColor);
90 
91  shapeColor.m_lineColor = VisualColor::Red;
92  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, subdivisionCount, shapeColor);
93  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, shapeColor.m_lineColor, "Lack of working memory!");
94 
95  }
96  break;
98  {
99  shapeColor.m_lineColor = VisualColor::Red;
100  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, shapeColor.m_lineColor, "Unknown error!");
101  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, subdivisionCount, shapeColor);
102  }
103  break;
105  {
106  shapeColor.m_lineColor = VisualColor::Lime;
107  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
108 
109  triangle.A.z += triangleZOffset;
110  triangle.B.z += triangleZOffset;
111  triangle.C.z += triangleZOffset;
112  displayList->PushTriangle(triangle, shapeColor);
113  displayList->PushDisk(queryBlob->m_centerPos3f, queryOutputBlob->m_resultRadius, subdivisionCount, shapeColor);
114  }
115  break;
117  {
118  shapeColor.m_lineColor = VisualColor::Lime;
119  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
120 
121  triangle.A.z += triangleZOffset;
122  triangle.B.z += triangleZOffset;
123  triangle.C.z += triangleZOffset;
124  displayList->PushTriangle(triangle, shapeColor);
125 
126  shapeColor.m_lineColor = VisualColor::Orange;
127  displayList->PushDisk(queryBlob->m_centerPos3f, queryOutputBlob->m_resultRadius, subdivisionCount, shapeColor);
128  displayList->PushLine(queryOutputBlob->m_collisionPos3f, queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor);
129  displayList->PushText(queryOutputBlob->m_collisionPos3f + offsetVector, shapeColor.m_lineColor, "Collision point");
130  }
131  break;
132  }
133 
134  QueryDynamicOutputBlob* queryDynamicOutputBlob = queryOutputBlob->m_queryDynamicOutputBlobRef.Ptr();
135  if (queryDynamicOutputBlob != NULL)
136  {
137  QueryDynamicOutputDisplayListBuilder dynamicOutputDLBuilder;
138  dynamicOutputDLBuilder.Build(displayList, (char*)queryDynamicOutputBlob, 0);
139  }
140  }
141  }
142 };
143 
144 }
145 
146 #endif
Indicates a collision was detected when expanding the disk before the maximum size of the disk was re...
Definition: basediskexpansionquery.h:34
Indicates the query has not yet been initialized.
Definition: basediskexpansionquery.h:24
Indicates that an unknown error occurred during the query processing.
Definition: basediskexpansionquery.h:31
Definition: SF_RefCount.h:377
static const VisualColor Lime
Represents the color with RGBA values ( 0, 255, 0, 255).  
Definition: visualcolor.h:172
Indicates that the disk fits inside the navigable areas of the NavMesh even at maximum size...
Definition: basediskexpansionquery.h:33
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
DiskExpansionQueryResult
Enumerates the possible results of a DiskExpansionQuery.
Definition: basediskexpansionquery.h:22
static Vec3f UnitZ()
Returns the normalized orientation of the Z axis.
Definition: vec3f.h:218
Indicates that the NavTag at the center point is forbidden.
Definition: basediskexpansionquery.h:28
Indicates the query has not yet been launched.
Definition: basediskexpansionquery.h:25
Definition: gamekitcrowddispersion.h:20
Indicates that the center point lies outside the navigable area of the NavMesh.
Definition: basediskexpansionquery.h:27
Indicates that insufficient working memory caused the query to stop.
Definition: basediskexpansionquery.h:30
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
Indicates that the center point lies within the NavMesh, but the disk cannot be expanded.
Definition: basediskexpansionquery.h:29
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43