sparticles icon indicating copy to clipboard operation
sparticles copied to clipboard

Change `count` logic to `density` logic

Open cyrilchapon opened this issue 2 years ago • 3 comments

Hi,

Reading the warning about mobile performance; it came to me the idea that count is practically a nonsense in a resizable environment.

When implementing "snow" effect for example; what you want is a constant visual density, instead of a constant "number of flakes". Thus, I implemented a new density logic. I defaulted this to keep the same count as of today on a classic fullscreen desktop container (1400 * 660).

It will recalculate the count, which is now dynamic based on density x resolution.

It's also less dangerous on mobile; based on the naïve principle of "a larger screen resolution basically often mean a stronger GPU calculation capacities".


This is a breaking change, non backward compatible

cyrilchapon avatar Dec 09 '22 14:12 cyrilchapon

hi @cyrilchapon , I understand and like this modification ... however, what if we didn't make it breaking/incompatible?

if I'm not mistaken, this line;

this.count = Math.ceil((this.resolution / BASE_RESOLUTION) * this.settings.density);

could be changed to;

this.count = Math.ceil(
  typeof this.settings.density !== "undefined" ? 
    this.resolution / BASE_RESOLUTION * this.settings.density : 
    this.settings.count
  );

which would allow for anyone using count to continue doing so?

simeydotme avatar Dec 09 '22 19:12 simeydotme

Hey @simeydotme,

This is not stupid at all; I'd slightly change it though, maybe making (and documenting) the opposite (density prioritized over count), to make density the new-normal; but keep backward compatibility with count. Maybe marking count deprecated in the code, but still working.

(the reason being simple : density being way less dangerous than count for lower resolution, despite the warning on homepage)

cyrilchapon avatar Dec 12 '22 08:12 cyrilchapon

I wrote that quite late, but I think it is doing just as you propose; if density is undefined, then use count. but if density is defined; use density. and all the other code (default density, and document density) remains. so new users will be using density, and old users will have no problems.

simeydotme avatar Dec 12 '22 19:12 simeydotme