43 lines
901 B
TypeScript
43 lines
901 B
TypeScript
import {
|
|
type AnyNodeId,
|
|
GuideNode,
|
|
type GuideNode as GuideNodeType,
|
|
saveAsset,
|
|
} from '@pascal-app/core'
|
|
|
|
export function getGuideImageName(filename: string) {
|
|
const trimmed = filename.trim()
|
|
if (!trimmed) {
|
|
return 'Guide image'
|
|
}
|
|
|
|
const dotIndex = trimmed.lastIndexOf('.')
|
|
return dotIndex > 0 ? trimmed.slice(0, dotIndex) : trimmed
|
|
}
|
|
|
|
export async function createLocalGuideImage({
|
|
createNode,
|
|
file,
|
|
levelId,
|
|
position = [0, 0, 0],
|
|
}: {
|
|
createNode: (node: GuideNodeType, parentId: AnyNodeId) => void
|
|
file: File
|
|
levelId: string
|
|
position?: [number, number, number]
|
|
}) {
|
|
const assetUrl = await saveAsset(file)
|
|
const guide = GuideNode.parse({
|
|
name: getGuideImageName(file.name),
|
|
url: assetUrl,
|
|
position,
|
|
rotation: [0, 0, 0],
|
|
scale: 1,
|
|
opacity: 50,
|
|
scaleReference: null,
|
|
})
|
|
|
|
createNode(guide, levelId as AnyNodeId)
|
|
return guide
|
|
}
|