Refactor underwater.js to enhance mobile symbol handling and update credits
This commit is contained in:
@@ -1,9 +1,7 @@
|
|||||||
const config = window.SeasonalsPluginConfig?.Underwater || {};
|
const config = window.SeasonalsPluginConfig?.Underwater || {};
|
||||||
|
|
||||||
const underwater = config.EnableUnderwater !== undefined ? config.EnableUnderwater : true;
|
const underwater = config.EnableUnderwater !== undefined ? config.EnableUnderwater : true;
|
||||||
const symbolCount = config.SymbolCount || 15;
|
const symbolCountMobile = config.SymbolCountMobile !== undefined ? config.SymbolCountMobile : 2; // Devisor to reduce number of objects on mobile
|
||||||
const useRandomSymbols = config.EnableRandomSymbols !== undefined ? config.EnableRandomSymbols : true;
|
|
||||||
const enableRandomMobile = config.EnableRandomSymbolsMobile !== undefined ? config.EnableRandomSymbolsMobile : false;
|
|
||||||
const enableDifferentDuration = config.EnableDifferentDuration !== undefined ? config.EnableDifferentDuration : true;
|
const enableDifferentDuration = config.EnableDifferentDuration !== undefined ? config.EnableDifferentDuration : true;
|
||||||
const enableLightRays = config.EnableLightRays !== undefined ? config.EnableLightRays : true;
|
const enableLightRays = config.EnableLightRays !== undefined ? config.EnableLightRays : true;
|
||||||
const seaweedCount = config.SeaweedCount !== undefined ? config.SeaweedCount : 50;
|
const seaweedCount = config.SeaweedCount !== undefined ? config.SeaweedCount : 50;
|
||||||
@@ -17,27 +15,49 @@ const crabCount = config.CrabCount !== undefined ? config.CrabCount : 2;
|
|||||||
const starfishCount = config.StarfishCount !== undefined ? config.StarfishCount : 2;
|
const starfishCount = config.StarfishCount !== undefined ? config.StarfishCount : 2;
|
||||||
const shellCount = config.ShellCount !== undefined ? config.ShellCount : 2;
|
const shellCount = config.ShellCount !== undefined ? config.ShellCount : 2;
|
||||||
|
|
||||||
|
// credits: https://lottiefiles.com/free-animation/seaweed-E6Go0HdkqY
|
||||||
const seaweeds = [
|
const seaweeds = [
|
||||||
"../Seasonals/Resources/underwater_assets/seaweed_1.gif",
|
"../Seasonals/Resources/underwater_assets/seaweed_1.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/seaweed_2.gif"
|
"../Seasonals/Resources/underwater_assets/seaweed_2.gif"
|
||||||
];
|
];
|
||||||
|
|
||||||
// Statics for bottom
|
/**
|
||||||
|
* Credits:
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-krebs-bild-0041-59970.htm
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-krebs-bild-0002-59931.htm
|
||||||
|
*
|
||||||
|
*/
|
||||||
const crabImages = [
|
const crabImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/crab_1.gif",
|
"../Seasonals/Resources/underwater_assets/crab_1.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/crab_2.gif",
|
"../Seasonals/Resources/underwater_assets/crab_2.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/crab_3.gif"
|
"../Seasonals/Resources/underwater_assets/crab_3.gif"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credits:
|
||||||
|
* https://lottiefiles.com/free-animation/dancing-starfish-tJ9ZFu9Zq0
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0003-50003.htm
|
||||||
|
*/
|
||||||
const starfishImages = [
|
const starfishImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/starfish_1.gif",
|
"../Seasonals/Resources/underwater_assets/starfish_1.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/starfish_2.gif"
|
"../Seasonals/Resources/underwater_assets/starfish_2.gif"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Credit: https://www.animierte-gifs.net/img-animiertes-muschel-bild-0021-108539.htm
|
||||||
const shellImages = [
|
const shellImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/shell_1.gif"
|
"../Seasonals/Resources/underwater_assets/shell_1.gif"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credits:
|
||||||
|
* https://lottiefiles.com/free-animation/0101uwt-tt-01-4fA4Lm9gtN
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0473-50473.htm
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0290-50290.htm
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0049-50049.htm
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0403-50403.htm
|
||||||
|
*
|
||||||
|
* https://flaticon.com
|
||||||
|
*/
|
||||||
const fishImages = [
|
const fishImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/fish_1.gif",
|
"../Seasonals/Resources/underwater_assets/fish_1.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/fish_2.gif",
|
"../Seasonals/Resources/underwater_assets/fish_2.gif",
|
||||||
@@ -55,15 +75,22 @@ const fishImages = [
|
|||||||
"../Seasonals/Resources/underwater_assets/fish_15.png"
|
"../Seasonals/Resources/underwater_assets/fish_15.png"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Credits:
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0221-50221.htm
|
||||||
|
* https://www.animierte-gifs.net/img-animiertes-fische-bild-0217-50217.htm
|
||||||
|
*/
|
||||||
const seahorsesImages = [
|
const seahorsesImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/seahorse_1.gif",
|
"../Seasonals/Resources/underwater_assets/seahorse_1.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/seahorse_2.gif"
|
"../Seasonals/Resources/underwater_assets/seahorse_2.gif"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// credit: https://lottiefiles.com/free-animation/sea-turtle-s0sbHIWS2F
|
||||||
const turtleImages = [
|
const turtleImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/turtle.gif"
|
"../Seasonals/Resources/underwater_assets/turtle.gif"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// credits: https://lottiefiles.com/free-animation/jellyfish-wPwyF8EeSQ
|
||||||
const jellyfishImages = [
|
const jellyfishImages = [
|
||||||
"../Seasonals/Resources/underwater_assets/jellyfish_1.gif",
|
"../Seasonals/Resources/underwater_assets/jellyfish_1.gif",
|
||||||
"../Seasonals/Resources/underwater_assets/jellyfish_2.gif"
|
"../Seasonals/Resources/underwater_assets/jellyfish_2.gif"
|
||||||
@@ -137,16 +164,15 @@ function createUnderwater() {
|
|||||||
const useRandomDuration = enableDifferentDuration !== false;
|
const useRandomDuration = enableDifferentDuration !== false;
|
||||||
let isMobile = window.matchMedia("only screen and (max-width: 768px)").matches;
|
let isMobile = window.matchMedia("only screen and (max-width: 768px)").matches;
|
||||||
|
|
||||||
|
|
||||||
// Seaweed swaying at the bottom (evenly distributed based on count)
|
// Seaweed swaying at the bottom (evenly distributed based on count)
|
||||||
const activeSeaweedCount = Math.max(1, seaweedCount);
|
const activeSeaweedCount = isMobile ? Math.max(1, Math.floor(seaweedCount / Math.max(1, symbolCountMobile))) : Math.max(1, seaweedCount);
|
||||||
const seaweedSpacing = 95 / activeSeaweedCount;
|
const seaweedSpacing = 95 / activeSeaweedCount;
|
||||||
for (let i = 0; i < seaweedCount; i++) {
|
for (let i = 0; i < activeSeaweedCount; i++) {
|
||||||
let seaweed = document.createElement('div');
|
let seaweed = document.createElement('div');
|
||||||
seaweed.className = 'underwater-seaweed';
|
seaweed.className = 'underwater-seaweed';
|
||||||
seaweed.style.position = 'absolute';
|
seaweed.style.position = 'absolute';
|
||||||
|
|
||||||
// MARK: Distance from the bottom edge for the seaweed
|
// Distance from the bottom edge for the seaweed
|
||||||
seaweed.style.bottom = '-18px';
|
seaweed.style.bottom = '-18px';
|
||||||
|
|
||||||
let offset = (Math.random() * seaweedSpacing) - (seaweedSpacing / 2);
|
let offset = (Math.random() * seaweedSpacing) - (seaweedSpacing / 2);
|
||||||
@@ -163,7 +189,7 @@ function createUnderwater() {
|
|||||||
seaweed.style.transform = `scale(${scale}) ${flip}`;
|
seaweed.style.transform = `scale(${scale}) ${flip}`;
|
||||||
seaweed.style.zIndex = depth < 0.5 ? '15' : '30';
|
seaweed.style.zIndex = depth < 0.5 ? '15' : '30';
|
||||||
|
|
||||||
// Mix Emojis and GIFs
|
// Mix Emojis and GIFs for seaweed
|
||||||
if (Math.random() > 0.4) {
|
if (Math.random() > 0.4) {
|
||||||
let img = document.createElement('img');
|
let img = document.createElement('img');
|
||||||
img.src = seaweeds[Math.floor(Math.random() * seaweeds.length)];
|
img.src = seaweeds[Math.floor(Math.random() * seaweeds.length)];
|
||||||
@@ -182,9 +208,8 @@ function createUnderwater() {
|
|||||||
|
|
||||||
// Static Bottom Creatures logic
|
// Static Bottom Creatures logic
|
||||||
function spawnStatic(imageArray, maxCount, baseSize) {
|
function spawnStatic(imageArray, maxCount, baseSize) {
|
||||||
// Evaluate an actual count between 1 and maxCount if random symbols are enabled
|
let spawnLimit = isMobile ? Math.floor(maxCount / Math.max(1, symbolCountMobile)) : maxCount;
|
||||||
const actualCount = (useRandomSymbols && maxCount > 0) ? Math.floor(Math.random() * maxCount) + 1 : maxCount;
|
for (let i = 0; i < spawnLimit; i++) {
|
||||||
for (let i = 0; i < actualCount; i++) {
|
|
||||||
let creature = document.createElement('div');
|
let creature = document.createElement('div');
|
||||||
creature.className = 'underwater-static-bottom';
|
creature.className = 'underwater-static-bottom';
|
||||||
creature.style.position = 'absolute';
|
creature.style.position = 'absolute';
|
||||||
@@ -216,13 +241,9 @@ function createUnderwater() {
|
|||||||
// Swimmers logic
|
// Swimmers logic
|
||||||
function spawnSwimmerLoop(imageArray, maxCount, baseSize, typeName) {
|
function spawnSwimmerLoop(imageArray, maxCount, baseSize, typeName) {
|
||||||
if (maxCount <= 0) return;
|
if (maxCount <= 0) return;
|
||||||
let spawnLimit = isMobile ? (enableRandomMobile ? maxCount : Math.floor(maxCount / 2)) : maxCount;
|
let spawnLimit = isMobile ? Math.floor(maxCount / Math.max(1, symbolCountMobile)) : maxCount;
|
||||||
|
|
||||||
// Randomize the actual amount spawned up to the limit
|
for (let i = 0; i < spawnLimit; i++) {
|
||||||
const actualCount = (useRandomSymbols && spawnLimit > 0) ? Math.floor(Math.random() * spawnLimit) + 1 : spawnLimit;
|
|
||||||
|
|
||||||
for (let i = 0; i < actualCount; i++) {
|
|
||||||
// Spawn immediately but use negative delay to distribute them across the screen!
|
|
||||||
spawnSingleSwimmer(imageArray, baseSize, typeName);
|
spawnSingleSwimmer(imageArray, baseSize, typeName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user