Working on canvas, now having little squares wherever I want, next up is figuring out how to resize the canvas to the window size
This commit is contained in:
parent
56ae0e63b9
commit
747e9f9595
@ -24,9 +24,8 @@ pub fn App(cx: Scope) -> impl IntoView {
|
|||||||
|
|
||||||
// content for this welcome page
|
// content for this welcome page
|
||||||
<Router>
|
<Router>
|
||||||
<main class="text-white bg-indigo-950 min-h-screen ">
|
<main class="text-white bg-indigo-950 min-h-screen relative">
|
||||||
<Background />
|
<div class="max-w-3xl container mx-auto p-4 md:p-0 md:pb-14 relative z-50">
|
||||||
<div class="max-w-3xl container mx-auto p-4 md:p-0 md:pb-14">
|
|
||||||
<nav class="py-4 flex space-x-4">
|
<nav class="py-4 flex space-x-4">
|
||||||
<a href="/">"Home"</a>
|
<a href="/">"Home"</a>
|
||||||
<a href="/blog">"Blog"</a>
|
<a href="/blog">"Blog"</a>
|
||||||
@ -38,6 +37,7 @@ pub fn App(cx: Scope) -> impl IntoView {
|
|||||||
<Route path="/blog" view=|cx| view! { cx, <Blog/> }/>
|
<Route path="/blog" view=|cx| view! { cx, <Blog/> }/>
|
||||||
</Routes>
|
</Routes>
|
||||||
</div>
|
</div>
|
||||||
|
<Background class="absolute h-screen w-screen top-0 z-0"/>
|
||||||
</main>
|
</main>
|
||||||
</Router>
|
</Router>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
use std::f64;
|
|
||||||
use leptos::html::Canvas;
|
use leptos::html::Canvas;
|
||||||
use leptos::*;
|
use leptos::*;
|
||||||
|
use std::f64;
|
||||||
use wasm_bindgen::JsCast;
|
use wasm_bindgen::JsCast;
|
||||||
use wasm_bindgen::JsValue;
|
use wasm_bindgen::JsValue;
|
||||||
|
|
||||||
|
use crate::space_colonization::SpaceColonization;
|
||||||
|
|
||||||
#[component]
|
#[component]
|
||||||
pub fn Background(cx: Scope) -> impl IntoView {
|
pub fn Background(cx: Scope, class: &'static str) -> impl IntoView {
|
||||||
let canvas = create_node_ref::<Canvas>(cx);
|
let canvas = create_node_ref::<Canvas>(cx);
|
||||||
|
|
||||||
canvas.on_load(cx, move |_| {
|
canvas.on_load(cx, move |_| {
|
||||||
@ -44,10 +46,31 @@ pub fn Background(cx: Scope) -> impl IntoView {
|
|||||||
.arc(90.0, 65.0, 5.0, 0.0, f64::consts::PI * 2.0)
|
.arc(90.0, 65.0, 5.0, 0.0, f64::consts::PI * 2.0)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
log!("before stroke");
|
||||||
context.stroke();
|
context.stroke();
|
||||||
|
|
||||||
|
let sc = SpaceColonization::new();
|
||||||
|
context.set_fill_style(&JsValue::from("yellow"));
|
||||||
|
log!("About to render nodes");
|
||||||
|
for n in sc.nodes.iter() {
|
||||||
|
context.fill_rect(n.position.x.into(), n.position.y.into(), 5.0, 5.0);
|
||||||
|
log!("filled node at position = {:#?}", n.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.set_fill_style(&JsValue::from("magenta"));
|
||||||
|
for a in sc.attractors.iter() {
|
||||||
|
context.fill_rect(a.position.x.into(), a.position.y.into(), 5.0, 5.0);
|
||||||
|
log!("filled node at position = {:#?}", a.position);
|
||||||
|
}
|
||||||
|
context.fill_rect(100.0, 100.0, 5.0, 5.0);
|
||||||
|
context.fill_rect(200.0, 200.0, 5.0, 5.0);
|
||||||
|
context.fill_rect(300.0, 300.0, 5.0, 5.0);
|
||||||
|
context.fill_rect(400.0, 400.0, 5.0, 5.0);
|
||||||
|
context.fill_rect(500.0, 500.0, 5.0, 5.0);
|
||||||
});
|
});
|
||||||
|
let class = format!("canvas {}", class);
|
||||||
view! { cx,
|
view! { cx,
|
||||||
<div class="canvas fixed h-screen w-screen">
|
<div class={class}>
|
||||||
<canvas node_ref=canvas></canvas>
|
<canvas node_ref=canvas></canvas>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
mod space_colonization;
|
||||||
pub mod app;
|
pub mod app;
|
||||||
mod components;
|
mod components;
|
||||||
mod routes;
|
mod routes;
|
||||||
|
|||||||
46
src/space_colonization/mod.rs
Normal file
46
src/space_colonization/mod.rs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Point {
|
||||||
|
pub x: u16,
|
||||||
|
pub y: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Attractor {
|
||||||
|
pub position: Point,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Node {
|
||||||
|
pub position: Point,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct SpaceColonization {
|
||||||
|
max_point: Point,
|
||||||
|
kill_distance: u16,
|
||||||
|
attraction_force: u16,
|
||||||
|
density: u16,
|
||||||
|
pub nodes: Vec<Node>,
|
||||||
|
pub attractors: Vec<Attractor>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SpaceColonization {
|
||||||
|
pub fn new() -> SpaceColonization {
|
||||||
|
let mut nodes = Vec::new();
|
||||||
|
nodes.push(Node { position: Point { x: 100, y: 100 } });
|
||||||
|
let mut attractors = Vec::new();
|
||||||
|
attractors.push(Attractor { position: Point { x: 10, y: 10 } });
|
||||||
|
attractors.push(Attractor { position: Point { x: 20, y: 20 } });
|
||||||
|
attractors.push(Attractor { position: Point { x: 30, y: 30 } });
|
||||||
|
attractors.push(Attractor { position: Point { x: 40, y: 40 } });
|
||||||
|
attractors.push(Attractor { position: Point { x: 50, y: 50 } });
|
||||||
|
attractors.push(Attractor { position: Point { x: 60, y: 60 } });
|
||||||
|
attractors.push(Attractor { position: Point { x: 70, y: 70 } });
|
||||||
|
|
||||||
|
SpaceColonization {
|
||||||
|
max_point: Point { x: 500, y: 500 },
|
||||||
|
kill_distance: 10,
|
||||||
|
attraction_force: 15,
|
||||||
|
density: 10,
|
||||||
|
nodes,
|
||||||
|
attractors,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user