import React, { Fragment } from 'react'
import { Texture, Vector2 } from 'three'
import { AssetLoader } from '@xrengine/engine/src/assets/classes/AssetLoader'
import { ImageFileTypes, VideoFileTypes } from '@xrengine/engine/src/assets/constants/fileTypes'
import { AssetClass } from '@xrengine/engine/src/assets/enum/AssetClass'
import { useHookstate } from '@xrengine/hyperflux'
import { Stack } from '@mui/material'
import { ItemTypes } from '../../constants/AssetTypes'
import FileBrowserInput from './FileBrowserInput'
import { ImageContainer } from './ImagePreviewInput'
import InputGroup from './InputGroup'
import Vector2Input from './Vector2Input'
/**
* VideoInput used to render component view for video inputs.
*
* @param {function} onChange
* @param {any} rest
* @constructor
*/
export function TextureInput({ onChange, ...rest }) {
return (
)
}
export default function TexturePreviewInput({
value,
onChange,
...rest
}: {
value: string | Texture
onChange: (value: any) => void
preview?: string
}) {
const previewStyle = {
maxWidth: '128px',
maxHeight: '128px',
width: 'auto',
height: 'auto'
}
const { preview } = rest
const validSrcValue =
typeof value === 'string' && [AssetClass.Image, AssetClass.Video].includes(AssetLoader.getAssetClass(value))
const texture = value as Texture
const src = value as string
const showPreview = preview !== undefined || validSrcValue
const previewSrc = validSrcValue ? value : preview
const inputSrc = validSrcValue
? value
: texture?.isTexture
? texture.source?.data?.src ?? texture?.userData?.src ?? (preview ? 'BLOB' : '')
: src
const offset = useHookstate(typeof texture?.offset?.clone === 'function' ? texture.offset.clone() : new Vector2(0, 0))
const scale = useHookstate(typeof texture?.repeat?.clone === 'function' ? texture.repeat.clone() : new Vector2(1, 1))
return (
{showPreview && (
{(typeof preview === 'string' ||
(typeof value === 'string' && AssetLoader.getAssetClass(value) === AssetClass.Image)) && (
)}
{typeof value === 'string' && AssetLoader.getAssetClass(value) === AssetClass.Video && (
)}
)}
{texture?.isTexture && !texture.isRenderTargetTexture && (
<>
{
offset.set(_offset)
texture.offset.copy(_offset)
}}
uniformScaling={false}
/>
{
scale.set(_scale)
texture.repeat.copy(_scale)
}}
uniformScaling={false}
/>
>
)}
)
}
export function TexturePreviewInputGroup({ name, label, value, onChange, ...rest }) {
return (
)
}