feat(renderer): polish gameplay visuals — transport, starfield, sparkles, smooth piece motion
Add transport/transfer effect for NEXT → grid with cross-fade and preview swap Integrate in-grid Starfield3D with magnet targeting tied to active piece Spawn ambient sparkles and impact sparks (hard-drop crackle + burst on expiry) Smooth horizontal/fall interpolation for active piece (configurable smooth scroll) Refactor next panel / preview rendering and connector drawing Tweak stats/score panel layout, progress bars and typography for compact view Preserve safe alpha handling and restore renderer blend/scale state after overlays
This commit is contained in:
@ -6,6 +6,7 @@
|
||||
#include "../audio/Audio.h"
|
||||
#include "../audio/SoundEffect.h"
|
||||
#include "../graphics/renderers/GameRenderer.h"
|
||||
#include "../core/Settings.h"
|
||||
#include "../core/Config.h"
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
@ -119,11 +120,18 @@ void PlayingState::handleEvent(const SDL_Event& e) {
|
||||
if (!ctx.game->isPaused()) {
|
||||
// Rotation (still event-based for precise timing)
|
||||
if (e.key.scancode == SDL_SCANCODE_UP) {
|
||||
ctx.game->rotate(1); // Clockwise rotation
|
||||
// Use user setting to determine whether UP rotates clockwise
|
||||
bool upIsCW = Settings::instance().isUpRotateClockwise();
|
||||
ctx.game->rotate(upIsCW ? 1 : -1);
|
||||
return;
|
||||
}
|
||||
if (e.key.scancode == SDL_SCANCODE_X) {
|
||||
ctx.game->rotate(-1); // Counter-clockwise rotation
|
||||
// Toggle the mapping so UP will rotate in the opposite direction
|
||||
bool current = Settings::instance().isUpRotateClockwise();
|
||||
Settings::instance().setUpRotateClockwise(!current);
|
||||
Settings::instance().save();
|
||||
// Play a subtle feedback sound if available
|
||||
SoundEffectManager::instance().playSound("menu_toggle", 0.6f);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user