add player spawn event
This commit is contained in:
parent
44ff56592e
commit
a24e6e39a6
2 changed files with 56 additions and 19 deletions
|
@ -1,7 +1,7 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy_rapier2d::prelude::*;
|
use bevy_rapier2d::prelude::*;
|
||||||
use player::player_plugin;
|
use player::player_plugin;
|
||||||
use scene::scene_plugin;
|
use scene::{scene_plugin, PlayerSpawnEvent};
|
||||||
|
|
||||||
use crate::AppState;
|
use crate::AppState;
|
||||||
|
|
||||||
|
@ -12,5 +12,7 @@ mod set;
|
||||||
pub const WORLD_DEPTH: f32 = 0.5;
|
pub const WORLD_DEPTH: f32 = 0.5;
|
||||||
|
|
||||||
pub fn game_plugin(app: &mut App) {
|
pub fn game_plugin(app: &mut App) {
|
||||||
app.add_plugins((player_plugin, scene_plugin));
|
(app)
|
||||||
|
.add_event::<PlayerSpawnEvent>()
|
||||||
|
.add_plugins((player_plugin, scene_plugin));
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,13 @@ use crate::AppState;
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
struct Block;
|
struct Block;
|
||||||
|
|
||||||
|
#[derive(Event)]
|
||||||
|
pub struct PlayerSpawnEvent {
|
||||||
|
x: f32,
|
||||||
|
y: f32,
|
||||||
|
block_size: f32,
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) fn scene_plugin(app: &mut App) {
|
pub(super) fn scene_plugin(app: &mut App) {
|
||||||
app.add_plugins(EditorPlugin::default());
|
app.add_plugins(EditorPlugin::default());
|
||||||
// app.add_systems(, )
|
// app.add_systems(, )
|
||||||
|
@ -76,23 +83,22 @@ pub(super) fn import_text_world(
|
||||||
|
|
||||||
let x = i as f32 * wi.block_size;
|
let x = i as f32 * wi.block_size;
|
||||||
let y = current_y as f32 * wi.block_size;
|
let y = current_y as f32 * wi.block_size;
|
||||||
let mut command = commands.spawn((
|
if tex == "[player]" {
|
||||||
Block,
|
commands.trigger(PlayerSpawnEvent {
|
||||||
MaterialMesh2dBundle {
|
x,
|
||||||
mesh: meshes
|
y,
|
||||||
.add(Rectangle::new(wi.block_size * len as f32, wi.block_size))
|
block_size: wi.block_size,
|
||||||
.into(),
|
})
|
||||||
material: materials.add(assets.load(tex)),
|
} else {
|
||||||
transform: Transform::from_xyz(x, y, WORLD_DEPTH),
|
spawn_block(
|
||||||
..Default::default()
|
&mut commands,
|
||||||
},
|
&mut meshes,
|
||||||
));
|
&mut materials,
|
||||||
if collider {
|
&assets,
|
||||||
command.insert((
|
tex,
|
||||||
RigidBody::Fixed,
|
(x, y, len, wi.block_size),
|
||||||
Collider::cuboid(wi.block_size / 2.0 * len as f32, wi.block_size / 2.0),
|
collider,
|
||||||
Velocity::default(),
|
);
|
||||||
));
|
|
||||||
}
|
}
|
||||||
println!("spawned {possible_block:?} at {x}, {y}");
|
println!("spawned {possible_block:?} at {x}, {y}");
|
||||||
|
|
||||||
|
@ -104,3 +110,32 @@ pub(super) fn import_text_world(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn spawn_block(
|
||||||
|
commands: &mut Commands,
|
||||||
|
meshes: &mut ResMut<Assets<Mesh>>,
|
||||||
|
materials: &mut ResMut<Assets<ColorMaterial>>,
|
||||||
|
assets: &Res<AssetServer>,
|
||||||
|
tex: String,
|
||||||
|
(x, y, len, block_size): (f32, f32, usize, f32),
|
||||||
|
collider: bool,
|
||||||
|
) {
|
||||||
|
let mut command = commands.spawn((
|
||||||
|
Block,
|
||||||
|
MaterialMesh2dBundle {
|
||||||
|
mesh: meshes
|
||||||
|
.add(Rectangle::new(block_size * len as f32, block_size))
|
||||||
|
.into(),
|
||||||
|
material: materials.add(assets.load(tex)),
|
||||||
|
transform: Transform::from_xyz(x, y, WORLD_DEPTH),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
));
|
||||||
|
if collider {
|
||||||
|
command.insert((
|
||||||
|
RigidBody::Fixed,
|
||||||
|
Collider::cuboid(block_size / 2.0 * len as f32, block_size / 2.0),
|
||||||
|
Velocity::default(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue