World of Might and Magic  0.2.0
Open reimplementation of Might and Magic 6 7 8 game engine
Структура stru193_math

#include <OurMath.h>

Открытые члены

 stru193_math ()
 
int Cos (int angle)
 
unsigned int Atan2 (int x, int y)
 
int Sin (int angle)
 

Открытые атрибуты

int pTanTable [520]
 
int pCosTable [520]
 
int pInvCosTable [520]
 

Статические открытые данные

static const unsigned int uIntegerPi = 1024
 
static const unsigned int uIntegerHalfPi = 512
 
static const unsigned int uIntegerDoublePi = 2048
 
static const unsigned int uDoublePiMask = 2047
 
static const unsigned int uPiMask = 1023
 
static const unsigned int uHalfPiMask = 511
 

Подробное описание

См. определение в файле OurMath.h строка 79

Конструктор(ы)

◆ stru193_math()

stru193_math::stru193_math ( )

См. определение в файле OurMath.cpp строка 5

5  {
6  double v3; // ST18_8@2
7 
8  this->pTanTable[0] = 0;
9  this->pCosTable[0] = 65536;
10  this->pInvCosTable[0] = 65536;
11  for (int i = 1; i < (signed int)this->uIntegerHalfPi; i++) {
12  v3 = (double)i * pi_double / (double)uIntegerPi;
13  pTanTable[i] =
14  (signed __int64)(tan(v3) * (double)this->pCosTable[0] + 0.5);
15  pCosTable[i] =
16  (signed __int64)(cos(v3) * (double)this->pCosTable[0] + 0.5);
17  pInvCosTable[i] =
18  (signed __int64)(1.0 / cos(v3) * (double)this->pCosTable[0] + 0.5);
19  }
20  for (int i = this->uIntegerHalfPi; i < 520; i++) {
21  this->pTanTable[i] = 0xEFFFFFFFu;
22  this->pCosTable[i] = 0;
23  this->pInvCosTable[i] = 0xEFFFFFFFu;
24  }
25 }

Перекрестные ссылки pCosTable, pInvCosTable, pTanTable, uIntegerHalfPi и uIntegerPi.

Методы

◆ Cos()

int stru193_math::Cos ( int  angle)

См. определение в файле OurMath.cpp строка 28

28  {
29  int v2; // eax@1
30 
31  // a2: (angle - uIntegerHalfPi) for sin(angle)
32  // (angle) for cos(angle)
33 
35 
36  if (v2 > uIntegerPi) v2 = uIntegerDoublePi - v2;
37  if (v2 >= uIntegerHalfPi)
38  return -pCosTable[uIntegerPi - v2];
39  else
40  return pCosTable[v2];
41 }

Перекрестные ссылки pCosTable, uDoublePiMask, uIntegerDoublePi, uIntegerHalfPi и uIntegerPi.

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), _45063B_spawn_some_monster(), Actor::AI_Pursue1(), BLV_ProcessPartyActions(), IndoorCameraD3D::CalculateRotations(), SpriteObject::Create(), Render::DrawIndoorSky(), RenderOpenGL::DrawOutdoorSkyD3D(), Render::DrawOutdoorSkyD3D(), IsBModelVisible(), ODM_ProcessPartyActions(), Sin(), SpawnEncounter(), sub_44FA4C_spawn_light_elemental(), Actor::SummonMinion(), UpdateActors_BLV(), UpdateActors_ODM(), SpriteObject::UpdateObject_fn0_BLV(), SpriteObject::UpdateObject_fn0_ODM() и OutdoorLocation::UpdateSunlightVectors().

+ Граф вызова функции:

◆ Atan2()

unsigned int stru193_math::Atan2 ( int  x,
int  y 
)

См. определение в файле OurMath.cpp строка 46

46  {
47  signed int quadrant;
48  __int64 dividend;
49  int quotient;
50  int lowIdx;
51  int highIdx;
52  int angle;
53 
54  int X = x;
55  int Y = y;
56 
57  if (abs(X) < 65536) {
58  if ((abs(Y) >> 15) >= abs(X)) X = 0;
59  }
60 
61  if (!X) {
62  if (Y > 0) {
63  return uIntegerHalfPi; // Pi/2
64  } else {
65  return uIntegerHalfPi + uIntegerPi; // 3*(Pi/2)
66  }
67  }
68 
69  if (Y) {
70  if (X < 0) {
71  X = -X;
72  if (Y > 0) {
73  quadrant = 4;
74  } else {
75  quadrant = 3;
76  }
77  } else {
78  if (Y > 0) {
79  quadrant = 1;
80  } else {
81  quadrant = 2;
82  }
83  }
84 
85  if (Y < 0) Y = -Y;
86 
87  HEXRAYS_LODWORD(dividend) = Y << 16;
88  HEXRAYS_HIDWORD(dividend) = Y >> 16;
89  quotient = dividend / X;
90 
91  // looks like binary search
92  {
93  int i;
94  highIdx = uIntegerHalfPi;
95  lowIdx = 0;
96 
97  for (i = 0; i < 6; ++i) {
98  if (quotient <= pTanTable[(lowIdx + highIdx) / 2])
99  highIdx = (lowIdx + highIdx) / 2;
100  else
101  lowIdx = (lowIdx + highIdx) / 2;
102  }
103  }
104 
105  angle = lowIdx + 1;
106  while (angle < (highIdx - 1) && quotient >= pTanTable[angle]) ++angle;
107 
108  switch (quadrant) {
109  case 1: // X > 0, Y > 0
110  return angle;
111 
112  case 2: // X > 0, Y < 0
113  return uIntegerDoublePi - angle; // 2*Pi - angle
114 
115  case 3: // X > 0, Y < 0
116  return uIntegerPi + angle; // Pi + angle
117 
118  case 4: // X < 0, Y > 0
119  return uIntegerPi - angle; // Pi - angle
120  }
121 
122  // should never get here
123  return 0;
124  }
125 
126  if (X < 0) // Y == 0, X < 0
127  return uIntegerPi;
128 
129  return 0;
130 }

