Use nalgebra
This commit is contained in:
parent
b0bb187f75
commit
7c4a6a885e
105
Cargo.lock
generated
105
Cargo.lock
generated
@ -9,6 +9,15 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "approx"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arc-swap"
|
||||
version = "0.4.6"
|
||||
@ -69,7 +78,7 @@ dependencies = [
|
||||
"block-padding",
|
||||
"byte-tools",
|
||||
"byteorder",
|
||||
"generic-array",
|
||||
"generic-array 0.12.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -124,6 +133,7 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"legion",
|
||||
"nalgebra",
|
||||
"rand 0.7.3",
|
||||
"serde",
|
||||
"serde_json",
|
||||
@ -262,7 +272,7 @@ version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"generic-array 0.12.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -421,6 +431,15 @@ dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.13.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ed1e761351b56f54eb9dcd0cfaca9fd0daecf93918e1cfc01c8a3d26ee7adcd"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.1.14"
|
||||
@ -678,6 +697,12 @@ version = "0.2.71"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
|
||||
|
||||
[[package]]
|
||||
name = "libm"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.3.4"
|
||||
@ -717,6 +742,15 @@ version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
|
||||
|
||||
[[package]]
|
||||
name = "matrixmultiply"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4f7ec66360130972f34830bfad9ef05c6610a43938a467bcc9ab9369ab3478f"
|
||||
dependencies = [
|
||||
"rawpointer",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "maybe-uninit"
|
||||
version = "2.0.0"
|
||||
@ -857,6 +891,24 @@ dependencies = [
|
||||
"twoway",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nalgebra"
|
||||
version = "0.21.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d630f146ae751cfb43db9e0ad6bd73819a546a38baa5d4a9de69823c389c78a1"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"generic-array 0.13.2",
|
||||
"matrixmultiply",
|
||||
"num-complex",
|
||||
"num-rational",
|
||||
"num-traits",
|
||||
"rand 0.7.3",
|
||||
"rand_distr",
|
||||
"simba",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "net2"
|
||||
version = "0.2.34"
|
||||
@ -868,6 +920,16 @@ dependencies = [
|
||||
"winapi 0.3.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-complex"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
|
||||
dependencies = [
|
||||
"autocfg 1.0.0",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.42"
|
||||
@ -878,6 +940,17 @@ dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-rational"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
|
||||
dependencies = [
|
||||
"autocfg 1.0.0",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.11"
|
||||
@ -885,6 +958,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
|
||||
dependencies = [
|
||||
"autocfg 1.0.0",
|
||||
"libm",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1222,6 +1296,15 @@ dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_distr"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96977acbdd3a6576fb1d27391900035bf3863d4a16422973a409b488cf29ffb2"
|
||||
dependencies = [
|
||||
"rand 0.7.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_hc"
|
||||
version = "0.1.0"
|
||||
@ -1293,6 +1376,12 @@ dependencies = [
|
||||
"rand_core 0.3.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rawpointer"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
|
||||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.3.0"
|
||||
@ -1494,6 +1583,18 @@ dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simba"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d771bffb178827708f83829713e3a214bc8a9879a8f27ca548965bd849ed130"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"num-complex",
|
||||
"num-traits",
|
||||
"paste",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "siphasher"
|
||||
version = "0.2.3"
|
||||
|
@ -10,6 +10,7 @@ license = "AGPL-3.0-or-later"
|
||||
[dependencies]
|
||||
futures = { version = "0.3", default-features = false, features = ["alloc"] }
|
||||
legion = "0.2.1"
|
||||
nalgebra = "0.21"
|
||||
rand = "0.7.3"
|
||||
serde = { version = "1.0", features= ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
@ -1,27 +1,23 @@
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use legion::prelude::*;
|
||||
use nalgebra::{Vector3, Point3};
|
||||
use rand::prelude::*;
|
||||
use tokio::{sync::watch, time};
|
||||
|
||||
use crate::state::{Object, State};
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
struct Name {
|
||||
name: String,
|
||||
}
|
||||
struct Name (String);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
struct Position {
|
||||
x: f64,
|
||||
y: f64,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
struct Id (u64);
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
struct Velocity {
|
||||
dx: f64,
|
||||
dy: f64,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
struct Position (Point3<f64>);
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
struct Velocity (Vector3<f64>);
|
||||
|
||||
pub struct Simulation {
|
||||
world: World,
|
||||
@ -34,11 +30,13 @@ pub struct Simulation {
|
||||
fn render(world: &mut World) -> Vec<Object> {
|
||||
let mut result = vec![];
|
||||
|
||||
for (name, pos) in <(Read<Name>, Read<Position>)>::query().iter(world) {
|
||||
for (id, name, pos) in <(Read<Id>, Read<Name>, Read<Position>)>::query().iter(world) {
|
||||
result.push(Object {
|
||||
name: name.name.clone(),
|
||||
x: pos.x,
|
||||
y: pos.y,
|
||||
id: id.0,
|
||||
name: name.0.clone(),
|
||||
x: pos.0.x,
|
||||
y: pos.0.y,
|
||||
z: pos.0.z
|
||||
});
|
||||
}
|
||||
|
||||
@ -55,14 +53,14 @@ impl Simulation {
|
||||
(),
|
||||
(0..999).map(|n| {
|
||||
(
|
||||
Name {
|
||||
name: format!("Entity {}", n),
|
||||
},
|
||||
Position { x: 0.0, y: 0.0 },
|
||||
Velocity {
|
||||
dx: rng.gen_range(0.0, 1.0),
|
||||
dy: rng.gen_range(0.0, 1.0),
|
||||
},
|
||||
Id(n),
|
||||
Name (format!("Entity {}", n)),
|
||||
Position(Point3::new(0.0, 0.0, 0.0)),
|
||||
Velocity(Vector3::new(
|
||||
rng.gen_range(-1.0, 1.0),
|
||||
rng.gen_range(-1.0, 1.0),
|
||||
rng.gen_range(-1.0, 1.0),
|
||||
)),
|
||||
)
|
||||
}),
|
||||
);
|
||||
@ -80,8 +78,7 @@ impl Simulation {
|
||||
let now = Instant::now();
|
||||
let dt = now.duration_since(self.last);
|
||||
for (mut pos, vel) in update_query.iter(&mut self.world) {
|
||||
pos.x += vel.dx * dt.as_secs_f64();
|
||||
pos.y += vel.dy * dt.as_secs_f64();
|
||||
pos.0 += vel.0 * dt.as_secs_f64();
|
||||
}
|
||||
self.last = now;
|
||||
self.iteration += 1;
|
||||
|
@ -3,8 +3,10 @@ use serde::Serialize;
|
||||
#[derive(Clone, Debug, Serialize)]
|
||||
pub struct Object {
|
||||
pub name: String,
|
||||
pub id: u64,
|
||||
pub x: f64,
|
||||
pub y: f64,
|
||||
pub z: f64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize)]
|
||||
|
@ -6,10 +6,10 @@
|
||||
|
||||
<body>
|
||||
<h1>Hello, world!</h1>
|
||||
<p id="iteration">Iteration: {{ iteration }}<p>
|
||||
<p id="iteration">Iteration: {{ iteration }} messages 0.<p>
|
||||
<ul id="objects">
|
||||
{% for object in objects %}
|
||||
<li>{{ object.name }} @ {{ object.x }}, {{ object.y }}</li>
|
||||
<li id="object-{{ object.id }}">{{ object.name }} @ {{ object.x }}, {{ object.y }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
@ -21,18 +21,17 @@
|
||||
console.log("Connected");
|
||||
ws.send("MOAR");
|
||||
}
|
||||
let messages = 0;
|
||||
|
||||
ws.onmessage = function(e) {
|
||||
const data = JSON.parse(e.data);
|
||||
messages += 1;
|
||||
|
||||
document.getElementById("iteration").innerText = `Iteration: ${data.iteration}`;
|
||||
const ul = document.getElementById("objects");
|
||||
while(ul.firstChild) { ul.removeChild(ul.lastChild) }
|
||||
document.getElementById("iteration").innerText = `Iteration: ${data.iteration} messages ${messages}.`;
|
||||
for (n in data.objects) {
|
||||
const ob = data.objects[n];
|
||||
const li = document.createElement("li");
|
||||
const li = document.getElementById(`object-${ob.id}`);
|
||||
li.innerText = `${ob.name} @ ${ob.x}, ${ob.y}`;
|
||||
ul.append(li);
|
||||
}
|
||||
ws.send("MOAR");
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user