second key and fence

This commit is contained in:
2025-03-14 21:57:37 +01:00
parent 87e0529afb
commit 5ba25edbdf
10 changed files with 711 additions and 591 deletions

View File

@@ -4,14 +4,14 @@ use bevy::prelude::*;
use std::f32::consts::PI;
#[derive(Event, Reflect)]
pub struct KeySpawn(pub Vec3);
pub struct KeySpawn(pub Vec3, pub String);
#[derive(Component, Reflect)]
#[reflect(Component)]
struct Key;
struct Key(pub String);
#[derive(Event, Reflect)]
pub struct KeyCollected;
pub struct KeyCollected(pub String);
pub fn plugin(app: &mut App) {
app.add_systems(Update, collect_key);
@@ -19,17 +19,17 @@ pub fn plugin(app: &mut App) {
}
fn on_spawn(trigger: Trigger<KeySpawn>, mut commands: Commands, asset_server: Res<AssetServer>) {
let KeySpawn(position) = trigger.event();
let KeySpawn(position, id) = trigger.event();
//TODO: randomize
let spawn_dir = Quat::from_rotation_y(PI / 2.) * Vec3::new(0.5, 0.6, 0.).normalize();
let angle = rand::random::<f32>() * PI * 2.;
let spawn_dir = Quat::from_rotation_y(angle) * Vec3::new(0.5, 0.6, 0.).normalize();
let mesh = asset_server.load(GltfAssetLabel::Scene(0).from_asset("models/key.glb"));
commands
.spawn((
Name::new("key"),
Key,
Key(id.clone()),
Transform::from_translation(*position),
Visibility::default(),
Collider::sphere(1.5),
@@ -50,21 +50,21 @@ fn collect_key(
) {
for CollisionStarted(e1, e2) in collision_event_reader.read() {
let collectable = if query_player.contains(*e1) && query_collectable.contains(*e2) {
Some(*e2)
*e2
} else if query_player.contains(*e2) && query_collectable.contains(*e1) {
Some(*e1)
*e1
} else {
None
continue;
};
if let Some(collectable) = collectable {
commands.spawn((
AudioPlayer::new(asset_server.load("sfx/effects/key_collect.ogg")),
PlaybackSettings::DESPAWN,
));
let key = query_collectable.get(collectable).unwrap();
commands.trigger(KeyCollected);
commands.entity(collectable).despawn_recursive();
}
commands.spawn((
AudioPlayer::new(asset_server.load("sfx/effects/key_collect.ogg")),
PlaybackSettings::DESPAWN,
));
commands.trigger(KeyCollected(key.0.clone()));
commands.entity(collectable).despawn_recursive();
}
}