asset.ts•14.1 kB
import { z } from 'zod';
import { AssetIdSchema, EntityIdSchema, RgbSchema, Vec2Schema, Vec3Schema } from './common';
const MaterialSchema = z.object({
name: z.string().optional(),
ambient: RgbSchema.optional(),
aoMap: AssetIdSchema.optional(),
aoMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
aoMapUv: z.number().int().min(0).max(7).optional(),
aoMapTiling: Vec2Schema.optional(),
aoMapOffset: Vec2Schema.optional(),
aoMapRotation: z.number().optional(),
aoVertexColor: z.boolean().optional(),
aoVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
aoIntensity: z.number().optional(),
diffuse: RgbSchema.optional(),
diffuseMap: AssetIdSchema.optional(),
diffuseMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
diffuseMapUv: z.number().int().min(0).max(7).optional(),
diffuseMapTiling: Vec2Schema.optional(),
diffuseMapOffset: Vec2Schema.optional(),
diffuseMapRotation: z.number().optional(),
diffuseVertexColor: z.boolean().optional(),
diffuseVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
specular: RgbSchema.optional(),
specularMap: AssetIdSchema.optional(),
specularMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
specularMapUv: z.number().int().min(0).max(7).optional(),
specularMapTiling: Vec2Schema.optional(),
specularMapOffset: Vec2Schema.optional(),
specularMapRotation: z.number().optional(),
specularAntialias: z.boolean().optional(),
specularTint: z.boolean().optional(),
specularVertexColor: z.boolean().optional(),
specularVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
occludeSpecular: z.number().int().min(0).max(2).optional(),
specularityFactor: z.number().optional(),
specularityFactorMap: AssetIdSchema.optional(),
specularityFactorMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
specularityFactorMapUv: z.number().int().min(0).max(7).optional(),
specularityFactorMapTiling: Vec2Schema.optional(),
specularityFactorMapOffset: Vec2Schema.optional(),
specularityFactorMapRotation: z.number().optional(),
specularityFactorTint: z.boolean().optional(),
specularityFactorVertexColor: z.boolean().optional(),
specularityFactorVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
enableGGXSpecular: z.boolean().optional(),
anisotropy: z.number().min(-1).max(1).optional(),
useMetalness: z.boolean().optional(),
metalness: z.number().min(0).max(1).optional(),
metalnessMap: AssetIdSchema.optional(),
metalnessMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
metalnessMapUv: z.number().int().min(0).max(7).optional(),
metalnessMapTiling: Vec2Schema.optional(),
metalnessMapOffset: Vec2Schema.optional(),
metalnessMapRotation: z.number().optional(),
metalnessVertexColor: z.boolean().optional(),
metalnessVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
useMetalnessSpecularColor: z.boolean().optional(),
conserveEnergy: z.boolean().optional(),
shininess: z.number().min(0).max(100).optional(),
glossMap: AssetIdSchema.optional(),
glossMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
glossMapUv: z.number().int().min(0).max(7).optional(),
glossMapTiling: Vec2Schema.optional(),
glossMapOffset: Vec2Schema.optional(),
glossMapRotation: z.number().optional(),
glossVertexColor: z.boolean().optional(),
glossVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
glossInvert: z.boolean().optional(),
clearCoat: z.number().min(0).max(1).optional(),
clearCoatMap: AssetIdSchema.optional(),
clearCoatMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
clearCoatMapUv: z.number().int().min(0).max(7).optional(),
clearCoatMapTiling: Vec2Schema.optional(),
clearCoatMapOffset: Vec2Schema.optional(),
clearCoatMapRotation: z.number().optional(),
clearCoatVertexColor: z.boolean().optional(),
clearCoatVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
clearCoatGloss: z.number().min(0).max(1).optional(),
clearCoatGlossMap: AssetIdSchema.optional(),
clearCoatGlossMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
clearCoatGlossMapUv: z.number().int().min(0).max(7).optional(),
clearCoatGlossMapTiling: Vec2Schema.optional(),
clearCoatGlossMapOffset: Vec2Schema.optional(),
clearCoatGlossMapRotation: z.number().optional(),
clearCoatGlossVertexColor: z.boolean().optional(),
clearCoatGlossVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
clearCoatGlossInvert: z.boolean().optional(),
clearCoatNormalMap: AssetIdSchema.optional(),
clearCoatNormalMapUv: z.number().int().min(0).max(7).optional(),
clearCoatNormalMapTiling: Vec2Schema.optional(),
clearCoatNormalMapOffset: Vec2Schema.optional(),
clearCoatNormalMapRotation: z.number().optional(),
useSheen: z.boolean().optional(),
sheen: RgbSchema.optional(),
sheenMap: AssetIdSchema.optional(),
sheenMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
sheenMapUv: z.number().int().min(0).max(7).optional(),
sheenMapTiling: Vec2Schema.optional(),
sheenMapOffset: Vec2Schema.optional(),
sheenMapRotation: z.number().optional(),
sheenVertexColor: z.boolean().optional(),
sheenVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
sheenGloss: z.number().optional(),
sheenGlossMap: AssetIdSchema.optional(),
sheenGlossMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
sheenGlossMapUv: z.number().int().min(0).max(7).optional(),
sheenGlossMapTiling: Vec2Schema.optional(),
sheenGlossMapOffset: Vec2Schema.optional(),
sheenGlossMapRotation: z.number().optional(),
sheenGlossVertexColor: z.boolean().optional(),
sheenGlossVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
sheenGlossInvert: z.boolean().optional(),
emissive: RgbSchema.optional(),
emissiveMap: AssetIdSchema.optional(),
emissiveMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
emissiveMapUv: z.number().int().min(0).max(7).optional(),
emissiveMapTiling: Vec2Schema.optional(),
emissiveMapOffset: Vec2Schema.optional(),
emissiveMapRotation: z.number().optional(),
emissiveIntensity: z.number().min(0).max(10).optional(),
emissiveVertexColor: z.boolean().optional(),
emissiveVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
normalMap: AssetIdSchema.optional(),
normalMapUv: z.number().int().min(0).max(7).optional(),
normalMapTiling: Vec2Schema.optional(),
normalMapOffset: Vec2Schema.optional(),
normalMapRotation: z.number().optional(),
bumpMapFactor: z.number().optional(),
useDynamicRefraction: z.boolean().optional(),
refraction: z.number().min(0).max(1).optional(),
refractionMap: AssetIdSchema.optional(),
refractionMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
refractionMapUv: z.number().int().min(0).max(7).optional(),
refractionMapTiling: Vec2Schema.optional(),
refractionMapOffset: Vec2Schema.optional(),
refractionMapRotation: z.number().optional(),
refractionVertexColor: z.boolean().optional(),
refractionVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
refractionIndex: z.number().min(0).max(1).optional(),
dispersion: z.number().min(0).max(10).optional(),
thickness: z.number().optional(),
thicknessMap: AssetIdSchema.optional(),
thicknessMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
thicknessMapUv: z.number().int().min(0).max(7).optional(),
thicknessMapTiling: Vec2Schema.optional(),
thicknessMapOffset: Vec2Schema.optional(),
thicknessMapRotation: z.number().optional(),
thicknessVertexColor: z.boolean().optional(),
thicknessVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
attenuation: z.array(z.number()).length(3).optional(),
attenuationDistance: z.number().optional(),
useIridescence: z.boolean().optional(),
iridescence: z.number().optional(),
iridescenceMap: AssetIdSchema.optional(),
iridescenceMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
iridescenceMapUv: z.number().int().min(0).max(7).optional(),
iridescenceMapTiling: Vec2Schema.optional(),
iridescenceMapOffset: Vec2Schema.optional(),
iridescenceMapRotation: z.number().optional(),
iridescenceRefractionIndex: z.number().optional(),
iridescenceThicknessMap: AssetIdSchema.optional(),
iridescenceThicknessMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
iridescenceThicknessMapUv: z.number().int().min(0).max(7).optional(),
iridescenceThicknessMapTiling: Vec2Schema.optional(),
iridescenceThicknessMapOffset: Vec2Schema.optional(),
iridescenceThicknessMapRotation: z.number().optional(),
iridescenceThicknessMin: z.number().optional(),
iridescenceThicknessMax: z.number().optional(),
heightMap: AssetIdSchema.optional(),
heightMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
heightMapUv: z.number().int().min(0).max(7).optional(),
heightMapTiling: Vec2Schema.optional(),
heightMapOffset: Vec2Schema.optional(),
heightMapRotation: z.number().optional(),
heightMapFactor: z.number().min(0).max(2).optional(),
alphaToCoverage: z.boolean().optional(),
alphaTest: z.number().min(0).max(1).optional(),
alphaFade: z.number().min(0).max(1).optional(),
opacity: z.number().min(0).max(1).optional(),
opacityMap: AssetIdSchema.optional(),
opacityMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
opacityMapUv: z.number().int().min(0).max(7).optional(),
opacityMapTiling: Vec2Schema.optional(),
opacityMapOffset: Vec2Schema.optional(),
opacityMapRotation: z.number().optional(),
opacityVertexColor: z.boolean().optional(),
opacityVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
opacityFadesSpecular: z.boolean().optional(),
opacityDither: z.enum(['none', 'bayer8', 'bluenoise', 'ignnoise']).optional(),
opacityShadowDither: z.enum(['none', 'bayer8', 'bluenoise', 'ignnoise']).optional(),
reflectivity: z.number().min(0).max(1).optional(),
sphereMap: AssetIdSchema.optional(),
cubeMap: AssetIdSchema.optional(),
cubeMapProjection: z.number().int().min(0).max(1).optional(),
cubeMapProjectionBox: z.object({
center: Vec3Schema,
halfExtents: Vec3Schema
}).optional(),
lightMap: AssetIdSchema.optional(),
lightMapChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
lightMapUv: z.number().int().min(0).max(7).optional(),
lightMapTiling: Vec2Schema.optional(),
lightMapOffset: Vec2Schema.optional(),
lightMapRotation: z.number().optional(),
lightVertexColor: z.boolean().optional(),
lightVertexColorChannel: z.enum(['r', 'g', 'b', 'a', 'rgb']).optional(),
depthTest: z.boolean().optional(),
depthWrite: z.boolean().optional(),
depthBias: z.number().optional(),
slopeDepthBias: z.number().optional(),
cull: z.number().int().min(0).max(3).optional(),
blendType: z.number().int().min(0).max(10).optional(),
useFog: z.boolean().optional(),
useLighting: z.boolean().optional(),
useSkybox: z.boolean().optional(),
useTonemap: z.boolean().optional(),
twoSidedLighting: z.boolean().optional()
});
export const CssCreateSchema = z.object({
type: z.literal('css'),
options: z.object({
folder: AssetIdSchema.optional(),
name: z.string().optional(),
preload: z.boolean().optional(),
text: z.string().optional()
}).optional()
}).describe('CSS asset creation options.');
export const HtmlCreateSchema = z.object({
type: z.literal('html'),
options: z.object({
folder: AssetIdSchema.optional(),
name: z.string().optional(),
preload: z.boolean().optional(),
text: z.string().optional()
}).optional()
}).describe('HTML asset creation options.');
export const FolderCreateSchema = z.object({
type: z.literal('folder'),
options: z.object({
folder: AssetIdSchema.optional(),
name: z.string().optional()
}).optional()
}).describe('Folder asset creation options.');
export const MaterialCreateSchema = z.object({
type: z.literal('material'),
options: z.object({
data: MaterialSchema.optional(),
folder: AssetIdSchema.optional(),
name: z.string().optional(),
preload: z.boolean().optional()
}).optional()
}).describe('Material asset creation options.');
export const ScriptCreateSchema = z.object({
type: z.literal('script'),
options: z.object({
filename: z.string().optional(),
folder: AssetIdSchema.optional(),
preload: z.boolean().optional(),
text: z.string().optional()
}).optional()
}).describe('Script asset creation options.');
export const ShaderCreateSchema = z.object({
type: z.literal('shader'),
options: z.object({
folder: AssetIdSchema.optional(),
name: z.string().optional(),
preload: z.boolean().optional(),
text: z.string().optional()
}).optional()
}).describe('Shader asset creation options.');
export const TemplateCreateSchema = z.object({
type: z.literal('template'),
options: z.object({
entity: EntityIdSchema,
folder: AssetIdSchema.optional(),
name: z.string().optional(),
preload: z.boolean().optional()
})
}).describe('Template asset creation options.');
export const TextCreateSchema = z.object({
type: z.literal('text'),
options: z.object({
folder: AssetIdSchema.optional(),
name: z.string().optional(),
preload: z.boolean().optional(),
text: z.string().optional()
}).optional()
}).describe('Text asset creation options.');