gwnavruntime/pathfollower/avoidancecollider.h Source File

avoidancecollider.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 
8 #pragma once
9 
11 
12 namespace Kaim
13 {
14 
17 {
18  KY_DEFINE_NEW_DELETE_OPERATORS(MemStat_PathFollowing)
19 
20 public:
21  // ------------------------------ Functions -----------------------------
22 
23  AvoidanceCollider() : m_position(Vec2f(0.0f, 0.0f)), m_velocity(Vec2f(0.0f, 0.0f)), m_radius(0.5f), m_ignored(false), m_pushOnContact(false), m_isBot(false) {}
24 
25  KyFloat32 ComputeSquaredMinimumTimeToCollision(const AvoidanceCollider& collider) const;
26  KyFloat32 ComputeAvoidanceScoreForDirection (const Kaim::AvoidanceCollider& obstacleCollider, const Kaim::Vec2f candidateVelocity, const KyFloat32 timeHorizonInSeconds, const KyFloat32 safetyDistance, KyFloat32& collisionTime) const;
27 
28  // ---------------------------------- Public Data Members ----------------------------------
29 
30  Vec2f m_position;
31  Vec2f m_velocity;
32  KyFloat32 m_radius;
33  bool m_ignored;
34  bool m_pushOnContact;
35  bool m_isBot;
36 };
37 
38 inline void SwapEndianness(Endianness::Target e, AvoidanceCollider& self)
39 {
40  SwapEndianness(e, self.m_position);
41  SwapEndianness(e, self.m_velocity);
42  SwapEndianness(e, self.m_radius);
43 }
44 
45 
46 class AvoidanceScoreForDirectionComputer
47 {
48 public:
49  void Compute(const Kaim::AvoidanceCollider& rootCollider, const Kaim::AvoidanceCollider& obstacleCollider, const Kaim::Vec2f candidateVelocity, const KyFloat32 timeHorizonInSeconds, const KyFloat32 safetyDistance);
50 
51 public:
52 
53  // --- result ----
54 
55  KyFloat32 m_avoidanceScore;
56  KyFloat32 m_collisionTime;
57 
58  // --- intermediate computation ---
59 
60  KyFloat32 m_BHxV;
61  KyFloat32 m_AHxV;
62  Kaim::Vec2f m_Vr;
63 
64  KyFloat32 m_toiScore;
65  KyFloat32 m_crossingScore;
66 };
67 
68 
69 } // namespace Kaim
70 
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
Target
Enumerates the possible endianness types relative to the current platform.
Definition: endianness.h:27
2d vector using KyFloat32.
Definition: vec2f.h:18
A Collider is a 2D circular particle with a linear velocity.
Definition: avoidancecollider.h:16
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32