Перекрестные ссылки pTanTable, uIntegerDoublePi, uIntegerHalfPi и uIntegerPi.

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), Actor::AI_Bored(), Actor::AI_Pursue1(), Actor::AI_RandomMove(), Actor::AI_SpellAttack(), BLV_ProcessPartyActions(), RenderBase::DrawSpriteObjects_ODM(), EventCastSpell(), Actor::GetDirectionInfo(), ODM_ProcessPartyActions(), Chest::Open(), IndoorLocation::PrepareActorRenderList_BLV(), OutdoorLocation::PrepareActorsDrawList(), IndoorLocation::PrepareDecorationsRenderList_BLV(), RenderOpenGL::PrepareDecorationsRenderList_ODM(), Render::PrepareDecorationsRenderList_ODM(), IndoorLocation::PrepareItemsRenderList_BLV(), RenderOpenGL::RenderTerrainD3D(), sub_407A1C(), UnprojectX(), UnprojectY(), UpdateActors_BLV(), UpdateActors_ODM(), SpriteObject::UpdateObject_fn0_BLV() и SpriteObject::UpdateObject_fn0_ODM().

+ Граф вызова функции:

◆ Sin()

int stru193_math::Sin ( int  angle)

См. определение в файле OurMath.cpp строка 133

133 { return Cos(angle - this->uIntegerHalfPi); }

Перекрестные ссылки Cos() и uIntegerHalfPi.

Используется в CastSpellInfoHelpers::_427E01_cast_spell(), _45063B_spawn_some_monster(), Actor::AI_Pursue1(), BLV_ProcessPartyActions(), IndoorCameraD3D::CalculateRotations(), SpriteObject::Create(), Render::DrawIndoorSky(), RenderOpenGL::DrawOutdoorSkyD3D(), Render::DrawOutdoorSkyD3D(), IsBModelVisible(), ODM_ProcessPartyActions(), SpawnEncounter(), sub_44FA4C_spawn_light_elemental(), Actor::SummonMinion(), UpdateActors_BLV(), UpdateActors_ODM(), SpriteObject::UpdateObject_fn0_BLV(), SpriteObject::UpdateObject_fn0_ODM() и OutdoorLocation::UpdateSunlightVectors().

+ Граф вызовов:
+ Граф вызова функции:

Данные класса

◆ pTanTable

int stru193_math::pTanTable[520]

См. определение в файле OurMath.h строка 85

Используется в Atan2(), ODMRenderParams::Initialize() и stru193_math().

◆ pCosTable

int stru193_math::pCosTable[520]

См. определение в файле OurMath.h строка 86

Используется в Cos() и stru193_math().

◆ pInvCosTable

int stru193_math::pInvCosTable[520]

См. определение в файле OurMath.h строка 87

Используется в stru193_math().

◆ uIntegerPi

◆ uIntegerHalfPi

◆ uIntegerDoublePi

◆ uDoublePiMask

const unsigned int stru193_math::uDoublePiMask = 2047
static

См. определение в файле OurMath.h строка 91

Используется в Actor::AI_Flee(), BLV_ProcessPartyActions(), Cos(), DrawBook_Map_sub(), EventProcessor(), GameUI_DrawMinimap() и ODM_ProcessPartyActions().

◆ uPiMask

const unsigned int stru193_math::uPiMask = 1023
static

См. определение в файле OurMath.h строка 92

Используется в ODMRenderParams::Initialize().

◆ uHalfPiMask

const unsigned int stru193_math::uHalfPiMask = 511
static

См. определение в файле OurMath.h строка 93


Объявления и описания членов структур находятся в файлах:
stru193_math::uIntegerDoublePi
static const unsigned int uIntegerDoublePi
Definition: OurMath.h:90
stru193_math::uDoublePiMask
static const unsigned int uDoublePiMask
Definition: OurMath.h:91
stru193_math::uIntegerHalfPi
static const unsigned int uIntegerHalfPi
Definition: OurMath.h:89
stru193_math::pCosTable
int pCosTable[520]
Definition: OurMath.h:86
y
EGLSurface EGLint EGLint y
Definition: SDL_egl.h:1596
x
EGLSurface EGLint x
Definition: SDL_egl.h:1596
stru193_math::pTanTable
int pTanTable[520]
Definition: OurMath.h:85
stru193_math::pInvCosTable
int pInvCosTable[520]
Definition: OurMath.h:87
v2
GLfloat GLfloat GLfloat v2
Definition: SDL_opengl_glext.h:695
v3
GLfloat GLfloat GLfloat GLfloat v3
Definition: SDL_opengl_glext.h:696
stru193_math::Cos
int Cos(int angle)
Definition: OurMath.cpp:28
angle
GLfloat angle
Definition: SDL_opengl_glext.h:6100
stru193_math::uIntegerPi
static const unsigned int uIntegerPi
Definition: OurMath.h:88