#include "ValueView.h" #include #include "WindowsWrapper.h" #include "Draw.h" VALUEVIEW gVV[VALUEVIEW_MAX]; int gVVIndex; void ClearValueView(void) { memset(gVV, 0, sizeof(gVV)); gVVIndex = 0; } void SetValueView(int *px, int *py, int value) { BOOL minus; int v; int index; int i; for (i = 0; i < VALUEVIEW_MAX; ++i) { if (gVV[i].flag && gVV[i].px == px) { if (gVV[i].value < 0 && value < 0) break; if (gVV[i].value > 0 && value > 0) break; } } 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[index].count = 32; gVV[index].value += value; value = gVV[index].value; } // Get if negative or not if (value < 0) { value *= -1; minus = TRUE; } else { minus = FALSE; } // Get width v = value; int width; if (value > 999) width = 40; else if (value > 99) width = 32; else if (value > 9) width = 24; else width = 16; // Set properties gVV[index].flag = TRUE; 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] = { {0, 56, 8, 64}, {8, 56, 16, 64}, {16, 56, 24, 64}, {24, 56, 32, 64}, {32, 56, 40, 64}, {40, 56, 48, 64}, {48, 56, 56, 64}, {56, 56, 64, 64}, {64, 56, 72, 64}, {72, 56, 80, 64}, {0, 64, 8, 72}, {8, 64, 16, 72}, {16, 64, 24, 72}, {24, 64, 32, 72}, {32, 64, 40, 72}, {40, 64, 48, 72}, {48, 64, 56, 72}, {56, 64, 64, 72}, {64, 64, 72, 72}, {72, 64, 80, 72}, }; // Get digits int dig[4]; int fig[4]; dig[0] = 1; dig[1] = 10; dig[2] = 100; dig[3] = 1000; for (i = 3; i >= 0; --i) { fig[i] = 0; while (v >= dig[i]) { v -= dig[i]; ++fig[i]; } } BOOL sw = FALSE; RECT rcPlus = {32, 48, 40, 56}; RECT rcMinus = {40, 48, 48, 56}; // Draw value CortBox2(&gVV[index].rect, 0x000000, SURFACE_ID_VALUE_VIEW); if (minus) Surface2Surface(gVV[index].rect.left, gVV[index].rect.top, &rcMinus, SURFACE_ID_VALUE_VIEW, SURFACE_ID_TEXT_BOX); else Surface2Surface(gVV[index].rect.left, gVV[index].rect.top, &rcPlus, SURFACE_ID_VALUE_VIEW, SURFACE_ID_TEXT_BOX); for (i = 3; i >= 0; i--) { if (!sw && i != 0 && fig[i] == 0) continue; sw = TRUE; if (minus) fig[i] += 10; Surface2Surface(((3 - i) * 8) + 8, gVV[index].rect.top, &rect[fig[i]], SURFACE_ID_VALUE_VIEW, SURFACE_ID_TEXT_BOX); } } void ActValueView(void) { int v; for (v = 0; v < VALUEVIEW_MAX; ++v) { if (gVV[v].flag == FALSE) continue; 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 = FALSE; } } void PutValueView(int flx, int fly) { int offset_x; int v; for (v = 0; v < VALUEVIEW_MAX; ++v) { if (gVV[v].flag == FALSE) continue; offset_x = (gVV[v].rect.right - gVV[v].rect.left) / 2; PutBitmap3( &grcGame, SubpixelToScreenCoord(*gVV[v].px) - PixelToScreenCoord(offset_x) - SubpixelToScreenCoord(flx), SubpixelToScreenCoord(*gVV[v].py) + SubpixelToScreenCoord(gVV[v].offset_y) - PixelToScreenCoord(4) - SubpixelToScreenCoord(fly), &gVV[v].rect, SURFACE_ID_VALUE_VIEW); } }