gwnavruntime/queries/blobs/diskexpansionquerydisplaylistbuilder.h Source File

diskexpansionquerydisplaylistbuilder.h
Go to the documentation of this file.
1 /*
2 * Copyright 2016 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 #pragma once
8 
13 
14 namespace Kaim
15 {
16 
17 class DiskExpansionQueryDisplayListBuilder : public IDisplayListBuilder
18 {
19 private:
20  virtual void DoBuild(DisplayList* displayList, char* blob)
21  {
22  const DiskExpansionQueryBlob* queryBlob = (DiskExpansionQueryBlob*) blob;
23  KyFloat32 triangleZOffset = 0.1f;
24 
25  DiskExpansionQueryOutputBlob* queryOutputBlob = queryBlob->m_queryOutput.Ptr();
26  if (queryOutputBlob == nullptr)
27  return;
28 
29  Vec3f offsetVector = Vec3f::UnitZ();
30 
31  switch ((DiskExpansionQueryResult)queryOutputBlob->m_result)
32  {
35  {
36  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, Color::Orange);
37  }
38  break;
40  {
41  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, Color::Red, "Center outside!");
42  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, Color::Red);
43  }
44  break;
46  {
47  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
48 
49  triangle.A.z += triangleZOffset;
50  triangle.B.z += triangleZOffset;
51  triangle.C.z += triangleZOffset;
52  displayList->PushTriangle(triangle, Color::Red);
53 
54  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, Color::Red);
55  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, Color::Red, "Center NavTag forbidden!");
56  }
57  break;
59  {
60  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
61 
62  triangle.A.z += triangleZOffset;
63  triangle.B.z += triangleZOffset;
64  triangle.C.z += triangleZOffset;
65  displayList->PushTriangle(triangle, Color::Green);
66 
67  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, Color::Red);
68  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, Color::Red, "Cannot expand!");
69 
70  }
71  break;
73  {
74  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
75 
76  triangle.A.z += triangleZOffset;
77  triangle.B.z += triangleZOffset;
78  triangle.C.z += triangleZOffset;
79  displayList->PushTriangle(triangle, Color::Green);
80 
81 
82  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, Color::Red);
83  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, Color::Red, "Lack of working memory!");
84 
85  }
86  break;
88  {
89 
90  displayList->PushText(queryBlob->m_centerPos3f + offsetVector, Color::Red, "Unknown error!");
91  displayList->PushDisk(queryBlob->m_centerPos3f, queryBlob->m_radiusMax, Color::Red);
92  }
93  break;
95  {
96  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
97  triangle.A.z += triangleZOffset;
98  triangle.B.z += triangleZOffset;
99  triangle.C.z += triangleZOffset;
100  displayList->PushTriangle(triangle, Color::Green);
101  displayList->PushDisk(queryBlob->m_centerPos3f, queryOutputBlob->m_resultRadius, Color::Green);
102  }
103  break;
105  {
106  Triangle3f triangle = queryOutputBlob->m_centerTriangle.m_triangle;
107 
108  triangle.A.z += triangleZOffset;
109  triangle.B.z += triangleZOffset;
110  triangle.C.z += triangleZOffset;
111  displayList->PushTriangle(triangle, Color::Green);
112 
113  displayList->PushDisk(queryBlob->m_centerPos3f, queryOutputBlob->m_resultRadius, Color::Orange);
114  displayList->PushLine(queryOutputBlob->m_collisionPos3f, queryOutputBlob->m_collisionPos3f + offsetVector, Color::Orange);
115  displayList->PushText(queryOutputBlob->m_collisionPos3f + offsetVector, Color::Orange, "Collision point");
116  }
117  break;
118  }
119 
120  QueryDynamicOutputBlob* queryDynamicOutputBlob = queryOutputBlob->m_queryDynamicOutputBlobRef.Ptr();
121  if (queryDynamicOutputBlob != NULL)
122  {
123  QueryDynamicOutputDisplayListBuilder dynamicOutputDLBuilder;
124  dynamicOutputDLBuilder.Build(displayList, (char*)queryDynamicOutputBlob, 0);
125  }
126  }
127 };
128 
129 }
130 
Indicates a collision was detected when expanding the disk before the maximum size of the disk was re...
Definition: basediskexpansionquery.h:31
Indicates the query has not yet been initialized.
Definition: basediskexpansionquery.h:21
Indicates that an unknown error occurred during the query processing.
Definition: basediskexpansionquery.h:28
Definition: SF_RefCount.h:359
Indicates that the disk fits inside the navigable areas of the NavMesh even at maximum size...
Definition: basediskexpansionquery.h:30
DiskExpansionQueryResult
Enumerates the possible results of a DiskExpansionQuery.
Definition: basediskexpansionquery.h:19
static Vec3f UnitZ()
Returns {0.0f, 0.0f, 1.0f}.
Definition: vec3f.h:106
Indicates that the NavTag at the center point is forbidden.
Definition: basediskexpansionquery.h:25
Indicates the query has not yet been launched.
Definition: basediskexpansionquery.h:22
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Indicates that the center point lies outside the navigable area of the NavMesh.
Definition: basediskexpansionquery.h:24
Indicates that insufficient working memory caused the query to stop.
Definition: basediskexpansionquery.h:27
Indicates that the center point lies within the NavMesh, but the disk cannot be expanded.
Definition: basediskexpansionquery.h:26
float KyFloat32
float
Definition: types.h:32