2021-03-26 17:25:28 +08:00
|
|
|
|
|
|
|
|
2021-03-30 13:13:13 +08:00
|
|
|
import React, { useEffect, useState } from 'react';
|
2021-04-01 16:20:50 +08:00
|
|
|
import './app.css'
|
2021-03-26 17:25:28 +08:00
|
|
|
|
2021-03-28 20:00:31 +08:00
|
|
|
import { Provider, useDispatch, useSelector } from 'react-redux'
|
2021-03-31 07:20:24 +08:00
|
|
|
// import { sc } from './index'
|
2021-04-02 08:19:14 +08:00
|
|
|
import { BsPencilSquare } from 'react-icons/bs'
|
|
|
|
import { FaCube, FaCheck } from 'react-icons/fa'
|
|
|
|
import { MdAdd, MdEdit, MdDone } from 'react-icons/md'
|
2021-03-28 20:00:31 +08:00
|
|
|
|
2021-03-27 03:18:11 +08:00
|
|
|
export const Root = ({ store }) => (
|
2021-03-26 17:25:28 +08:00
|
|
|
<Provider store={store}>
|
2021-03-27 03:18:11 +08:00
|
|
|
<App></App>
|
2021-03-26 17:25:28 +08:00
|
|
|
</Provider>
|
|
|
|
);
|
2021-03-27 03:18:11 +08:00
|
|
|
|
2021-03-30 13:13:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-27 03:18:11 +08:00
|
|
|
const App = () => {
|
2021-03-28 20:00:31 +08:00
|
|
|
const dispatch = useDispatch()
|
2021-03-29 18:27:34 +08:00
|
|
|
const treeEntries = useSelector(state => state.treeEntries)
|
2021-04-01 13:35:08 +08:00
|
|
|
const activeSketchNid = useSelector(state => state.activeSketchNid)
|
2021-03-30 13:13:13 +08:00
|
|
|
|
|
|
|
// const [state, setState] = useState('x')
|
|
|
|
// useEffect(()=>{
|
|
|
|
// console.log('hereeee')
|
|
|
|
// },[state])
|
|
|
|
|
|
|
|
useEffect(() => {
|
2021-04-01 13:35:08 +08:00
|
|
|
if (!activeSketchNid) {
|
2021-03-31 07:20:24 +08:00
|
|
|
sc.canvas.addEventListener('pointermove', sc.onHover)
|
|
|
|
sc.canvas.addEventListener('pointerdown', sc.onPick)
|
2021-04-01 16:20:50 +08:00
|
|
|
return () => {
|
|
|
|
sc.canvas.removeEventListener('pointermove', sc.onHover)
|
|
|
|
sc.canvas.removeEventListener('pointerdown', sc.onPick)
|
2021-03-31 07:20:24 +08:00
|
|
|
}
|
2021-03-30 13:13:13 +08:00
|
|
|
}
|
2021-04-01 13:35:08 +08:00
|
|
|
}, [activeSketchNid])
|
2021-03-27 03:18:11 +08:00
|
|
|
|
2021-03-28 20:00:31 +08:00
|
|
|
|
2021-04-02 08:19:14 +08:00
|
|
|
const btnz = [
|
|
|
|
activeSketchNid ?
|
|
|
|
[MdDone, () => treeEntries.byNid[activeSketchNid].deactivate(), 'Finish'] :
|
|
|
|
[MdAdd, sc.addSketch, 'Sketch']
|
|
|
|
,
|
|
|
|
[FaCube, () => sc.extrude(treeEntries.byNid[activeSketchNid]), 'Extrude']
|
|
|
|
]
|
2021-04-01 18:10:00 +08:00
|
|
|
|
2021-04-02 08:19:14 +08:00
|
|
|
return <div className='absolute left-0 w-1/6 flex flex-col'>
|
|
|
|
{
|
|
|
|
btnz.map(([Icon, fcn, txt]) => (
|
|
|
|
<div className="btn flex items-center justify-end p-1 text-xs w-16"
|
|
|
|
onClick={fcn}
|
2021-04-01 16:20:50 +08:00
|
|
|
>
|
2021-04-02 08:19:14 +08:00
|
|
|
<div>{txt}</div>
|
|
|
|
<Icon className="w-4 h-4 ml-1" />
|
|
|
|
</div>
|
|
|
|
))
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div className=''>
|
|
|
|
{treeEntries.allNids.map((entId, idx) => (
|
|
|
|
<div className='bg-gray-50 flex justify-between'
|
|
|
|
key={idx}>
|
|
|
|
<div className='btn'
|
|
|
|
onClick={() => {
|
|
|
|
activeSketchNid && treeEntries.byNid[activeSketchNid].deactivate()
|
|
|
|
treeEntries.byNid[entId].activate()
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
<MdEdit />
|
|
|
|
</div>
|
|
|
|
<div class="btn">{entId}</div>
|
2021-04-01 16:20:50 +08:00
|
|
|
</div>
|
2021-03-28 20:00:31 +08:00
|
|
|
))}
|
|
|
|
</div>
|
2021-04-02 08:19:14 +08:00
|
|
|
</div>
|
2021-03-28 20:00:31 +08:00
|
|
|
}
|
|
|
|
|