feat: first working version with parameters
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
<script lang="ts">
|
||||
import { T } from "@threlte/core";
|
||||
import { type OrthographicCamera } from "three";
|
||||
import { T } from '@threlte/core';
|
||||
import { type OrthographicCamera } from 'three';
|
||||
|
||||
export let camera: OrthographicCamera | undefined = undefined;
|
||||
export let camera: OrthographicCamera | undefined = undefined;
|
||||
|
||||
export let position: [number, number, number] = [0, 0, 4];
|
||||
export let position: [number, number, number];
|
||||
</script>
|
||||
|
||||
<T.OrthographicCamera
|
||||
bind:ref={camera}
|
||||
position.x={0}
|
||||
position.y={10}
|
||||
position.z={0}
|
||||
rotation.x={-Math.PI / 2}
|
||||
zoom={position[2]}
|
||||
makeDefault
|
||||
bind:ref={camera}
|
||||
position.x={position[0]}
|
||||
position.y={10}
|
||||
position.z={position[1]}
|
||||
rotation.x={-Math.PI / 2}
|
||||
zoom={position[2]}
|
||||
makeDefault
|
||||
/>
|
||||
|
@@ -393,7 +393,7 @@ export class GraphManager extends EventEmitter<{ "save": Graph, "result": any }>
|
||||
const state = this.serialize();
|
||||
this.history.save(state);
|
||||
this.emit("save", state);
|
||||
logger.log("saving graph");
|
||||
logger.log("saving graphs", state);
|
||||
}
|
||||
|
||||
getParentsOfNode(node: Node) {
|
||||
|
@@ -47,10 +47,6 @@
|
||||
edges: [number, number, number, string][];
|
||||
} = null;
|
||||
|
||||
$: if (cameraPosition && loaded) {
|
||||
localStorage.setItem('cameraPosition', JSON.stringify(cameraPosition));
|
||||
}
|
||||
|
||||
let width = globalThis?.innerWidth ?? 100;
|
||||
let height = globalThis?.innerHeight ?? 100;
|
||||
|
||||
@@ -61,12 +57,14 @@
|
||||
cameraPosition[1] - height / cameraPosition[2] / 2,
|
||||
cameraPosition[1] + height / cameraPosition[2] / 2
|
||||
];
|
||||
function setCameraTransform(x: number, y: number, z: number) {
|
||||
if (!camera) return;
|
||||
camera.position.x = x;
|
||||
camera.position.z = y;
|
||||
camera.zoom = z;
|
||||
function setCameraTransform(x = cameraPosition[0], y = cameraPosition[1], z = cameraPosition[2]) {
|
||||
if (camera) {
|
||||
camera.position.x = x;
|
||||
camera.position.z = y;
|
||||
camera.zoom = z;
|
||||
}
|
||||
cameraPosition = [x, y, z];
|
||||
localStorage.setItem('cameraPosition', JSON.stringify(cameraPosition));
|
||||
}
|
||||
|
||||
export let debug = {};
|
||||
@@ -534,7 +532,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
if (event.key === 'a' && event.ctrlKey) {
|
||||
if (event.key === 'a' && event.ctrlKey && bodyIsFocused) {
|
||||
$selectedNodes = new Set($nodes.keys());
|
||||
}
|
||||
|
||||
@@ -697,7 +695,6 @@
|
||||
setCameraTransform(cPosition[0], cPosition[1], cPosition[2]);
|
||||
}
|
||||
}
|
||||
loaded = true;
|
||||
});
|
||||
</script>
|
||||
|
||||
|
@@ -8,7 +8,7 @@ export async function getNodeWrapper(id: `${string}/${string}/${string}`) {
|
||||
let wrapperCode = await wrapperReponse.text();
|
||||
wrapperCode = wrapperCode.replace("wasm = val;", `if(wasm) return;
|
||||
wasm = val;`);
|
||||
const wasmWrapper = await import(/*@vite-ignore*/`data:text/javascript;base64,${btoa(wrapperCode)}`);
|
||||
const wasmWrapper = await import(/*@vite-ignore*/`data:text/javascript;base64,${btoa(wrapperCode)}?id=${id}`);
|
||||
|
||||
return wasmWrapper;
|
||||
}
|
||||
|
@@ -1,7 +0,0 @@
|
||||
mod encoding;
|
||||
mod helpers;
|
||||
mod nodes;
|
||||
mod tree;
|
||||
pub use encoding::*;
|
||||
pub use helpers::*;
|
||||
pub use tree::*;
|
@@ -34,7 +34,7 @@ export type NodeType = {
|
||||
meta?: {
|
||||
title?: string;
|
||||
},
|
||||
execute?: (...args: (string | number | boolean)[]) => unknown;
|
||||
execute?: (args: number[]) => unknown;
|
||||
}
|
||||
|
||||
export type Socket = {
|
||||
|
@@ -1,9 +1,13 @@
|
||||
[package]
|
||||
name = "plantarium"
|
||||
name = "utils"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[features]
|
||||
default = ["console_error_panic_hook"]
|
||||
|
||||
[dependencies]
|
||||
wasm-bindgen = "0.2.92"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
|
||||
console_error_panic_hook = { version = "0.1.7", optional = true }
|
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "@node/registry-client",
|
||||
"name": "@nodes/utils",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.ts",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
18
packages/utils/src/lib.rs
Normal file
18
packages/utils/src/lib.rs
Normal file
@@ -0,0 +1,18 @@
|
||||
mod encoding;
|
||||
mod helpers;
|
||||
mod nodes;
|
||||
mod tree;
|
||||
pub use encoding::*;
|
||||
pub use helpers::*;
|
||||
pub use tree::*;
|
||||
|
||||
pub fn set_panic_hook() {
|
||||
// When the `console_error_panic_hook` feature is enabled, we can call the
|
||||
// `set_panic_hook` function at least once during initialization, and then
|
||||
// we will get better error messages if our code ever panics.
|
||||
//
|
||||
// For more details see
|
||||
// https://github.com/rustwasm/console_error_panic_hook#readme
|
||||
#[cfg(feature = "console_error_panic_hook")]
|
||||
console_error_panic_hook::set_once();
|
||||
}
|
@@ -2,14 +2,14 @@ pub fn get_args(args: &[i32]) -> Vec<&[i32]> {
|
||||
let mut idx: usize = 0;
|
||||
let mut depth = -1;
|
||||
|
||||
let mut arg_start_index = 2;
|
||||
let mut next_bracket_index = 0;
|
||||
let mut last_bracket_index = 0;
|
||||
|
||||
let mut out_args: Vec<&[i32]> = Vec::new();
|
||||
|
||||
let length = args.len();
|
||||
|
||||
let mut arg_start_index = 2;
|
||||
|
||||
while idx < length {
|
||||
let is_bracket = idx == next_bracket_index;
|
||||
let value = args[idx];
|
||||
@@ -21,7 +21,6 @@ pub fn get_args(args: &[i32]) -> Vec<&[i32]> {
|
||||
break;
|
||||
}
|
||||
|
||||
last_bracket_index = next_bracket_index;
|
||||
next_bracket_index = 1 + idx + args[idx + 1] as usize;
|
||||
|
||||
if value == 0 {
|
||||
@@ -31,30 +30,28 @@ pub fn get_args(args: &[i32]) -> Vec<&[i32]> {
|
||||
}
|
||||
|
||||
if depth == 0 {
|
||||
if value == 1 {
|
||||
out_args.push(&args[arg_start_index..idx]);
|
||||
arg_start_index = idx + 2;
|
||||
}
|
||||
// skip over the bracket encoding
|
||||
idx += 2;
|
||||
} else {
|
||||
// skip to the next bracket if we are at depth > 0
|
||||
idx = next_bracket_index - 1;
|
||||
idx = next_bracket_index;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
out_args.push(&args[arg_start_index..=idx]);
|
||||
arg_start_index = idx + 1;
|
||||
|
||||
// this is at the end of args where normally multiple ] are encoded
|
||||
if depth < 0 {
|
||||
break;
|
||||
}
|
||||
|
||||
// remove starting bracket from single numbers
|
||||
if idx - arg_start_index < 3 && last_bracket_index == arg_start_index {
|
||||
arg_start_index += 2;
|
||||
}
|
||||
|
||||
out_args.push(&args[arg_start_index..=idx]);
|
||||
|
||||
idx += 1;
|
||||
arg_start_index = idx;
|
||||
}
|
||||
|
||||
out_args
|
||||
@@ -69,7 +66,7 @@ pub fn evaluate_node(input_args: &[i32]) -> (i32, i32) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn evaluate_args(input_args: &[i32]) -> (i32, i32) {
|
||||
pub fn evaluate_args(input_args: &[i32]) -> Vec<i32> {
|
||||
let args = get_args(input_args);
|
||||
|
||||
let mut resolved: Vec<i32> = Vec::new();
|
||||
@@ -77,20 +74,25 @@ pub fn evaluate_args(input_args: &[i32]) -> (i32, i32) {
|
||||
for arg in args {
|
||||
if arg.len() == 1 {
|
||||
resolved.push(arg[0]);
|
||||
} else if arg.len() == 4 && arg[0] == 0 && arg[1] == 3 {
|
||||
resolved.push(arg[2]);
|
||||
resolved.push(arg[3]);
|
||||
} else {
|
||||
let res = evaluate_args(arg);
|
||||
resolved.push(res.0);
|
||||
resolved.push(res.1);
|
||||
resolved.push(res[0]);
|
||||
resolved.push(res[1]);
|
||||
}
|
||||
}
|
||||
|
||||
println!("resolved: {:?}", resolved);
|
||||
|
||||
if resolved.len() > 1 {
|
||||
evaluate_node(&resolved)
|
||||
let res = evaluate_node(&resolved);
|
||||
vec![res.0, res.1]
|
||||
} else {
|
||||
(resolved[0], resolved[1])
|
||||
resolved
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
@@ -106,13 +108,13 @@ mod tests {
|
||||
// the numbers are f32 floats encoded as two i32's
|
||||
|
||||
let result = evaluate_args(&input);
|
||||
let decoded = decode_float(result.0, result.1);
|
||||
let decoded = decode_float(result[0], result[1]);
|
||||
|
||||
assert_eq!(decoded, 6.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_example_input_a() {
|
||||
fn test_get_args_input_a() {
|
||||
let input_a = vec![0, 4, 1, 2, 3, 0, 7, 1, 2, 4, 2, 4, 1, 1, 1, 1];
|
||||
// -> [1, 2, 3, [1, 2, 4, 2, 4]]
|
||||
|
||||
@@ -126,7 +128,7 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_example_input_b() {
|
||||
fn test_get_args_input_b() {
|
||||
let input_b = vec![0, 3, 7, 1, 0, 4, 4, 2, 4, 1, 2, 2, 0, 3, 2, 3, 1, 1, 1, 1];
|
||||
// -> [1,[4,2,4], 2, [2,3]]
|
||||
|
||||
@@ -139,4 +141,29 @@ mod tests {
|
||||
assert_eq!(args[3], [2]);
|
||||
assert_eq!(args[4], [0, 3, 2, 3]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_get_args_nested_inputs() {
|
||||
let input = vec![
|
||||
0, 3, 0, 2, 0, 3, 0, 0, 0, 3, 7549747, 127, 1, 1, 0, 3, 0, 128, 1, 1, 1, 1, 0, 3, 0,
|
||||
128, 1, 1, 1, 1,
|
||||
];
|
||||
|
||||
// each math node has 4 numbers
|
||||
// 0 -> type of node (0 -> math node)
|
||||
// 1 -> op_type for math operation (0 -> add, 1 -> sub, 2 -> mul, 3 -> div)
|
||||
// 2 -> first number
|
||||
// 3 -> second number
|
||||
|
||||
let args = get_args(&input);
|
||||
|
||||
assert_eq!(args.len(), 4);
|
||||
assert_eq!(args[0], [0]);
|
||||
assert_eq!(args[1], [2]);
|
||||
assert_eq!(args[3], [0, 3, 0, 128]);
|
||||
|
||||
let nested_args = get_args(args[2]);
|
||||
|
||||
assert_eq!(nested_args.len(), 4);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user