diff --git a/src/App.vue b/src/App.vue index 518e9dd..0f721fe 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 fe70f80..171d7b2 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 a05f70a..b69abda 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], }), },