import React, { useEffect, useReducer, useRef, useState } from 'react';
import './app.css'
import { Provider, useDispatch, useSelector } from 'react-redux'
import { FaCube, FaEdit } from 'react-icons/fa'
import { MdEdit, MdDone, MdVisibilityOff, MdVisibility } from 'react-icons/md'
import { RiShape2Fill } from 'react-icons/ri'
import { Union, Subtract, Intersect, Line, Arc } from './icons'
import { color } from './utils/static'
export const Root = ({ store }) => (
);
const App = () => {
const dispatch = useDispatch()
const treeEntries = useSelector(state => state.treeEntries)
const activeSketchNid = useSelector(state => state.activeSketchNid)
// const [state, setState] = useState('x')
// useEffect(()=>{
// console.log('hereeee')
// },[state])
useEffect(() => {
if (!activeSketchNid) {
sc.canvas.addEventListener('pointermove', sc.onHover)
sc.canvas.addEventListener('pointerdown', sc.onPick)
return () => {
sc.canvas.removeEventListener('pointermove', sc.onHover)
sc.canvas.removeEventListener('pointerdown', sc.onPick)
}
}
}, [activeSketchNid])
const btnz = [
activeSketchNid ?
[MdDone, () => treeEntries.byNid[activeSketchNid].deactivate(), 'Finish'] :
[FaEdit, sc.addSketch, 'Sketch']
,
[FaCube, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Extrude'],
[Union, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Union'],
[Subtract, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Subtract'],
[Intersect, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Intersect'],
[Line, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Line'],
[Arc, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Arc'],
]
return
{
btnz.map(([Icon, fcn, txt], idx) => (
))
}
{treeEntries.allNids.map((entId, idx) => (
))}
}
const TreeEntry = ({ entId }) => {
const treeEntries = useSelector(state => state.treeEntries.byNid)
const activeSketchNid = useSelector(state => state.activeSketchNid)
let entry;
if (entId[0]=="s") {
entry = treeEntries[entId].obj3d
} else {
entry = treeEntries[entId]
}
const [_, forceUpdate] = useReducer(x => x + 1, 0);
const vis = entry.visible
return
{
activeSketchNid && treeEntries[activeSketchNid].deactivate()
entry.activate()
}}
>
{
vis ?
{
entry.visible = false;
sc.render()
forceUpdate()
}}
>
:
{
entry.visible = true;
sc.render()
forceUpdate()
}}
>
}
{
if (entId[0] == 'm') {
entry.material.color.set(color.hover)
sc.render()
}
}}
onPointerLeave={() => {
const obj = entry
if (entId[0] == 'm' && !sc.selected.includes(obj)) {
obj.material.color.set(color.m)
sc.render()
}
}}
onPointerDown={() => {
if (entId[0] == 'm') {
sc.selected.push(
entry
)
sc.render()
}
}}
>
{entId}
}
const DesignLeaf = () => {
}