mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-16 17:31:24 +01:00
* feat: routes generation * feat: routes rendering * feat: searoutes fix, changing reGraph * feat: searoute - change pathfinding algo * feat: routes - cleanup code * feat: routes - change data format * feat: routes - add routes to json export * feat: edit routes - start * feat: edit routes - main * feat: edit routes - EP * feat: edit routes - remove route * feat: route - generate names * feat: route - continue * Refactor route merging logic for improved performance * feat: routes - show name in tooltip * feat: routes - create route dialog * feat: update data on control point remove * feat: routes editor - split route * feat: add join route functionality to routes editor * feat: Add join route functionality to routes editor * feat: Update join route tooltip in routes editor * feat: routes overview - sort by length * feat: routes overview - fix distanceScale value * feat: routes overview - create route * Refactor getMiddlePoint function to getCloseToEdgePoint * feat: routes - change data format, fix issues * feat: routes - regenerateRoutes * feat: routes - add route on burg creation * chore - remove merge conflict markers * chore - remove merge conflict markers * feat: routes name - no unnamed burg names * feat: routes - lock routes * fix: routes - split routes * feat: routes - tip correction * feat: routes - auto-update part 1 * feat: routes - return old rePacj logic to not break auto-update * feat: routes - auto-update - add connections --------- Co-authored-by: Azgaar <azgaar.fmg@yandex.com>
49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
"use strict";
|
|
// FMG utils related to colors
|
|
|
|
// convert RGB color string to HEX without #
|
|
function toHEX(rgb) {
|
|
if (rgb.charAt(0) === "#") return rgb;
|
|
|
|
rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
|
|
return rgb && rgb.length === 4
|
|
? "#" +
|
|
("0" + parseInt(rgb[1], 10).toString(16)).slice(-2) +
|
|
("0" + parseInt(rgb[2], 10).toString(16)).slice(-2) +
|
|
("0" + parseInt(rgb[3], 10).toString(16)).slice(-2)
|
|
: "";
|
|
}
|
|
|
|
const C_12 = [
|
|
"#dababf",
|
|
"#fb8072",
|
|
"#80b1d3",
|
|
"#fdb462",
|
|
"#b3de69",
|
|
"#fccde5",
|
|
"#c6b9c1",
|
|
"#bc80bd",
|
|
"#ccebc5",
|
|
"#ffed6f",
|
|
"#8dd3c7",
|
|
"#eb8de7"
|
|
];
|
|
const scaleRainbow = d3.scaleSequential(d3.interpolateRainbow);
|
|
|
|
// return array of standard shuffled colors
|
|
function getColors(number) {
|
|
const colors = d3.shuffle(
|
|
d3.range(number).map(i => (i < 12 ? C_12[i] : d3.color(scaleRainbow((i - 12) / (number - 12))).hex()))
|
|
);
|
|
return colors;
|
|
}
|
|
|
|
function getRandomColor() {
|
|
return d3.color(d3.scaleSequential(d3.interpolateRainbow)(Math.random())).hex();
|
|
}
|
|
|
|
// mix a color with a random color
|
|
function getMixedColor(color, mix = 0.2, bright = 0.3) {
|
|
const c = color && color[0] === "#" ? color : getRandomColor(); // if provided color is not hex (e.g. harching), generate random one
|
|
return d3.color(d3.interpolate(c, getRandomColor())(mix)).brighter(bright).hex();
|
|
}
|