FastLED 3.9.15
Loading...
Searching...
No Matches
luminova.h
Go to the documentation of this file.
1#pragma once
2
3#include "fl/stdint.h"
4
5#include "FastLED.h"
6#include "fl/blur.h"
7#include "fl/clamp.h"
8#include "fl/math.h"
9#include "fl/memory.h"
10#include "fl/vector.h"
11#include "fl/xymap.h"
12#include "fx/fx2d.h"
13#include "noise.h"
14
15namespace fl {
16
18
20 // Global fade amount applied each frame (higher = faster fade)
21 uint8_t fade_amount = 18;
22 // Blur amount applied each frame for trail softness
23 uint8_t blur_amount = 24;
24 // Per-dot gain applied to plotted pixels to prevent blowout on small grids
25 uint8_t point_gain = 128; // 50%
26 // Number of particles alive in the system (upper bound)
27 int max_particles = 256;
28};
29
30// 2D particle field with soft white trails inspired by the Luminova example.
31class Luminova : public Fx2d {
32 public:
34
35 explicit Luminova(const XYMap &xyMap, const Params &params = Params());
36
37 void draw(DrawContext context) override;
38
39 fl::string fxName() const override { return "Luminova"; }
40
41 void setFadeAmount(uint8_t fade_amount) { mParams.fade_amount = fade_amount; }
42 void setBlurAmount(uint8_t blur_amount) { mParams.blur_amount = blur_amount; }
43 void setPointGain(uint8_t point_gain) { mParams.point_gain = point_gain; }
44
45 // Adjust maximum particle slots (reinitializes pool if size changes)
46 void setMaxParticles(int max_particles);
47
48 private:
49 struct Particle {
50 float x = 0.0f;
51 float y = 0.0f;
52 float a = 0.0f; // angle
53 int f = 0; // direction (+1 or -1)
54 int g = 0; // group id (derived from time)
55 float s = 0.0f; // stroke weight / intensity
56 bool alive = false;
57 };
58
59 void resetParticle(Particle &p, fl::u32 tick);
60 void plotDot(CRGB *leds, int x, int y, uint8_t v) const;
61 void plotSoftDot(CRGB *leds, float fx, float fy, float s) const;
62
64 fl::u32 mTick = 0;
66};
67
68} // namespace fl
CRGB leds[NUM_LEDS]
int y
Definition simple.h:93
int x
Definition simple.h:92
central include file for FastLED, defines the CFastLED class/object
uint16_t xyMap(uint16_t x, uint16_t y) const
Definition fx2d.h:21
Fx2d(const XYMap &xyMap)
Definition fx2d.h:20
_DrawContext DrawContext
Definition fx.h:21
void resetParticle(Particle &p, fl::u32 tick)
Definition luminova.cpp:36
fl::u32 mTick
Definition luminova.h:64
LuminovaParams Params
Definition luminova.h:33
Params mParams
Definition luminova.h:63
fl::string fxName() const override
Definition luminova.h:39
void setBlurAmount(uint8_t blur_amount)
Definition luminova.h:42
Luminova(const XYMap &xyMap, const Params &params=Params())
Definition luminova.cpp:9
void plotDot(CRGB *leds, int x, int y, uint8_t v) const
Definition luminova.cpp:55
fl::vector< Particle > mParticles
Definition luminova.h:65
void draw(DrawContext context) override
Definition luminova.cpp:86
void setMaxParticles(int max_particles)
Definition luminova.cpp:22
void setFadeAmount(uint8_t fade_amount)
Definition luminova.h:41
void plotSoftDot(CRGB *leds, float fx, float fy, float s) const
Definition luminova.cpp:63
void setPointGain(uint8_t point_gain)
Definition luminova.h:43
HeapVector< T, Allocator > vector
Definition vector.h:1214
IMPORTANT!
Definition crgb.h:20
uint8_t fade_amount
Definition luminova.h:21
uint8_t point_gain
Definition luminova.h:25
uint8_t blur_amount
Definition luminova.h:23
Functions to generate and fill arrays with noise.
#define FASTLED_SMART_PTR(type)
Definition ptr.h:33
Representation of an RGB pixel (Red, Green, Blue)
Definition crgb.h:86