import React, { useCallback } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' import { Texture } from 'three' import { GrassProperties, TextureRef } from '@xrengine/engine/src/scene/components/InstancingComponent' import { State, useState } from '@xrengine/hyperflux' import ExpandMoreIcon from '@mui/icons-material/ExpandMore' import { Box, Collapse, IconButton, IconButtonProps } from '@mui/material' import ColorInput from '../inputs/ColorInput' import ImageInput from '../inputs/ImageInput' import { ImagePreviewInputGroup } from '../inputs/ImagePreviewInput' import InputGroup from '../inputs/InputGroup' import NumericInputGroup from '../inputs/NumericInputGroup' import RandomizedPropertyInputGroup from '../inputs/RandomizedPropertyInput' import CollapsibleBlock from '../layout/CollapsibleBlock' import ExpandMore from '../layout/ExpandMore' export default function InstancingGrassProperties({ state, onChange, ...rest }: { state: State onChange: (value: GrassProperties) => void }) { const value = state.value const props = value as GrassProperties const { t } = useTranslation() const texPath = (tex: TextureRef) => { if (tex.texture?.isTexture) return tex.texture.source.data?.src ?? '' return tex.src ?? '' } function onChangeGrass(val) { state.grassTexture.src.set(val) } function onChangeAlpha(val) { state.alphaMap.src.set(val) } const onChangeProp = useCallback((prop) => { return (_value) => { state[prop].set(_value) } }, []) return ( ) }