generated from 2ndbeam/bevy-template
feat: Layout changes
- Added padlock layout object - Added lockpick item - Added ItemImage component - Tilemap colliders are now creating from the tiles themselves - Removed items from container bundle - Removed colliders from tilemap bundle - Removed setup_player system
This commit is contained in:
parent
5157450ced
commit
42cfd14214
10 changed files with 175 additions and 57 deletions
66
src/layout/lock.rs
Normal file
66
src/layout/lock.rs
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy_rapier2d::prelude::*;
|
||||
|
||||
use crate::{inventory::{Inventory, item::lockpick::Lockpick}, meters, player::Player};
|
||||
|
||||
use super::*;
|
||||
|
||||
const PADLOCK_IMAGE_PATH: &'static str = "sprites/interactive/padlock.png";
|
||||
|
||||
#[derive(Component, Debug, PartialEq, Eq, Default, Clone, Copy, Reflect)]
|
||||
#[reflect(Component, Debug, PartialEq, Default, Clone)]
|
||||
#[require(InteractiveObject)]
|
||||
pub struct Padlock;
|
||||
|
||||
pub fn on_padlock_interaction(
|
||||
event: On<InteractionEvent>,
|
||||
mut commands: Commands,
|
||||
query: Query<(&ChildOf, Entity), With<Padlock>>,
|
||||
inventory_query: Query<(&Children, &ChildOf), With<Inventory>>,
|
||||
player_query: Query<(), With<Player>>,
|
||||
lockpick_query: Query<(), With<Lockpick>>,
|
||||
) {
|
||||
let Ok((parent, lock_id)) = query.get(event.entity) else {
|
||||
return;
|
||||
};
|
||||
|
||||
// find lockpick in player inventory
|
||||
let mut lockpick_id = None;
|
||||
for (items, inventory_parent) in inventory_query {
|
||||
if player_query.get(inventory_parent.0).is_err() {
|
||||
continue;
|
||||
}
|
||||
for item_id in items {
|
||||
if lockpick_query.get(*item_id).is_ok() {
|
||||
lockpick_id = Some(*item_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
let Some(lockpick_id) = lockpick_id else {
|
||||
return;
|
||||
};
|
||||
|
||||
commands.entity(parent.0).remove::<Locked>();
|
||||
commands.entity(lock_id).despawn();
|
||||
commands.entity(lockpick_id).despawn();
|
||||
}
|
||||
|
||||
pub fn padlock_bundle(asset_server: &Res<AssetServer>, facing_left: bool) -> impl Bundle {
|
||||
let image = asset_server.load(PADLOCK_IMAGE_PATH);
|
||||
let sign = if facing_left { -1. } else { 1. };
|
||||
(
|
||||
Padlock,
|
||||
Sprite {
|
||||
image,
|
||||
flip_x: facing_left,
|
||||
..default()
|
||||
},
|
||||
Transform::from_xyz(meters(sign * 0.125), meters(0.), 0.),
|
||||
Children::spawn_one((
|
||||
Transform::from_xyz(meters(sign * 0.1875), 0., 0.),
|
||||
Collider::cuboid(meters(0.1875), meters(1.)),
|
||||
Sensor,
|
||||
)),
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue