feat(effects): heat-haze sinusoidal al fons del títol (configurable a ui.yaml)
This commit is contained in:
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
|
||||
Reference in new issue
Block a user