Tweaked ball mouse control cheat.

This commit is contained in:
Muzychenko Andrey 2021-10-10 17:13:43 +03:00
parent 69ecce88df
commit 5947727f80
3 changed files with 16 additions and 9 deletions

View File

@ -201,11 +201,13 @@ void pb::replay_level(int demoMode)
MainTable->Message(1014, static_cast<float>(options::Options.Players)); MainTable->Message(1014, static_cast<float>(options::Options.Players));
} }
void pb::ballset(int x, int y) void pb::ballset(float dx, float dy)
{ {
// dx and dy are normalized to window, ideally in [-1, 1]
static constexpr float sensitivity = 7000;
TBall* ball = MainTable->BallList.at(0); TBall* ball = MainTable->BallList.at(0);
ball->Acceleration.X = x * 30.0f; ball->Acceleration.X = dx * sensitivity;
ball->Acceleration.Y = y * 30.0f; ball->Acceleration.Y = dy * sensitivity;
ball->Speed = maths::normalize_2d(&ball->Acceleration); ball->Speed = maths::normalize_2d(&ball->Acceleration);
} }

View File

@ -48,7 +48,7 @@ public:
static void mode_change(int mode); static void mode_change(int mode);
static void toggle_demo(); static void toggle_demo();
static void replay_level(int demoMode); static void replay_level(int demoMode);
static void ballset(int x, int y); static void ballset(float dx, float dy);
static void frame(float dtMilliSec); static void frame(float dtMilliSec);
static void timed_frame(float timeNow, float timeDelta, bool drawBalls); static void timed_frame(float timeNow, float timeDelta, bool drawBalls);
static void window_size(int* width, int* height); static void window_size(int* width, int* height);

View File

@ -212,10 +212,18 @@ int winmain::WinMain(LPCSTR lpCmdLine)
{ {
if (mouse_down) if (mouse_down)
{ {
int x, y; int x, y, w, h;
SDL_GetMouseState(&x, &y); SDL_GetMouseState(&x, &y);
pb::ballset(last_mouse_x - x, y - last_mouse_y); SDL_GetWindowSize(window, &w, &h);
float dx = (last_mouse_x - x) / static_cast<float>(w);
float dy = (y - last_mouse_y) / static_cast<float>(h);
pb::ballset(dx, dy);
SDL_WarpMouseInWindow(window, last_mouse_x, last_mouse_y); SDL_WarpMouseInWindow(window, last_mouse_x, last_mouse_y);
// Mouse warp does not work over remote desktop or in some VMs
//last_mouse_x = x;
//last_mouse_y = y;
} }
if (!single_step) if (!single_step)
{ {
@ -560,7 +568,6 @@ int winmain::event_handler(const SDL_Event* event)
if (mouse_down) if (mouse_down)
{ {
mouse_down = 0; mouse_down = 0;
SDL_ShowCursor(SDL_ENABLE);
SDL_SetWindowGrab(MainWindow, SDL_FALSE); SDL_SetWindowGrab(MainWindow, SDL_FALSE);
} }
switch (event->type) switch (event->type)
@ -665,7 +672,6 @@ int winmain::event_handler(const SDL_Event* event)
mouse_down = 1; mouse_down = 1;
last_mouse_x = event->button.x; last_mouse_x = event->button.x;
last_mouse_y = event->button.y; last_mouse_y = event->button.y;
SDL_ShowCursor(SDL_DISABLE);
SDL_SetWindowGrab(MainWindow, SDL_TRUE); SDL_SetWindowGrab(MainWindow, SDL_TRUE);
} }
else else
@ -689,7 +695,6 @@ int winmain::event_handler(const SDL_Event* event)
if (mouse_down) if (mouse_down)
{ {
mouse_down = 0; mouse_down = 0;
SDL_ShowCursor(SDL_ENABLE);
SDL_SetWindowGrab(MainWindow, SDL_FALSE); SDL_SetWindowGrab(MainWindow, SDL_FALSE);
} }
if (!pb::cheat_mode) if (!pb::cheat_mode)