second key and fence
This commit is contained in:
36
src/keys.rs
36
src/keys.rs
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user