commit 4ea26b08a375c5b61d38470cc681229ebb34a209 Author: TreetopFlyer Date: Thu Nov 17 15:37:59 2022 -0500 init diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8675ad5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "deno.enable": true, + "deno.unstable": true +} \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..97c4278 --- /dev/null +++ b/app.js @@ -0,0 +1,155 @@ +//@ts-check + +import ReactDOM from 'https://esm.sh/react-dom' +import React from 'https://esm.sh/react' +import * as RTF from 'https://esm.sh/@react-three/fiber' +import { useGLTF, useAnimations, PerspectiveCamera } from 'https://esm.sh/@react-three/drei' +import {html} from 'https://esm.sh/htm/react' + +/**@typedef {[x:number, y:number, z:number]} V3 */ +/** + * @typedef {{Type:"click", Payload:number}} ActionClick + * @typedef {{Type:"round"}} ActionRound + * @typedef {ActionClick | ActionRound} Action + */ +/** + * @typedef {{Done:boolean, Pos:V3}} StateGoal + */ +/** + * @typedef {{Round:number, Done:boolean, Goals:Array}} State + */ +/** @typedef {(inState:State, inAction:Action)=>void} Reducer */ +/** @typedef {{Initial:State, Reducer:React.Reducer, Consume:()=>GameBinding}} Game */ +/** @typedef {[State:State, Dispatcher:React.Dispatch]} GameBinding */ + +/** @type Game */ +const Game = +{ + Initial: + { + Round:0, + Goals:[{Done:false, Pos:[0, 0, 0]}, {Done:true, Pos:[2, 0, 0]}], + Done:false + }, + Reducer(inState, inAction) + { + /**@type {(inGoals:Array)=>boolean} */ + const allDone =(inGoals)=> + { + for(let i=0; ivoid})=>JSX.Element}*/ +function Model(props) +{ + const { nodes, animations } = useGLTF("/bounce.gltf"); + const Anim = useAnimations(animations); + React.useEffect(()=> + { + const action = Anim.actions.CubeAction; + props.goal.Done ? action.play() : action.stop(); + }, [props.goal.Done]); + + return html` + + + { + e.stopPropagation(); + props.handler(); + } + } /> + ` + } + + useGLTF.preload("/bounce.gltf"); + +function App() +{ + const [State, Dispatch] = Game.Consume(); + /** @type Array */ + const children = State.Goals.map((g, i)=> + { + return React.createElement(Model, + { + goal:g, + handler:()=>Dispatch({Type:"click", Payload:i}), + key:i + }); + }); + return html` +
+
+
+
Round
+
${State.Round}
+
Done
+
${ State.Done ? "Done!" : "Not Done :("}
+
+
+
+ <${RTF.Canvas}> + + <${PerspectiveCamera} makeDefault fov=${100} position=${[0, 0, 10]} /> + <${React.Suspense}> + ${children} + + +
`; + +} + +ReactDOM.render( + React.createElement(App), + document.getElementById('root') +) \ No newline at end of file diff --git a/bounce.gltf b/bounce.gltf new file mode 100644 index 0000000..d459018 --- /dev/null +++ b/bounce.gltf @@ -0,0 +1,149 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v1.8.19", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "Cube" + } + ], + "animations" : [ + { + "channels" : [ + { + "sampler" : 0, + "target" : { + "node" : 0, + "path" : "translation" + } + } + ], + "name" : "CubeAction", + "samplers" : [ + { + "input" : 4, + "interpolation" : "LINEAR", + "output" : 5 + } + ] + } + ], + "meshes" : [ + { + "name" : "Cube.001", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3 + } + ] + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 216, + "max" : [ + 1.6001651287078857, + 1.6001651287078857, + 1.6001651287078857 + ], + "min" : [ + -1.6001651287078857, + -1.6001651287078857, + -1.6001651287078857 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 216, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 216, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 324, + "type" : "SCALAR" + }, + { + "bufferView" : 4, + "componentType" : 5126, + "count" : 31, + "max" : [ + 1.2916666666666667 + ], + "min" : [ + 0.041666666666666664 + ], + "type" : "SCALAR" + }, + { + "bufferView" : 5, + "componentType" : 5126, + "count" : 31, + "type" : "VEC3" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 2592, + "byteOffset" : 0 + }, + { + "buffer" : 0, + "byteLength" : 2592, + "byteOffset" : 2592 + }, + { + "buffer" : 0, + "byteLength" : 1728, + "byteOffset" : 5184 + }, + { + "buffer" : 0, + "byteLength" : 648, + "byteOffset" : 6912 + }, + { + "buffer" : 0, + "byteLength" : 124, + "byteOffset" : 7560 + }, + { + "buffer" : 0, + "byteLength" : 372, + "byteOffset" : 7684 + } + ], + "buffers" : [ + { + "byteLength" : 8056, + "uri" : "data:application/octet-stream;base64,//9/v///f7///38///9/v///f7///38///9/v///f7///38///9/v///fz///38///9/v///fz///38///9/v///fz///38///9/v///f7///3+///9/v///f7///3+///9/v///f7///3+///9/v///fz///3+///9/v///fz///3+///9/v///fz///3+///9/P///f7///38///9/P///f7///38///9/P///f7///38///9/P///fz///38///9/P///fz///38///9/P///fz///38///9/P///f7///3+///9/P///f7///3+///9/P///f7///3+///9/P///fz///3+///9/P///fz///3+///9/P///fz///3+/y3qZv8t6mb8GqrS+y3qZv8t6mb8GqrS+y3qZv8t6mb8GqrS+y3qZv8t6mb8GqrS+y3qZv8t6mb8JqrQ+y3qZv8t6mb8JqrQ+y3qZv8t6mb8JqrQ+y3qZv8t6mb8JqrQ+y3qZvwaqtL7Lepk/y3qZvwaqtL7Lepk/y3qZvwaqtL7Lepk/y3qZvwaqtL7Lepk/y3qZvwmqtD7Lepk/y3qZvwmqtD7Lepk/y3qZvwmqtD7Lepk/y3qZvwmqtD7Lepk/y3qZv8t6mT8GqrQ+y3qZv8t6mT8GqrQ+y3qZv8t6mT8GqrQ+y3qZv8t6mT8GqrQ+y3qZv8t6mT8JqrS+y3qZv8t6mT8JqrS+y3qZv8t6mT8JqrS+y3qZv8t6mT8JqrS+y3qZvwaqtD7Lepm/y3qZvwaqtD7Lepm/y3qZvwaqtD7Lepm/y3qZvwaqtD7Lepm/y3qZvwmqtL7Lepm/y3qZvwmqtL7Lepm/y3qZvwmqtL7Lepm/y3qZvwmqtL7Lepm/Bqq0Pst6mb/Lepm/Bqq0Pst6mb/Lepm/Bqq0Pst6mb/Lepm/Bqq0Pst6mb/Lepm/Caq0vst6mb/Lepm/Caq0vst6mb/Lepm/Caq0vst6mb/Lepm/Caq0vst6mb/Lepm/Bqq0vst6mT/Lepm/Bqq0vst6mT/Lepm/Bqq0vst6mT/Lepm/Bqq0vst6mT/Lepm/Caq0Pst6mT/Lepm/Caq0Pst6mT/Lepm/Caq0Pst6mT/Lepm/Caq0Pst6mT/Lepm/y3qZPwaqtD7Lepm/y3qZPwaqtD7Lepm/y3qZPwaqtD7Lepm/y3qZPwaqtD7Lepm/y3qZPwmqtL7Lepm/y3qZPwmqtL7Lepm/y3qZPwmqtL7Lepm/y3qZPwmqtL7Lepm/y3qZP8t6mb8GqrQ+y3qZP8t6mb8GqrQ+y3qZP8t6mb8GqrQ+y3qZP8t6mb8GqrQ+y3qZP8t6mb8JqrS+y3qZP8t6mb8JqrS+y3qZP8t6mb8JqrS+y3qZP8t6mb8JqrS+y3qZP8t6mT8GqrS+y3qZP8t6mT8GqrS+y3qZP8t6mT8GqrS+y3qZP8t6mT8GqrS+y3qZP8t6mT8JqrQ+y3qZP8t6mT8JqrQ+y3qZP8t6mT8JqrQ+y3qZP8t6mT8JqrQ+y3qZPwaqtD7Lepk/y3qZPwaqtD7Lepk/y3qZPwaqtD7Lepk/y3qZPwaqtD7Lepk/y3qZPwmqtL7Lepk/y3qZPwmqtL7Lepk/y3qZPwmqtL7Lepk/y3qZPwmqtL7Lepk/Bqq0vst6mb/Lepk/Bqq0vst6mb/Lepk/Bqq0vst6mb/Lepk/Bqq0vst6mb/Lepk/Caq0Pst6mb/Lepk/Caq0Pst6mb/Lepk/Caq0Pst6mb/Lepk/Caq0Pst6mb/Lepk/Bqq0Pst6mT/Lepk/Bqq0Pst6mT/Lepk/Bqq0Pst6mT/Lepk/Bqq0Pst6mT/Lepk/Caq0vst6mT/Lepk/Caq0vst6mT/Lepk/Caq0vst6mT/Lepk/Caq0vst6mT/Lepk/lB75PjTSzD8OTN++lB75PjTSzD8OTN++lB75PjTSzD8OTN++lB75PjTSzD8OTN++kx75PjbSzD8STN8+kx75PjbSzD8STN8+kx75PjbSzD8STN8+kx75PjbSzD8STN8+lB75vjTSzD8OTN++lB75vjTSzD8OTN++lB75vjTSzD8OTN++lB75vjTSzD8OTN++lh75vjbSzD8UTN8+lh75vjbSzD8UTN8+lh75vjbSzD8UTN8+lh75vjbSzD8UTN8+lB75vjTSzL8OTN++lB75vjTSzL8OTN++lB75vjTSzL8OTN++lB75vjTSzL8OTN++kx75vjbSzL8STN8+kx75vjbSzL8STN8+kx75vjbSzL8STN8+kx75vjbSzL8STN8+lB75PjTSzL8OTN++lB75PjTSzL8OTN++lB75PjTSzL8OTN++lB75PjTSzL8OTN++lh75PjbSzL8UTN8+lh75PjbSzL8UTN8+lh75PjbSzL8UTN8+lh75PjbSzL8UTN8+DkzfPpQe+b400sw/DkzfPpQe+b400sw/DkzfPpQe+b400sw/DkzfPpQe+b400sw/EkzfvpQe+b420sw/EkzfvpQe+b420sw/EkzfvpQe+b420sw/EkzfvpQe+b420sw/EEzfPpMe+T400sw/EEzfPpMe+T400sw/EEzfPpMe+T400sw/EEzfPpMe+T400sw/E0zfvpYe+T420sw/E0zfvpYe+T420sw/E0zfvpYe+T420sw/E0zfvpYe+T420sw/NNLMP5Ue+b4OTN++NNLMP5Ue+b4OTN++NNLMP5Ue+b4OTN++NNLMP5Ue+b4OTN++NtLMP5ce+b4UTN8+NtLMP5ce+b4UTN8+NtLMP5ce+b4UTN8+NtLMP5ce+b4UTN8+NNLMP5Ie+T4OTN++NNLMP5Ie+T4OTN++NNLMP5Ie+T4OTN++NNLMP5Ie+T4OTN++NtLMP5Qe+T4UTN8+NtLMP5Qe+T4UTN8+NtLMP5Qe+T4UTN8+NtLMP5Qe+T4UTN8+DkzfvpUe+b400sy/DkzfvpUe+b400sy/DkzfvpUe+b400sy/DkzfvpUe+b400sy/FEzfPpge+b420sy/FEzfPpge+b420sy/FEzfPpge+b420sy/FEzfPpge+b420sy/DkzfvpIe+T400sy/DkzfvpIe+T400sy/DkzfvpIe+T400sy/DkzfvpIe+T400sy/FEzfPpQe+T420sy/FEzfPpQe+T420sy/FEzfPpQe+T420sy/FEzfPpQe+T420sy/NNLMv5Me+b4QTN8+NNLMv5Me+b4QTN8+NNLMv5Me+b4QTN8+NNLMv5Me+b4QTN8+NtLMv5Ye+b4TTN++NtLMv5Ye+b4TTN++NtLMv5Ye+b4TTN++NtLMv5Ye+b4TTN++NNLMv5Qe+T4OTN8+NNLMv5Qe+T4OTN8+NNLMv5Qe+T4OTN8+NNLMv5Qe+T4OTN8+NtLMv5Qe+T4STN++NtLMv5Qe+T4STN++NtLMv5Qe+T4STN++NtLMv5Qe+T4STN++qRZJvwgN4L4JDeA+DA3gvqgWSb8NDeA+DA3gvgwN4L6nFkk/qhZJvwYN4D4NDeA+Dw3gvggN4D6oFkk/DQ3gvqYWST8NDeA+pxZJvw0N4L4MDeC+CQ3gvqkWSb8IDeC+CA3gvgsN4L6pFkm/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" + } + ] +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..ba53cd9 --- /dev/null +++ b/index.html @@ -0,0 +1,7 @@ + + + +
+ + + \ No newline at end of file