feat: add gender feature

This commit is contained in:
LeoKu 2021-10-19 23:45:30 +08:00
parent c7254cbd6b
commit 3a3f4db9db
3 changed files with 19 additions and 3 deletions

View File

@ -111,6 +111,7 @@ function handleGenerate() {
) {
colorfulOption = getSpecialAvatarOption()
}
colorfulOption.wrapperShape = avatarOption.value.wrapperShape
setAvatarOption(colorfulOption)
showConfetti()
} else {

View File

@ -40,6 +40,8 @@ type AvatarWidgets = {
}
export interface AvatarOption {
gender?: Gender
wrapperShape?: `${WrapperShape}`
background: {

View File

@ -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<AvatarOption> = {},
useOption: Partial<AvatarOption> = {}
): 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<BeardShape | None>(SETTINGS.beardShape, {
shape: getRandomValue<BeardShape | None>(beardList, {
usually: [NONE],
}),
},