Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cDirectionDef.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cDirectionDef_H
7 #define _INC_cDirectionDef_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "../Math/Calc.h"
14 
15 namespace GrayLib
16 {
18  {
22  };
23 
24  enum DIR_TYPE
25  {
37 
40  };
41 
43  {
49 
50  public:
51  static const cDirectionDef k_Directions[DIR_QTY + 1];
53 
55  const GChar_t* m_pszName;
56  short m_dx;
57  short m_dy;
58 
59  public:
60  static DIR_TYPE GRAYCALL GetDirStr(const GChar_t* pszDir);
61 
62  static inline DIR_TYPE GetTurn(DIR_TYPE eDir, int iOffset)
63  {
67  return ((DIR_TYPE)((eDir + iOffset) % DIR_QTY));
68  }
69 
70  static inline const GChar_t* GetDirName(DIR_TYPE eDir);
71  static inline DIR_TYPE GetHeadingDir(RADIANf_t fHeading) noexcept;
72  static inline RADIANf_t GetDirHeading(DIR_TYPE eDir) noexcept;
73 
75  };
76 
77  inline const GChar_t* cDirectionDef::GetDirName(DIR_TYPE eDir) // static;
78  {
79  return k_Directions[eDir % DIR_QTY].m_pszAbbrev;
80  }
81  inline DIR_TYPE cDirectionDef::GetHeadingDir(RADIANf_t fHeading) noexcept // static
82  {
87 
88  fHeading += k_fAngTurn / 2; // for rounding to nearest.
89  fHeading = Calc::WrapRadians(fHeading);
90  return (DIR_TYPE)(int)(fHeading / k_fAngTurn);
91  }
92  inline RADIANf_t cDirectionDef::GetDirHeading(DIR_TYPE eDir) noexcept // static
93  {
96  return (RADIANf_t)(eDir * k_fAngTurn);
97  }
98 };
99 #endif
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
Definition: cDirectionDef.h:43
static DIR_TYPE GetTurn(DIR_TYPE eDir, int iOffset)
Definition: cDirectionDef.h:62
short m_dx
-1,0,+1 = Cos(angle)
Definition: cDirectionDef.h:56
static const cDirectionDef k_Directions[DIR_QTY+1]
Definition: cDirectionDef.h:51
static RADIANf_t k_fAngTurn
+1 Turn angle in radians = cTypeF<float>::k_PI2 / DIR_QTY
Definition: cDirectionDef.h:52
const GChar_t * m_pszName
"East" "North" "North East" etc
Definition: cDirectionDef.h:55
short m_dy
-1,0,+1 = Sin(angle)
Definition: cDirectionDef.h:57
static const GChar_t * GetDirName(DIR_TYPE eDir)
Definition: cDirectionDef.h:77
UNITTEST_FRIEND(cDirectionDef)
static DIR_TYPE GetHeadingDir(RADIANf_t fHeading) noexcept
Definition: cDirectionDef.h:81
static RADIANf_t GetDirHeading(DIR_TYPE eDir) noexcept
Definition: cDirectionDef.h:92
const GChar_t * m_pszAbbrev
"E", "N" "NE" etc
Definition: cDirectionDef.h:54
Definition: cMesh.h:22
DIR_TYPE
Definition: cDirectionDef.h:25
@ DIR_NE
Definition: cDirectionDef.h:36
@ DIR_S
pi/2 rad
Definition: cDirectionDef.h:31
@ DIR_SE
pi/4 rad
Definition: cDirectionDef.h:30
@ DIR_E
0 radians = +1x, +0y, ex cos(0)=1, sin(0)=0
Definition: cDirectionDef.h:29
@ DIR_SW
Definition: cDirectionDef.h:32
@ DIR_N
+0x, -1y
Definition: cDirectionDef.h:35
@ DIR_QTY
Also means "Center".
Definition: cDirectionDef.h:38
@ DIR_NW
Definition: cDirectionDef.h:34
@ DIR_W
pi rad
Definition: cDirectionDef.h:33
@ DIR_INVALID
Definition: cDirectionDef.h:39
RECTS_TYPE
Definition: cDirectionDef.h:18
@ RECTS_Left
Definition: cDirectionDef.h:21
@ RECTS_Right
Definition: cDirectionDef.h:21
@ RECTS_QTY
Definition: cDirectionDef.h:21
@ RECTS_Top
Definition: cDirectionDef.h:21
@ RECTS_Bottom
Definition: cDirectionDef.h:21
float RADIANf_t
type is float radians
Definition: Calc.h:27
char GChar_t
My version of TCHAR, _TCHAR.
Definition: StrConst.h:26
static TYPE WrapRadians(TYPE nRadians) noexcept
Definition: Calc.h:363