UNPKG

myroom-react

Version:

React component wrapper for MyRoom 3D scene

140 lines (119 loc) 5.19 kB
import { AvailableParts, AvatarConfig, Gender, GenderData, AvatarPartPaths, AvatarColors, GenderSelectableParts } from '../types'; export const availablePartsData: AvailableParts = { male: { fixedParts: { body: "/models/male/male_body/male_body.glb", }, selectableParts: { hair: [ { name: "No Hair", fileName: null }, { name: "Hair Style 1", fileName: "/models/male/male_hair/male_hair_001.glb" }, { name: "Hair Style 2", fileName: "/models/male/male_hair/male_hair_002.glb" }, { name: "Hair Style 3", fileName: "/models/male/male_hair/male_hair_003.glb" }, ], top: [ { name: "Male T-Shirt 1", fileName: "/models/male/male_top/male_top_001.glb" }, { name: "Male Jacket 1", fileName: "/models/male/male_top/male_top_002.glb" }, ], bottom: [ { name: "Male Pant 1", fileName: "/models/male/male_bottom/male_bottom_001.glb" }, ], shoes: [ { name: "No Shoes", fileName: null }, { name: "Shoes 1", fileName: "/models/male/male_shoes/male_shoes_001.glb" }, { name: "Shoes 2", fileName: "/models/male/male_shoes/male_shoes_002.glb" }, { name: "Shoes 3", fileName: "/models/male/male_shoes/male_shoes_003.glb" }, ], fullset: [ { name: "No Fullset", fileName: null }, { name: "Fullset 1", fileName: "/models/male/male_fullset/male_fullset_001.glb" }, { name: "Fullset 2", fileName: "/models/male/male_fullset/male_fullset_002.glb" }, { name: "Fullset 3", fileName: "/models/male/male_fullset/male_fullset_003.glb" }, { name: "Fullset 4", fileName: "/models/male/male_fullset/male_fullset_004.glb" }, { name: "Fullset 5", fileName: "/models/male/male_fullset/male_fullset_005.glb" }, ], accessory: [ { name: "No Accessory", fileName: null }, { name: "Earing 1", fileName: "/models/male/male_acc/male_acc_001.glb" }, { name: "Glasses 1", fileName: "/models/male/male_acc/male_acc_002.glb" }, ], }, defaultColors: { hair: "#4A301B", top: "#1E90FF", }, }, female: { fixedParts: { body: "/models/female/female_body/female_body.glb", }, selectableParts: { hair: [ { name: "No Hair", fileName: null }, { name: "Hair Style 1", fileName: "/models/female/female_hair/female_hair_001.glb" }, { name: "Hair Style 2", fileName: "/models/female/female_hair/female_hair_002.glb" }, ], top: [ { name: "Blazer", fileName: "/models/female/female_top/female_top_001.glb" }, { name: "Shirt", fileName: "/models/female/female_top/female_top_002.glb" }, ], bottom: [ { name: "Cute Pants", fileName: "/models/female/female_bottom/female_bottom_001.glb" }, { name: "Flower Pants", fileName: "/models/female/female_bottom/female_bottom_002.glb" }, ], shoes: [ { name: "No Shoes", fileName: null }, { name: "Sport Shoes", fileName: "/models/female/female_shoes/female_shoes_001.glb" }, ], fullset: [ { name: "No Fullset", fileName: null }, ], accessory: [ { name: "No Accessory", fileName: null }, { name: "Sun Glasses", fileName: "/models/female/female_acc/female_acc_001.glb" }, { name: "Earing Set", fileName: "/models/female/female_acc/female_acc_002.glb" }, { name: "Camera", fileName: "/models/female/female_acc/female_acc_003.glb" }, ], }, defaultColors: { hair: "#5E3D25", top: "#FF69B4", }, } }; export const getDefaultConfigForGender = (gender: Gender): AvatarConfig => { const genderData = availablePartsData[gender]; if (!genderData) { console.error( `getDefaultConfigForGender: Gender data for "${gender}" not found! Defaulting to male.` ); return getDefaultConfigForGender("male"); } const initialParts: AvatarPartPaths = { body: genderData.fixedParts.body, hair: null, top: null, bottom: null, shoes: null, fullset: null, accessory: null, }; const initialColors: AvatarColors = { ...genderData.defaultColors }; for (const partType in genderData.selectableParts) { if (partType !== 'fullset' && partType !== 'accessory') { const items = genderData.selectableParts[partType as keyof GenderSelectableParts]; if (items && items.length > 0) { const firstActualItem = items.find((item) => item.fileName !== null); initialParts[partType] = firstActualItem ? firstActualItem.fileName : null; } else { initialParts[partType] = null; } } } return { gender: gender, parts: initialParts, colors: initialColors, }; }; export { availablePartsData as default };