bevy 0.5
This commit is contained in:
parent
0059b97198
commit
f64c07d382
7 changed files with 446 additions and 411 deletions
756
Cargo.lock
generated
756
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -4,5 +4,5 @@ version = "0.1.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bevy = "0.4"
|
bevy = "0.5"
|
||||||
bevy_rapier3d = "0.7.0"
|
bevy_rapier3d = "0.9"
|
||||||
|
|
35
src/hud.rs
35
src/hud.rs
|
@ -24,7 +24,7 @@ fn fps_update_system(diagnostics: Res<Diagnostics>, mut query: Query<&mut Text,
|
||||||
for mut text in query.iter_mut() {
|
for mut text in query.iter_mut() {
|
||||||
if let Some(fps) = diagnostics.get(FrameTimeDiagnosticsPlugin::FPS) {
|
if let Some(fps) = diagnostics.get(FrameTimeDiagnosticsPlugin::FPS) {
|
||||||
if let Some(average) = fps.value() {
|
if let Some(average) = fps.value() {
|
||||||
text.value = format!("{:.0} fps", average);
|
text.sections.first_mut().unwrap().value = format!("{:.0} fps", average);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,17 +44,17 @@ fn speed_update_system(
|
||||||
let player_speed_2d = player_velocity_2d.length() / time.delta_seconds();
|
let player_speed_2d = player_velocity_2d.length() / time.delta_seconds();
|
||||||
|
|
||||||
for mut text in text_query.iter_mut() {
|
for mut text in text_query.iter_mut() {
|
||||||
text.value = format!("{:.0} m/s", player_speed_2d);
|
text.sections.first_mut().unwrap().value = format!("{:.0} m/s", player_speed_2d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(commands: &mut Commands, asset_server: Res<AssetServer>) {
|
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
commands
|
commands
|
||||||
// UI camera
|
// UI camera
|
||||||
.spawn(CameraUiBundle::default())
|
.spawn_bundle(UiCameraBundle::default());
|
||||||
// fps display
|
// fps display
|
||||||
.spawn(TextBundle {
|
commands.spawn_bundle(TextBundle {
|
||||||
style: Style {
|
style: Style {
|
||||||
align_self: AlignSelf::FlexEnd,
|
align_self: AlignSelf::FlexEnd,
|
||||||
position_type: PositionType::Absolute,
|
position_type: PositionType::Absolute,
|
||||||
|
@ -65,20 +65,21 @@ fn setup(commands: &mut Commands, asset_server: Res<AssetServer>) {
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
text: Text {
|
text: Text::with_section(
|
||||||
value: "".to_string(),
|
"".to_string(),
|
||||||
|
TextStyle {
|
||||||
font: asset_server.load("fonts/FiraMono-Medium.ttf"),
|
font: asset_server.load("fonts/FiraMono-Medium.ttf"),
|
||||||
style: TextStyle {
|
|
||||||
font_size: 16.0,
|
font_size: 16.0,
|
||||||
color: Color::WHITE,
|
color: Color::WHITE,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
},
|
TextAlignment::default()
|
||||||
|
),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.with(FpsText)
|
.insert(FpsText);
|
||||||
// speed display
|
// speed display
|
||||||
.spawn(TextBundle {
|
commands.spawn_bundle(TextBundle {
|
||||||
style: Style {
|
style: Style {
|
||||||
// TODO: dont know how to properly center this horizontally
|
// TODO: dont know how to properly center this horizontally
|
||||||
align_self: AlignSelf::Center,
|
align_self: AlignSelf::Center,
|
||||||
|
@ -90,16 +91,16 @@ fn setup(commands: &mut Commands, asset_server: Res<AssetServer>) {
|
||||||
},
|
},
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
text: Text {
|
text: Text::with_section(
|
||||||
value: "speed".to_string(),
|
"speed".to_string(),
|
||||||
|
TextStyle {
|
||||||
font: asset_server.load("fonts/FiraMono-Medium.ttf"),
|
font: asset_server.load("fonts/FiraMono-Medium.ttf"),
|
||||||
style: TextStyle {
|
|
||||||
font_size: 16.0,
|
font_size: 16.0,
|
||||||
color: Color::rgba(1.0, 1.0, 1.0, 0.5),
|
color: Color::rgba(1.0, 1.0, 1.0, 0.5),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
},
|
TextAlignment { vertical: VerticalAlign::Center, horizontal: HorizontalAlign::Center},
|
||||||
..Default::default()
|
), ..Default::default()
|
||||||
})
|
})
|
||||||
.with(SpeedText);
|
.insert(SpeedText);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,7 @@ use rake::{hud::HudPlugin, player::PlayerPlugin, weapon::WeaponPlugin, world::Wo
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_resource(Msaa { samples: 4 })
|
.insert_resource(WindowDescriptor {
|
||||||
.add_resource(WindowDescriptor {
|
|
||||||
title: "Rake".to_string(),
|
title: "Rake".to_string(),
|
||||||
width: 960.,
|
width: 960.,
|
||||||
height: 540.,
|
height: 540.,
|
||||||
|
|
|
@ -57,16 +57,16 @@ const MOUSE_SENSITIVITY: f32 = 0.5;
|
||||||
const PLAYER_HEIGHT: f32 = 1.8;
|
const PLAYER_HEIGHT: f32 = 1.8;
|
||||||
const PLAYER_WIDTH: f32 = 0.25;
|
const PLAYER_WIDTH: f32 = 0.25;
|
||||||
|
|
||||||
fn init_player(commands: &mut Commands) {
|
fn init_player(mut commands: Commands) {
|
||||||
commands
|
commands
|
||||||
.spawn(PlayerBundle::default())
|
.spawn_bundle(PlayerBundle::default())
|
||||||
.with_children(|parent| {
|
.with_children(|parent| {
|
||||||
parent
|
parent
|
||||||
.spawn(Camera3dBundle {
|
.spawn_bundle(PerspectiveCameraBundle {
|
||||||
transform: Transform::from_translation(Vec3::new(0.0, PLAYER_HEIGHT / 2., 0.0)),
|
transform: Transform::from_translation(Vec3::new(0.0, PLAYER_HEIGHT / 2., 0.0)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.with(CameraData::default());
|
.insert(CameraData::default());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ fn player_movement_system(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn straight_vector(rotation: &Quat) -> Vec3 {
|
fn straight_vector(rotation: &Quat) -> Vec3 {
|
||||||
let v = rotation.mul_vec3(Vec3::unit_z());
|
let v = rotation.mul_vec3(Vec3::Z);
|
||||||
Vec3::new(v.x, 0.0, v.z).normalize()
|
Vec3::new(v.x, 0.0, v.z).normalize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,12 +148,11 @@ fn movement_axis(input: &Res<Input<KeyCode>>, plus: KeyCode, minus: KeyCode) ->
|
||||||
|
|
||||||
fn player_look_system(
|
fn player_look_system(
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
mut mouse_event_reader: Local<EventReader<MouseMotion>>,
|
mut mouse_event_reader: EventReader<MouseMotion>,
|
||||||
mouse_motion_events: Res<Events<MouseMotion>>,
|
|
||||||
mut query: Query<(&mut Transform, &mut CameraData)>,
|
mut query: Query<(&mut Transform, &mut CameraData)>,
|
||||||
) {
|
) {
|
||||||
let mut delta: Vec2 = Vec2::zero();
|
let mut delta: Vec2 = Vec2::ZERO;
|
||||||
for event in mouse_event_reader.iter(&mouse_motion_events) {
|
for event in mouse_event_reader.iter() {
|
||||||
delta += event.delta;
|
delta += event.delta;
|
||||||
}
|
}
|
||||||
if delta.is_nan() {
|
if delta.is_nan() {
|
||||||
|
@ -169,10 +168,10 @@ fn player_look_system(
|
||||||
data.yaw = clamp(data.yaw, -half_pi, half_pi);
|
data.yaw = clamp(data.yaw, -half_pi, half_pi);
|
||||||
data.pitch = wrap(data.pitch, -PI, PI);
|
data.pitch = wrap(data.pitch, -PI, PI);
|
||||||
|
|
||||||
let quat_yaw = Quat::from_axis_angle(Vec3::unit_x(), data.yaw);
|
let quat_yaw = Quat::from_axis_angle(Vec3::X, data.yaw);
|
||||||
let quat_pitch = Quat::from_axis_angle(Vec3::unit_y(), data.pitch);
|
let quat_pitch = Quat::from_axis_angle(Vec3::Y, data.pitch);
|
||||||
|
|
||||||
let mut orientation = Quat::identity();
|
let mut orientation = Quat::IDENTITY;
|
||||||
orientation = orientation * quat_yaw;
|
orientation = orientation * quat_yaw;
|
||||||
orientation = quat_pitch * orientation;
|
orientation = quat_pitch * orientation;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ pub struct WeaponPlugin;
|
||||||
impl Plugin for WeaponPlugin {
|
impl Plugin for WeaponPlugin {
|
||||||
fn build(&self, app: &mut AppBuilder) {
|
fn build(&self, app: &mut AppBuilder) {
|
||||||
app
|
app
|
||||||
.add_resource(WeaponData::default())
|
.insert_resource(WeaponData::default())
|
||||||
.add_system(shoot_system.system())
|
.add_system(shoot_system.system())
|
||||||
.add_system(projectile_system.system());
|
.add_system(projectile_system.system());
|
||||||
}
|
}
|
||||||
|
@ -39,17 +39,16 @@ impl Default for WeaponData {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn shoot_system(
|
fn shoot_system(
|
||||||
mut mouse_event_reader: Local<EventReader<MouseButtonInput>>,
|
mut mouse_event_reader: EventReader<MouseButtonInput>,
|
||||||
mouse_button_events: Res<Events<MouseButtonInput>>,
|
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
mut weapon: ResMut<WeaponData>,
|
mut weapon: ResMut<WeaponData>,
|
||||||
commands: &mut Commands,
|
commands: Commands,
|
||||||
meshes: ResMut<Assets<Mesh>>,
|
meshes: ResMut<Assets<Mesh>>,
|
||||||
materials: ResMut<Assets<StandardMaterial>>,
|
materials: ResMut<Assets<StandardMaterial>>,
|
||||||
player_location_query: Query<&Transform, With<PlayerMarker>>,
|
player_location_query: Query<&Transform, With<PlayerMarker>>,
|
||||||
) {
|
) {
|
||||||
if weapon.reloading {
|
if weapon.reloading {
|
||||||
weapon.reload_timer.tick(time.delta_seconds());
|
weapon.reload_timer.tick(time.delta());
|
||||||
if weapon.reload_timer.finished() {
|
if weapon.reload_timer.finished() {
|
||||||
weapon.reload_timer.reset();
|
weapon.reload_timer.reset();
|
||||||
weapon.reloading = false;
|
weapon.reloading = false;
|
||||||
|
@ -57,7 +56,7 @@ fn shoot_system(
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut fired = false;
|
let mut fired = false;
|
||||||
for event in mouse_event_reader.iter(&mouse_button_events) {
|
for event in mouse_event_reader.iter() {
|
||||||
if event.button == MouseButton::Left && event.state == ElementState::Pressed {
|
if event.button == MouseButton::Left && event.state == ElementState::Pressed {
|
||||||
fired = true;
|
fired = true;
|
||||||
}
|
}
|
||||||
|
@ -76,7 +75,7 @@ fn shoot_system(
|
||||||
struct ProjectileMarker;
|
struct ProjectileMarker;
|
||||||
|
|
||||||
fn spawn_projectile(
|
fn spawn_projectile(
|
||||||
commands: &mut Commands,
|
mut commands: Commands,
|
||||||
mut meshes: ResMut<Assets<Mesh>>,
|
mut meshes: ResMut<Assets<Mesh>>,
|
||||||
mut materials: ResMut<Assets<StandardMaterial>>,
|
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||||
player_transform: &Transform,
|
player_transform: &Transform,
|
||||||
|
@ -88,22 +87,21 @@ fn spawn_projectile(
|
||||||
let player_rot = player_transform.rotation;
|
let player_rot = player_transform.rotation;
|
||||||
|
|
||||||
commands
|
commands
|
||||||
.spawn(PbrBundle {
|
.spawn_bundle(PbrBundle {
|
||||||
mesh: meshes.add(projectile_mesh),
|
mesh: meshes.add(projectile_mesh),
|
||||||
material: materials.add(projectile_material),
|
material: materials.add(projectile_material),
|
||||||
transform: Transform::from_translation(Vec3::new(0.0, 0.0, 0.0)),
|
transform: Transform::from_translation(Vec3::new(0.0, 0.0, 0.0)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.with(ProjectileMarker::default())
|
.insert(ProjectileMarker::default())
|
||||||
.with(
|
.insert(
|
||||||
RigidBodyBuilder::new_dynamic()
|
RigidBodyBuilder::new_dynamic()
|
||||||
.translation(player_trans.x, player_trans.y, player_trans.z)
|
.translation(player_trans.x, player_trans.y, player_trans.z)
|
||||||
.rotation(Matrix3x1::new(player_rot.x, player_rot.y, player_rot.z))
|
.rotation(Matrix3x1::new(player_rot.x, player_rot.y, player_rot.z))
|
||||||
.mass(0.0, false)
|
|
||||||
.lock_translations()
|
.lock_translations()
|
||||||
.lock_rotations(),
|
.lock_rotations(),
|
||||||
)
|
)
|
||||||
.with(ColliderBuilder::cylinder(0.1, 0.1));
|
.insert(ColliderBuilder::cylinder(0.1, 0.1));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn projectile_system(
|
fn projectile_system(
|
||||||
|
|
10
src/world.rs
10
src/world.rs
|
@ -10,7 +10,7 @@ impl Plugin for WorldPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_world(
|
fn create_world(
|
||||||
commands: &mut Commands,
|
mut commands: Commands,
|
||||||
mut meshes: ResMut<Assets<Mesh>>,
|
mut meshes: ResMut<Assets<Mesh>>,
|
||||||
mut materials: ResMut<Assets<StandardMaterial>>,
|
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||||
asset_server: Res<AssetServer>,
|
asset_server: Res<AssetServer>,
|
||||||
|
@ -22,7 +22,7 @@ fn create_world(
|
||||||
for x in -(AMOUNT / 2)..(AMOUNT / 2) {
|
for x in -(AMOUNT / 2)..(AMOUNT / 2) {
|
||||||
for y in -(AMOUNT / 2)..(AMOUNT / 2) {
|
for y in -(AMOUNT / 2)..(AMOUNT / 2) {
|
||||||
for z in -(AMOUNT / 2)..(AMOUNT / 2) {
|
for z in -(AMOUNT / 2)..(AMOUNT / 2) {
|
||||||
commands.spawn(PbrBundle {
|
commands.spawn_bundle(PbrBundle {
|
||||||
mesh: box_mesh.clone(),
|
mesh: box_mesh.clone(),
|
||||||
material: box_material.clone(),
|
material: box_material.clone(),
|
||||||
transform: Transform::from_translation(Vec3::new(x as f32, y as f32, z as f32)),
|
transform: Transform::from_translation(Vec3::new(x as f32, y as f32, z as f32)),
|
||||||
|
@ -33,7 +33,7 @@ fn create_world(
|
||||||
}
|
}
|
||||||
|
|
||||||
// a simple light
|
// a simple light
|
||||||
commands.spawn(LightBundle {
|
commands.spawn_bundle(LightBundle {
|
||||||
transform: Transform::from_translation(Vec3::new(4.0, 8.0, 4.0)),
|
transform: Transform::from_translation(Vec3::new(4.0, 8.0, 4.0)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
@ -42,8 +42,8 @@ fn create_world(
|
||||||
let floor_texture_handle = materials.add(asset_server.load("textures/blocks17floor2.png").into());
|
let floor_texture_handle = materials.add(asset_server.load("textures/blocks17floor2.png").into());
|
||||||
let rigid_body1 = RigidBodyBuilder::new_static();
|
let rigid_body1 = RigidBodyBuilder::new_static();
|
||||||
let collider1 = ColliderBuilder::cuboid(10.0, 0.1, 10.0);
|
let collider1 = ColliderBuilder::cuboid(10.0, 0.1, 10.0);
|
||||||
commands.spawn((rigid_body1, collider1));
|
commands.spawn_bundle((rigid_body1, collider1));
|
||||||
commands.spawn(PbrBundle {
|
commands.spawn_bundle(PbrBundle {
|
||||||
mesh: meshes.add(Mesh::from(shape::Plane { size: 20. })),
|
mesh: meshes.add(Mesh::from(shape::Plane { size: 20. })),
|
||||||
material: floor_texture_handle,
|
material: floor_texture_handle,
|
||||||
transform: Transform::from_translation(Vec3::new(0.0, 0.1, 0.0)),
|
transform: Transform::from_translation(Vec3::new(0.0, 0.1, 0.0)),
|
||||||
|
|
Loading…
Reference in a new issue