Skip to content

Commit e08b611

Browse files
committed
UI to make relatives kind of works
1 parent b4fc8c4 commit e08b611

File tree

3 files changed

+40
-16
lines changed

3 files changed

+40
-16
lines changed

public/editor/shuffleFace.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { generate } from "../../src/generate";
33
import { CombinedState, GallerySectionConfig } from "./types";
44
import { deleteFromDict, pickRandom } from "./utils";
55
import { jerseyColorOptions } from "./defaultColors";
6-
import { deepCopy } from "../../src/utils";
6+
import { deepCopy, randChoice } from "../../src/utils";
7+
import { makeRelative } from "../../src/makeRelative";
78

89
type GenerateOptions = Parameters<typeof generate>[1];
910

@@ -12,8 +13,26 @@ export const shuffleEntireFace = (
1213
gallerySectionConfigList: GallerySectionConfig[],
1314
stateStore: CombinedState,
1415
) => {
15-
const { setFaceStore, shuffleGenderSettingObject, shuffleRaceSettingObject } =
16-
stateStore;
16+
const {
17+
setFaceStore,
18+
shuffleGenderSettingObject,
19+
shuffleRaceSettingObject,
20+
shuffleOtherSettingObject,
21+
} = stateStore;
22+
23+
if (shuffleOtherSettingObject.includes("relative")) {
24+
// Special case for relative - ignore randomizeEnabled and race
25+
const gender =
26+
shuffleGenderSettingObject.length === 1
27+
? shuffleGenderSettingObject[0]
28+
: randChoice(["male", "female"] as const);
29+
30+
const newFace = makeRelative({ gender, relative: faceConfig });
31+
setFaceStore(newFace);
32+
33+
return;
34+
}
35+
1736
const faceConfigCopy: Overrides = deepCopy(faceConfig);
1837

1938
const options: GenerateOptions = {};

src/generate.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,7 @@
11
import override from "./override.js";
22
import { svgsGenders, svgsIndex } from "./svgs-index.js";
33
import { Feature, Gender, Overrides, Race, TeamColors } from "./types.js";
4-
5-
const randInt = (a: number, b: number): number => {
6-
return Math.floor(Math.random() * (1 + b - a)) + a;
7-
};
8-
9-
const randUniform = (a: number, b: number): number => {
10-
return Math.random() * (b - a) + a;
11-
};
12-
13-
const randChoice = <T>(array: T[]): T => {
14-
return array[Math.floor(Math.random() * array.length)];
15-
};
4+
import { randChoice, randInt, randUniform } from "./utils.js";
165

176
const getID = (type: Feature, gender: Gender): string => {
187
const validIDs = svgsIndex[type].filter((_id, index) => {
@@ -75,6 +64,10 @@ export const numberRanges = {
7564
female: [-15, 20],
7665
male: [-15, 20],
7766
},
67+
"head.shave": {
68+
female: [0, 0],
69+
male: [0, 0.2],
70+
},
7871
"nose.size": {
7972
female: [0.5, 1],
8073
male: [0.5, 1.25],
@@ -150,7 +143,7 @@ export const generate = (
150143
id: getID("head", gender),
151144
shave: `rgba(0,0,0,${
152145
gender === "male" && Math.random() < 0.25
153-
? roundTwoDecimals(Math.random() / 5)
146+
? getRandUniform("head.shave", gender)
154147
: 0
155148
})`,
156149
},

src/utils.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
11
export const deepCopy = <T>(object: T): T => {
22
return JSON.parse(JSON.stringify(object));
33
};
4+
5+
export const randInt = (a: number, b: number): number => {
6+
return Math.floor(Math.random() * (1 + b - a)) + a;
7+
};
8+
9+
export const randUniform = (a: number, b: number): number => {
10+
return Math.random() * (b - a) + a;
11+
};
12+
13+
export const randChoice = <T>(array: T[]): T => {
14+
return array[Math.floor(Math.random() * array.length)];
15+
};

0 commit comments

Comments
 (0)