cave-story-solaris/src/Triangle.cpp
Gabriel Ravier 960fa6f456 Removed all trailing spaces and added newline at EOF (when not present)
Also changed a "linux" to "Linux"

Signed-off-by: Gabriel Ravier <gabravier@gmail.com>
2019-05-07 11:55:42 +02:00

123 lines
1.5 KiB
C++

#include "Triangle.h"
#include <stdint.h>
#include <math.h>
int gSin[0x100];
int16_t gTan[0x21];
void InitTriangleTable()
{
int i;
float a;
float b;
//Sine
for (i = 0; i < 0x100; ++i)
{
gSin[i] = (int)(sin(i * 6.2831998 / 256.0) * 512.0);
}
//Tangent
for (i = 0; i < 0x21; ++i)
{
a = (float)(i * 6.2831855f / 256.0f);
b = sinf(a) / cosf(a);
gTan[i] = (int16_t)(b * 8192.0f);
}
}
int GetSin(uint8_t deg)
{
return gSin[deg];
}
int GetCos(uint8_t deg)
{
deg += 0x40;
return gSin[deg];
}
uint8_t GetArktan(int x, int y)
{
x *= -1;
y *= -1;
uint8_t a = 0;
int16_t k;
if (x > 0)
{
if (y > 0)
{
if (x > y)
{
k = (y * 0x2000) / x;
while (k > gTan[a])
++a;
}
else
{
k = (x * 0x2000) / y;
while (k > gTan[a])
++a;
a = 0x40 - a;
}
}
else
{
if (x > -y)
{
k = (-y * 0x2000) / x;
while (k > gTan[a])
++a;
a = 0x100 - a;
}
else
{
k = (x * 0x2000) / -y;
while (k > gTan[a])
++a;
a = 0x100 - 0x40 + a;
}
}
}
else
{
if (y > 0)
{
if (-x > y)
{
k = (y * 0x2000) / -x;
while (k > gTan[a])
++a;
a = 0x80 - a;
}
else
{
k = (-x * 0x2000) / y;
while (k > gTan[a])
++a;
a = 0x40 + a;
}
}
else
{
if (-x > -y)
{
k = (-y * 0x2000) / -x;
while (k > gTan[a])
++a;
a = 0x80 + a;
}
else
{
k = (-x * 0x2000) / -y;
while (k > gTan[a])
++a;
a = 0x100 - 0x40 - a;
}
}
}
return a;
}