diff --git a/src/App.vue b/src/App.vue index 518e9dde36c683760f4e63d1467a41c168be066c..0f721fe4bbd6bb77047f9750e09c771c5daad10e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -111,6 +111,7 @@ function handleGenerate() { ) { colorfulOption = getSpecialAvatarOption() } + colorfulOption.wrapperShape = avatarOption.value.wrapperShape setAvatarOption(colorfulOption) showConfetti() } else { diff --git a/src/types/index.ts b/src/types/index.ts index fe70f80de7c4a97fd754a77e6f4126ef9c410d80..171d7b2d867a7a063a80d08f5b270138a699a0b9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -40,6 +40,8 @@ type AvatarWidgets = { } export interface AvatarOption { + gender?: Gender + wrapperShape?: `${WrapperShape}` background: { diff --git a/src/utils/index.ts b/src/utils/index.ts index a05f70a9073c21a96a08fc216d1f3320ce5aaa66..b69abdaa96ea83696592ec14ded7949ea5530fef 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,4 +1,5 @@ -import type { BeardShape, EarringsShape, GlassesShape } from '@/enums' +import type { EarringsShape, GlassesShape } from '@/enums' +import { BeardShape, Gender, TopsShape } from '@/enums' import type { AvatarOption, None } from '@/types' import { NONE, SETTINGS, SPECIAL_AVATARS } from './constant' @@ -32,7 +33,19 @@ export function getRandomAvatarOption( presetOption: Partial = {}, useOption: Partial = {} ): AvatarOption { + const gender = getRandomValue(SETTINGS.gender) + + const beardList: BeardShape[] = [] + let topList: TopsShape[] = [TopsShape.Danny, TopsShape.Wave, TopsShape.Pixie] + + if (gender === Gender.Male) { + beardList.push(BeardShape.Scruff) + topList = SETTINGS.topsShape.filter((shape) => !topList.includes(shape)) + } + const avatarOption: AvatarOption = { + gender, + wrapperShape: presetOption?.wrapperShape || getRandomValue(SETTINGS.wrapperShape), @@ -47,7 +60,7 @@ export function getRandomAvatarOption( shape: getRandomValue(SETTINGS.faceShape), }, tops: { - shape: getRandomValue(SETTINGS.topsShape, { + shape: getRandomValue(topList, { avoid: [useOption.widgets?.tops?.shape], }), }, @@ -87,7 +100,7 @@ export function getRandomAvatarOption( }), }, beard: { - shape: getRandomValue(SETTINGS.beardShape, { + shape: getRandomValue(beardList, { usually: [NONE], }), },