feat(effects): heat-haze sinusoidal al fons del títol (configurable a ui.yaml)

This commit is contained in:
JailDesigner committed 2026-05-06 11:48:29 +02:00
1 parent 9233bd8d75
commit 1fc3ab8e31
9 files changed
+150 -3

No files matched your search

@@ -0,0 +1,37 @@
#pragma once
class Surface;
namespace Effects {
// Distorsió sinusoidal horitzontal de cada fila: dx(y) =
// amplitude · sin(2π·y/wavelength + phase). La phase avança al
// ritme marcat per `speed_hz` (cicles per segon). Es pinta sobre
// qualsevol Surface — habitualment un fons de canvas — i manté el
// seu propi estat temporal, així dues instàncies poden tenir
// paràmetres i fases independents.
//
// `render()` fa dos passos: primer un blit pla de tota la Surface
// (perquè els marges no quedin descoberts pel desplaçament) i
// després el re-blit fila a fila amb el sin. La costura és
// invisible en fons amb gradient continu i pràcticament invisible
// en altres si l'amplitud és moderada.
class HeatHaze {
public:
struct Params {
float amplitude_px;
float wavelength_px;
float speed_hz;
};
explicit HeatHaze(Params params);
void tick(int delta_ms);
void render(const Surface& src, int x, int y) const;
private:
Params params_;
float phase_{0.0F};
};
} // namespace Effects