mirror of
https://github.com/k4zmu2a/SpaceCadetPinball.git
synced 2024-12-18 10:37:53 +01:00
Optimized SDL_RenderDrawCircle.
Change mouse warping strategy in hidden test cheat.
This commit is contained in:
parent
4183e7f0bf
commit
cfe2691892
3 changed files with 42 additions and 18 deletions
|
@ -21,6 +21,8 @@ gdrv_bitmap8* DebugOverlay::dbScreen = nullptr;
|
||||||
|
|
||||||
static int SDL_RenderDrawCircle(SDL_Renderer* renderer, int x, int y, int radius)
|
static int SDL_RenderDrawCircle(SDL_Renderer* renderer, int x, int y, int radius)
|
||||||
{
|
{
|
||||||
|
SDL_Point points[256];
|
||||||
|
int pointCount = 0;
|
||||||
int offsetx, offsety, d;
|
int offsetx, offsety, d;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -29,21 +31,28 @@ static int SDL_RenderDrawCircle(SDL_Renderer* renderer, int x, int y, int radius
|
||||||
d = radius - 1;
|
d = radius - 1;
|
||||||
status = 0;
|
status = 0;
|
||||||
|
|
||||||
while (offsety >= offsetx) {
|
while (offsety >= offsetx)
|
||||||
status += SDL_RenderDrawPoint(renderer, x + offsetx, y + offsety);
|
{
|
||||||
status += SDL_RenderDrawPoint(renderer, x + offsety, y + offsetx);
|
if (pointCount + 8 > 256)
|
||||||
status += SDL_RenderDrawPoint(renderer, x - offsetx, y + offsety);
|
{
|
||||||
status += SDL_RenderDrawPoint(renderer, x - offsety, y + offsetx);
|
status = SDL_RenderDrawPoints(renderer, points, pointCount);
|
||||||
status += SDL_RenderDrawPoint(renderer, x + offsetx, y - offsety);
|
pointCount = 0;
|
||||||
status += SDL_RenderDrawPoint(renderer, x + offsety, y - offsetx);
|
|
||||||
status += SDL_RenderDrawPoint(renderer, x - offsetx, y - offsety);
|
|
||||||
status += SDL_RenderDrawPoint(renderer, x - offsety, y - offsetx);
|
|
||||||
|
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
status = -1;
|
status = -1;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
points[pointCount++] = { x + offsetx, y + offsety };
|
||||||
|
points[pointCount++] = { x + offsety, y + offsetx };
|
||||||
|
points[pointCount++] = { x - offsetx, y + offsety };
|
||||||
|
points[pointCount++] = { x - offsety, y + offsetx };
|
||||||
|
points[pointCount++] = { x + offsetx, y - offsety };
|
||||||
|
points[pointCount++] = { x + offsety, y - offsetx };
|
||||||
|
points[pointCount++] = { x - offsetx, y - offsety };
|
||||||
|
points[pointCount++] = { x - offsety, y - offsetx };
|
||||||
|
|
||||||
if (d >= 2 * offsetx) {
|
if (d >= 2 * offsetx) {
|
||||||
d -= 2 * offsetx + 1;
|
d -= 2 * offsetx + 1;
|
||||||
offsetx += 1;
|
offsetx += 1;
|
||||||
|
@ -59,6 +68,9 @@ static int SDL_RenderDrawCircle(SDL_Renderer* renderer, int x, int y, int radius
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pointCount > 0)
|
||||||
|
status = SDL_RenderDrawPoints(renderer, points, pointCount);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -227,7 +227,8 @@ std::vector<uint8_t>* midi::MdsToMidi(std::string file)
|
||||||
|
|
||||||
fseek(fileHandle, 0, SEEK_END);
|
fseek(fileHandle, 0, SEEK_END);
|
||||||
auto fileSize = static_cast<uint32_t>(ftell(fileHandle));
|
auto fileSize = static_cast<uint32_t>(ftell(fileHandle));
|
||||||
auto fileBuf = reinterpret_cast<riff_header*>(new uint8_t [fileSize]);
|
auto buffer = new uint8_t[fileSize];
|
||||||
|
auto fileBuf = reinterpret_cast<riff_header*>(buffer);
|
||||||
fseek(fileHandle, 0, SEEK_SET);
|
fseek(fileHandle, 0, SEEK_SET);
|
||||||
fread(fileBuf, 1, fileSize, fileHandle);
|
fread(fileBuf, 1, fileSize, fileHandle);
|
||||||
fclose(fileHandle);
|
fclose(fileHandle);
|
||||||
|
@ -371,7 +372,7 @@ std::vector<uint8_t>* midi::MdsToMidi(std::string file)
|
||||||
}
|
}
|
||||||
while (false);
|
while (false);
|
||||||
|
|
||||||
delete[] fileBuf;
|
delete[] buffer;
|
||||||
if (returnCode && midiOut)
|
if (returnCode && midiOut)
|
||||||
{
|
{
|
||||||
delete midiOut;
|
delete midiOut;
|
||||||
|
|
|
@ -211,11 +211,22 @@ int winmain::WinMain(LPCSTR lpCmdLine)
|
||||||
float dy = static_cast<float>(y - last_mouse_y) / static_cast<float>(h);
|
float dy = static_cast<float>(y - last_mouse_y) / static_cast<float>(h);
|
||||||
pb::ballset(dx, dy);
|
pb::ballset(dx, dy);
|
||||||
|
|
||||||
SDL_WarpMouseInWindow(window, last_mouse_x, last_mouse_y);
|
// Original creates continuous mouse movement with mouse capture.
|
||||||
|
// Alternative solution: mouse warp at window edges.
|
||||||
|
int xMod = 0, yMod = 0;
|
||||||
|
if (x == 0 || x >= w - 1)
|
||||||
|
xMod = w - 2;
|
||||||
|
if (y == 0 || y >= h - 1)
|
||||||
|
yMod = h - 2;
|
||||||
|
if (xMod != 0 || yMod != 0)
|
||||||
|
{
|
||||||
|
// Mouse warp does not work over remote desktop or in some VMs
|
||||||
|
x = abs(x - xMod); y = abs(y - yMod);
|
||||||
|
SDL_WarpMouseInWindow(window, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
// Mouse warp does not work over remote desktop or in some VMs
|
last_mouse_x = x;
|
||||||
//last_mouse_x = x;
|
last_mouse_y = y;
|
||||||
//last_mouse_y = y;
|
|
||||||
}
|
}
|
||||||
if (!single_step && !no_time_loss)
|
if (!single_step && !no_time_loss)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue