// Ce fichier contient des fonctions pour initialiser des dés personnalisés pour chaque utilisateur du jeu. // Les fonctions permettent de définir des couleurs de dés réguliers, de totem humain et adaptés en fonction de la couleur de l'utilisateur. // De plus, il y a des fonctions pour assombrir et éclaircir une couleur donnée. export async function initUserDice(dice3d, user) { let baseColor = user.color.css; dice3d.addColorset({ name: 'regular_' + user.name, description: "regular dice for " + user.name, category: "vermine 2047", foreground: oppositeColor(baseColor), background: baseColor, outline: 'black', visibility: 'visible', }, "preferred"); dice3d.addColorset({ name: 'human_' + user.name, description: "human totem dice for " + user.name, category: "vermine 2047", foreground: oppositeColor(lightenColor(baseColor, 70)), background: lightenColor(baseColor, 70), outline: 'black', visibility: 'visible', }); dice3d.addColorset({ name: 'adapted_' + user.name, description: "adapted totem dice for " + user.name, category: "vermine 2047", foreground: oppositeColor(darkenColor(baseColor, 70)), background: darkenColor(baseColor, 70), outline: 'black', visibility: 'visible', }); await user.setFlag("world", "diceInit", true); } export function darkenColor(color, percent) { const num = parseInt(color.replace('#', ''), 16); const amt = Math.round(2.55 * percent); const R = (num >> 16) + amt; const G = ((num >> 8) & 0x00FF) + amt; const B = (num & 0x0000FF) + amt; return '#' + (0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 + (G < 255 ? G < 1 ? 0 : G : 255) * 0x100 + (B < 255 ? B < 1 ? 0 : B : 255)).toString(16).slice(1); } export function lightenColor(color, percent) { const num = parseInt(color.replace('#', ''), 16); const amt = Math.round(2.55 * percent); const R = (num >> 16) - amt; const G = ((num >> 8) & 0x00FF) - amt; const B = (num & 0x0000FF) - amt; return '#' + (0x1000000 + (R < 0 ? 0 : R > 255 ? 255 : R) * 0x10000 + (G < 0 ? 0 : G > 255 ? 255 : G) * 0x100 + (B < 0 ? 0 : B > 255 ? 255 : B)).toString(16).slice(1); } export function oppositeColor(color) { const num = parseInt(color.replace('#', ''), 16); const R = 255 - (num >> 16); const G = 255 - ((num >> 8) & 0x00FF); const B = 255 - (num & 0x0000FF); return '#' + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1); }