27 lines
726 B
TypeScript
27 lines
726 B
TypeScript
import { sfxEmitter } from '@/lib/sfx-bus'
|
|
import useEditor from '@/store/use-editor'
|
|
import { useDraftNode } from './use-draft-node'
|
|
import { usePlacementCoordinator } from './use-placement-coordinator'
|
|
|
|
export const ItemTool: React.FC = () => {
|
|
const selectedItem = useEditor((state) => state.selectedItem)
|
|
const draftNode = useDraftNode()
|
|
|
|
const cursor = usePlacementCoordinator({
|
|
asset: selectedItem!,
|
|
draftNode,
|
|
initDraft: (gridPosition) => {
|
|
if (!selectedItem?.attachTo) {
|
|
draftNode.create(gridPosition, selectedItem!)
|
|
}
|
|
},
|
|
onCommitted: () => {
|
|
sfxEmitter.emit('sfx:item-place')
|
|
return true
|
|
},
|
|
})
|
|
|
|
if (!selectedItem) return null
|
|
return <>{cursor}</>
|
|
}
|