trying to use avian for the events

main
Elijah Voigt 1 month ago
parent 88cd679fa7
commit a17ae88a9f

94
Cargo.lock generated

@ -2889,11 +2889,11 @@ dependencies = [
[[package]] [[package]]
name = "matchers" name = "matchers"
version = "0.1.0" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
dependencies = [ dependencies = [
"regex-automata 0.1.10", "regex-automata",
] ]
[[package]] [[package]]
@ -2988,7 +2988,7 @@ dependencies = [
"naga", "naga",
"once_cell", "once_cell",
"regex", "regex",
"regex-syntax 0.8.5", "regex-syntax",
"rustc-hash 1.1.0", "rustc-hash 1.1.0",
"thiserror 1.0.69", "thiserror 1.0.69",
"tracing", "tracing",
@ -3127,12 +3127,11 @@ dependencies = [
[[package]] [[package]]
name = "nu-ansi-term" name = "nu-ansi-term"
version = "0.46.0" version = "0.50.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399"
dependencies = [ dependencies = [
"overload", "windows-sys 0.52.0",
"winapi",
] ]
[[package]] [[package]]
@ -3504,12 +3503,6 @@ dependencies = [
"num-traits", "num-traits",
] ]
[[package]]
name = "overload"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]] [[package]]
name = "owned_ttf_parser" name = "owned_ttf_parser"
version = "0.25.0" version = "0.25.0"
@ -4000,17 +3993,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
"regex-automata 0.4.9", "regex-automata",
"regex-syntax 0.8.5", "regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
"regex-syntax 0.6.29",
] ]
[[package]] [[package]]
@ -4021,15 +4005,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
"regex-syntax 0.8.5", "regex-syntax",
] ]
[[package]]
name = "regex-syntax"
version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]] [[package]]
name = "regex-syntax" name = "regex-syntax"
version = "0.8.5" version = "0.8.5"
@ -4472,7 +4450,7 @@ dependencies = [
"memchr", "memchr",
"ntapi", "ntapi",
"objc2-core-foundation", "objc2-core-foundation",
"windows 0.57.0", "windows 0.54.0",
] ]
[[package]] [[package]]
@ -4662,14 +4640,14 @@ dependencies = [
[[package]] [[package]]
name = "tracing-subscriber" name = "tracing-subscriber"
version = "0.3.19" version = "0.3.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
dependencies = [ dependencies = [
"matchers", "matchers",
"nu-ansi-term", "nu-ansi-term",
"once_cell", "once_cell",
"regex", "regex-automata",
"sharded-slab", "sharded-slab",
"smallvec", "smallvec",
"thread_local", "thread_local",
@ -5211,16 +5189,6 @@ dependencies = [
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
[[package]]
name = "windows"
version = "0.57.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143"
dependencies = [
"windows-core 0.57.0",
"windows-targets 0.52.6",
]
[[package]] [[package]]
name = "windows" name = "windows"
version = "0.58.0" version = "0.58.0"
@ -5263,18 +5231,6 @@ dependencies = [
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
[[package]]
name = "windows-core"
version = "0.57.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
dependencies = [
"windows-implement 0.57.0",
"windows-interface 0.57.0",
"windows-result 0.1.2",
"windows-targets 0.52.6",
]
[[package]] [[package]]
name = "windows-core" name = "windows-core"
version = "0.58.0" version = "0.58.0"
@ -5312,17 +5268,6 @@ dependencies = [
"windows-threading", "windows-threading",
] ]
[[package]]
name = "windows-implement"
version = "0.57.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "windows-implement" name = "windows-implement"
version = "0.58.0" version = "0.58.0"
@ -5345,17 +5290,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "windows-interface"
version = "0.57.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "windows-interface" name = "windows-interface"
version = "0.58.0" version = "0.58.0"

@ -1,2 +0,0 @@
* setup CI template in web server running on port 8000
* setup mock bevy app running on port 8001 w/ first app running in iframe

@ -0,0 +1,152 @@
use avian3d::math::Vector;
// TEMP
use bevy::{color::palettes::css::*, prelude::*};
use avian2d::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(PhysicsPlugins::default())
.insert_resource(ClearColor(WHITE.into()))
.add_systems(Startup, setup)
.add_systems(Update, move_player)
.add_systems(Update, follow_player)
.add_systems(Update, draw_gizmos)
.add_systems(Update, event_detection.run_if(on_event::<CollisionStarted>.or(on_event::<CollisionEnded>)))
.add_observer(set_tree_position)
.run();
}
#[derive(Component)]
struct Player;
#[derive(Component)]
struct RenderGizmo;
#[derive(Component)]
struct PlayArea;
#[derive(Component, Debug)]
struct TreePos(isize);
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
commands.spawn(Camera2d);
// Spawn "trees" (which are also sensors)
[
("TREE -3", -3),
("TREE -2", -2),
("TREE -2", -1),
("TREE 1", 1),
("TREE 2", 2),
("TREE 3", 3),
]
.iter()
.for_each(|(label, pos)| {
commands.spawn((
RigidBody::Static,
Collider::rectangle(100.0, 250.0),
Mesh2d(meshes.add(Rectangle::new(100.0, 250.0))),
MeshMaterial2d(materials.add(Color::from(GREEN))),
TreePos(*pos),
children![Text2d::new(*label),],
));
});
commands.spawn((
Player,
RigidBody::Kinematic,
ExternalImpulse::default().with_persistence(true),
Collider::rectangle(50.0, 50.0),
Mesh2d(meshes.add(Rectangle::new(50.0, 50.0))),
MeshMaterial2d(materials.add(Color::from(RED))),
children![
(
Text2d::new("PLAYER"),
Transform::from_scale(Vec3::new(0.5, 0.5, 0.5)),
),
(
Text2d::new("PLAY AREA"),
Transform::from_xyz(0.0, 212.0, 1.0),
TextColor(BLACK.into())
),
(
RenderGizmo,
PlayArea,
Visibility::Visible,
Transform::from_scale(Vec3::new(400.0, 400.0, 0.0)),
),
],
));
}
fn set_tree_position(
trigger: Trigger<OnAdd, TreePos>,
tree_pos: Query<&TreePos>,
mut commands: Commands,
) {
let TreePos(pos) = tree_pos.get(trigger.target()).unwrap();
let x = if (*pos) > 0 {
(200.0 * (*pos) as f32) - 100.0
} else {
(200.0 * (*pos) as f32) + 100.0
};
let t = Transform::from_xyz(x, 0.0, 0.0);
commands.entity(trigger.target()).insert(t);
}
fn move_player(
keyboard_input: Res<ButtonInput<KeyCode>>,
mut player: Single<&mut ExternalImpulse, With<Player>>,
) {
const SPEED: f32 = 5.0;
if keyboard_input.pressed(KeyCode::ArrowLeft) {
player.set_impulse(Vec2::NEG_X * SPEED);
} else if keyboard_input.pressed(KeyCode::ArrowRight) {
player.set_impulse(Vec2::X * SPEED);
}
}
fn follow_player(
player: Query<&Transform, (With<Player>, Changed<Transform>)>,
mut camera: Single<&mut Transform, (With<Camera2d>, Without<Player>)>,
) {
player.iter().for_each(|pt| {
camera.translation = pt.translation;
});
}
fn draw_gizmos(mut gizmos: Gizmos, play_area: Single<&GlobalTransform, With<RenderGizmo>>) {
gizmos.rect_2d(
play_area.translation().truncate(),
play_area.scale().truncate(),
MAGENTA,
)
}
fn event_detection(
mut start_events: EventReader<CollisionStarted>,
mut end_events: EventReader<CollisionEnded>,
player: Single<&Player>,
trees: Query<&TreePos>,
keyboard_input: Res<ButtonInput<KeyCode>>,
) {
debug_assert!(!(start_events.is_empty() && end_events.is_empty()));
let s = start_events.read().map(|CollisionStarted(a, b)| (a, b));
let e = end_events.read().map(|CollisionEnded(a, b)| (a, b));
let mut events = s.chain(e);
let current_tree = events.find_map(|(a, b)| {
info!("{a:?}, {b:?}");
trees.get(*a).or(trees.get(*b)).ok()
});
info!("{:?}", current_tree);
if keyboard_input.pressed(KeyCode::ArrowLeft) {
// moving left
} else if keyboard_input.pressed(KeyCode::ArrowRight) {
// moving right
}
}
Loading…
Cancel
Save