cave-story-solaris/src/ValueView.cpp
cuckydev 1e748f9406 fix
2019-02-09 23:07:23 -05:00

187 lines
3.4 KiB
C++

#include <string.h>
#include "WindowsWrapper.h"
#include "ValueView.h"
#include "Game.h"
#include "Draw.h"
#define VALUEVIEW_MAX 0x10
VALUEVIEW gVV[VALUEVIEW_MAX];
int gVVIndex;
void ClearValueView()
{
memset(gVV, 0, sizeof(gVV));
gVVIndex = 0;
}
void SetValueView(int *px, int *py, int value)
{
int i;
//TODO: Boi I'm reaaaally boutta getcho pickle chin aah boi, egg head like collard greens head ass boi, ol' hell dat bell dirt aaah boi stank ah boi afro head ass, lip gloss chin ah boi ugly ahhh boi *snort* uglaaaa
for (i = 0; i < VALUEVIEW_MAX && (!gVV[i].flag || gVV[i].px != px || ((gVV[i].value >= 0 || value >= 0) && (gVV[i].value <= 0 || value <= 0))); i++);
int index;
if (i == VALUEVIEW_MAX)
{
index = gVVIndex++;
if (gVVIndex == VALUEVIEW_MAX)
gVVIndex = 0;
gVV[index].count = 0;
gVV[index].offset_y = 0;
gVV[index].value = value;
}
else
{
index = i;
gVV[i].count = 32;
gVV[index].value += value;
value = gVV[index].value;
}
//Get if negative or not
bool minus;
if (value >= 0)
{
minus = false;
}
else
{
value = -value;
minus = true;
}
//Get width
int v = value;
int width;
if (value < 1000)
{
if (value < 100)
{
if (value < 10)
width = 16;
else
width = 24;
}
else
{
width = 32;
}
}
else
{
width = 40;
}
//Set properties
gVV[index].flag = 1;
gVV[index].px = px;
gVV[index].py = py;
gVV[index].rect.left = 40 - width;
gVV[index].rect.top = 8 * index;
gVV[index].rect.right = 40;
gVV[index].rect.bottom = 8 * (index + 1);
RECT rect[20];
rect[0] = {0, 56, 8, 64};
rect[1] = {8, 56, 16, 64};
rect[2] = {16, 56, 24, 64};
rect[3] = {24, 56, 32, 64};
rect[4] = {32, 56, 40, 64};
rect[5] = {40, 56, 48, 64};
rect[6] = {48, 56, 56, 64};
rect[7] = {56, 56, 64, 64};
rect[8] = {64, 56, 72, 64};
rect[9] = {72, 56, 80, 64};
rect[10] = {0, 64, 8, 72};
rect[11] = {8, 64, 16, 72};
rect[12] = {16, 64, 24, 72};
rect[13] = {24, 64, 32, 72};
rect[14] = {32, 64, 40, 72};
rect[15] = {40, 64, 48, 72};
rect[16] = {48, 64, 56, 72};
rect[17] = {56, 64, 64, 72};
rect[18] = {64, 64, 72, 72};
rect[19] = {72, 64, 80, 72};
//Get digits
int dig[4];
dig[0] = 1;
dig[1] = 10;
dig[2] = 100;
dig[3] = 1000;
int fig[4];
for (int d = 3; d >= 0; d--)
{
fig[d] = 0;
while (dig[d] <= v)
{
v -= dig[d];
++fig[d];
}
}
bool sw = false;
RECT rcPlus = {32, 48, 40, 56};
RECT rcMinus = {40, 48, 48, 56};
//Draw value
CortBox2(&gVV[index].rect, 0x000000, 29);
if (minus)
Surface2Surface(gVV[index].rect.left, gVV[index].rect.top, &rcMinus, 29, 26);
else
Surface2Surface(gVV[index].rect.left, gVV[index].rect.top, &rcPlus, 29, 26);
for (int i = 3; i >= 0; i--)
{
if (sw || !i || fig[i])
{
sw = true;
if (minus)
fig[i] += 10;
Surface2Surface(8 * (4 - i), gVV[index].rect.top, &rect[fig[i]], 29, 26);
}
}
}
void ActValueView()
{
for (int v = 0; v < VALUEVIEW_MAX; v++)
{
if (gVV[v].flag)
{
if (++gVV[v].count < 32)
gVV[v].offset_y -= 0x100;
if ( gVV[v].count > 72 )
++gVV[v].rect.top;
if ( gVV[v].count > 80 )
gVV[v].flag = 0;
}
}
}
void PutValueView(int flx, int fly)
{
for (int v = 0; v < VALUEVIEW_MAX; v++)
{
if (gVV[v].flag)
{
PutBitmap3(
&grcGame,
(*gVV[v].px) / 0x200 - (gVV[v].rect.right - gVV[v].rect.left) / 2 - flx / 0x200,
(*gVV[v].py) / 0x200 + gVV[v].offset_y / 0x200 - 4 - fly / 0x200,
&gVV[v].rect,
29);
}
}
}