Lightyear setup (#55)
This commit is contained in:
@@ -58,11 +58,15 @@ fn on_trigger_arrow(
|
||||
state.rot.mul_quat(Quat::from_rotation_y(PI))
|
||||
};
|
||||
|
||||
let mut t = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
t.translation += t.forward().as_vec3() * 2.;
|
||||
let mut transform = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
transform.translation += transform.forward().as_vec3() * 2.;
|
||||
|
||||
let damage = heads_db.head_stats(state.head).damage;
|
||||
commands.spawn((Name::new("projectile-arrow"), ArrowProjectile { damage }, t));
|
||||
commands.spawn((
|
||||
Name::new("projectile-arrow"),
|
||||
ArrowProjectile { damage },
|
||||
transform,
|
||||
));
|
||||
}
|
||||
|
||||
fn update(
|
||||
|
||||
@@ -6,12 +6,17 @@ use crate::{
|
||||
hitpoints::Hit,
|
||||
loading_assets::GameAssets,
|
||||
physics_layers::GameLayer,
|
||||
protocol::GltfSceneRoot,
|
||||
tb_entities::EnemySpawn,
|
||||
utils::{auto_rotate::AutoRotation, global_observer, sprite_3d_animation::AnimationTimer},
|
||||
utils::{
|
||||
auto_rotate::AutoRotation, commands::CommandExt, global_observer,
|
||||
sprite_3d_animation::AnimationTimer,
|
||||
},
|
||||
};
|
||||
use avian3d::prelude::*;
|
||||
use bevy::{pbr::NotShadowCaster, prelude::*};
|
||||
use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams};
|
||||
use lightyear::prelude::{NetworkTarget, Replicate};
|
||||
use std::f32::consts::PI;
|
||||
|
||||
const MAX_SHOT_AGES: f32 = 15.;
|
||||
@@ -58,8 +63,6 @@ fn on_trigger_missile(
|
||||
query_transform: Query<&Transform>,
|
||||
time: Res<Time>,
|
||||
heads_db: Res<HeadsDatabase>,
|
||||
assets: Res<GameAssets>,
|
||||
gltf_assets: Res<Assets<Gltf>>,
|
||||
) {
|
||||
let state = trigger.event().0;
|
||||
|
||||
@@ -76,33 +79,32 @@ fn on_trigger_missile(
|
||||
|
||||
let head = heads_db.head_stats(state.head);
|
||||
|
||||
let mut t = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
t.translation += t.forward().as_vec3() * 2.0;
|
||||
let mut transform = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
transform.translation += transform.forward().as_vec3() * 2.0;
|
||||
|
||||
let mesh = assets.projectiles[format!("{}.glb", head.projectile).as_str()].clone();
|
||||
let asset = gltf_assets.get(&mesh).unwrap();
|
||||
|
||||
commands.spawn((
|
||||
Name::new("projectile-missile"),
|
||||
CurverProjectile {
|
||||
time: time.elapsed_secs(),
|
||||
damage: head.damage,
|
||||
},
|
||||
Collider::capsule_endpoints(0.4, Vec3::new(0., 0., 2.), Vec3::new(0., 0., -2.)),
|
||||
CollisionLayers::new(
|
||||
LayerMask(GameLayer::Projectile.to_bits()),
|
||||
LayerMask(state.target_layer.to_bits() | GameLayer::Level.to_bits()),
|
||||
),
|
||||
Sensor,
|
||||
CollisionEventsEnabled,
|
||||
Visibility::default(),
|
||||
t,
|
||||
children![(
|
||||
Transform::from_rotation(Quat::from_rotation_x(PI / 2.).inverse()),
|
||||
AutoRotation(Quat::from_rotation_x(0.4) * Quat::from_rotation_z(0.3)),
|
||||
SceneRoot(asset.scenes[0].clone()),
|
||||
),],
|
||||
));
|
||||
commands
|
||||
.spawn((
|
||||
Name::new("projectile-missile"),
|
||||
CurverProjectile {
|
||||
time: time.elapsed_secs(),
|
||||
damage: head.damage,
|
||||
},
|
||||
Collider::capsule_endpoints(0.4, Vec3::new(0., 0., 2.), Vec3::new(0., 0., -2.)),
|
||||
CollisionLayers::new(
|
||||
LayerMask(GameLayer::Projectile.to_bits()),
|
||||
LayerMask(state.target_layer.to_bits() | GameLayer::Level.to_bits()),
|
||||
),
|
||||
Sensor,
|
||||
CollisionEventsEnabled,
|
||||
Visibility::default(),
|
||||
transform,
|
||||
children![(
|
||||
Transform::from_rotation(Quat::from_rotation_x(PI / 2.).inverse()),
|
||||
AutoRotation(Quat::from_rotation_x(0.4) * Quat::from_rotation_z(0.3)),
|
||||
GltfSceneRoot::Projectile(head.projectile.clone()),
|
||||
),],
|
||||
))
|
||||
.insert_server(Replicate::to_clients(NetworkTarget::All));
|
||||
}
|
||||
|
||||
fn enemy_hit(
|
||||
|
||||
@@ -97,8 +97,8 @@ fn on_trigger_gun(
|
||||
state.rot.mul_quat(Quat::from_rotation_y(PI))
|
||||
};
|
||||
|
||||
let mut t = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
t.translation += t.forward().as_vec3() * 2.0;
|
||||
let mut transform = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
transform.translation += transform.forward().as_vec3() * 2.0;
|
||||
|
||||
commands.spawn((
|
||||
Name::new("projectile-gun"),
|
||||
@@ -114,7 +114,7 @@ fn on_trigger_gun(
|
||||
Sensor,
|
||||
CollisionEventsEnabled,
|
||||
Visibility::default(),
|
||||
t,
|
||||
transform,
|
||||
Children::spawn(Spawn(Gizmo {
|
||||
handle: gizmo_assets.add({
|
||||
let mut g = GizmoAsset::default();
|
||||
|
||||
@@ -5,14 +5,17 @@ use crate::{
|
||||
heads_database::HeadsDatabase,
|
||||
loading_assets::GameAssets,
|
||||
physics_layers::GameLayer,
|
||||
protocol::GltfSceneRoot,
|
||||
sounds::PlaySound,
|
||||
utils::{
|
||||
explosions::Explosion, global_observer, sprite_3d_animation::AnimationTimer, trail::Trail,
|
||||
commands::CommandExt, explosions::Explosion, global_observer,
|
||||
sprite_3d_animation::AnimationTimer, trail::Trail,
|
||||
},
|
||||
};
|
||||
use avian3d::prelude::*;
|
||||
use bevy::{pbr::NotShadowCaster, prelude::*};
|
||||
use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams};
|
||||
use lightyear::prelude::{NetworkTarget, Replicate};
|
||||
use std::f32::consts::PI;
|
||||
|
||||
const MAX_SHOT_AGES: f32 = 15.;
|
||||
@@ -56,8 +59,6 @@ fn on_trigger_missile(
|
||||
query_transform: Query<&Transform>,
|
||||
time: Res<Time>,
|
||||
heads_db: Res<HeadsDatabase>,
|
||||
assets: Res<GameAssets>,
|
||||
gltf_assets: Res<Assets<Gltf>>,
|
||||
mut gizmo_assets: ResMut<Assets<GizmoAsset>>,
|
||||
) {
|
||||
let state = trigger.event().0;
|
||||
@@ -75,51 +76,50 @@ fn on_trigger_missile(
|
||||
|
||||
let head = heads_db.head_stats(state.head);
|
||||
|
||||
let mut t = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
t.translation += t.forward().as_vec3() * 2.0;
|
||||
let mut transform = Transform::from_translation(state.pos).with_rotation(rotation);
|
||||
transform.translation += transform.forward().as_vec3() * 2.0;
|
||||
|
||||
let mesh = assets.projectiles["missile.glb"].clone();
|
||||
let asset = gltf_assets.get(&mesh).unwrap();
|
||||
|
||||
commands.spawn((
|
||||
Name::new("projectile-missile"),
|
||||
MissileProjectile {
|
||||
time: time.elapsed_secs(),
|
||||
damage: head.damage,
|
||||
},
|
||||
Collider::capsule_endpoints(0.4, Vec3::new(0., 0., 2.), Vec3::new(0., 0., -2.)),
|
||||
CollisionLayers::new(
|
||||
LayerMask(GameLayer::Projectile.to_bits()),
|
||||
LayerMask(state.target_layer.to_bits() | GameLayer::Level.to_bits()),
|
||||
),
|
||||
Sensor,
|
||||
CollisionEventsEnabled,
|
||||
Visibility::default(),
|
||||
t,
|
||||
children![
|
||||
(
|
||||
Transform::from_rotation(Quat::from_rotation_x(PI / 2.).inverse())
|
||||
.with_scale(Vec3::splat(0.04)),
|
||||
SceneRoot(asset.scenes[0].clone()),
|
||||
commands
|
||||
.spawn((
|
||||
Name::new("projectile-missile"),
|
||||
MissileProjectile {
|
||||
time: time.elapsed_secs(),
|
||||
damage: head.damage,
|
||||
},
|
||||
Collider::capsule_endpoints(0.4, Vec3::new(0., 0., 2.), Vec3::new(0., 0., -2.)),
|
||||
CollisionLayers::new(
|
||||
LayerMask(GameLayer::Projectile.to_bits()),
|
||||
LayerMask(state.target_layer.to_bits() | GameLayer::Level.to_bits()),
|
||||
),
|
||||
(
|
||||
Trail::new(
|
||||
12,
|
||||
LinearRgba::rgb(1., 0.0, 0.),
|
||||
LinearRgba::rgb(0.9, 0.9, 0.)
|
||||
)
|
||||
.with_pos(t.translation),
|
||||
Gizmo {
|
||||
handle: gizmo_assets.add(GizmoAsset::default()),
|
||||
line_config: GizmoLineConfig {
|
||||
width: 10.,
|
||||
Sensor,
|
||||
CollisionEventsEnabled,
|
||||
Visibility::default(),
|
||||
transform,
|
||||
children![
|
||||
(
|
||||
Transform::from_rotation(Quat::from_rotation_x(PI / 2.).inverse())
|
||||
.with_scale(Vec3::splat(0.04)),
|
||||
GltfSceneRoot::Projectile("missile".to_string()),
|
||||
),
|
||||
(
|
||||
Trail::new(
|
||||
12,
|
||||
LinearRgba::rgb(1., 0.0, 0.),
|
||||
LinearRgba::rgb(0.9, 0.9, 0.)
|
||||
)
|
||||
.with_pos(transform.translation),
|
||||
Gizmo {
|
||||
handle: gizmo_assets.add(GizmoAsset::default()),
|
||||
line_config: GizmoLineConfig {
|
||||
width: 10.,
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
)
|
||||
],
|
||||
));
|
||||
)
|
||||
],
|
||||
))
|
||||
.insert_server(Replicate::to_clients(NetworkTarget::All));
|
||||
}
|
||||
|
||||
fn update(mut query: Query<&mut Transform, With<MissileProjectile>>) {
|
||||
|
||||
@@ -5,9 +5,10 @@ use crate::{
|
||||
heads_database::HeadsDatabase,
|
||||
loading_assets::GameAssets,
|
||||
physics_layers::GameLayer,
|
||||
protocol::GltfSceneRoot,
|
||||
sounds::PlaySound,
|
||||
utils::{
|
||||
auto_rotate::AutoRotation, explosions::Explosion, global_observer,
|
||||
auto_rotate::AutoRotation, commands::CommandExt, explosions::Explosion, global_observer,
|
||||
sprite_3d_animation::AnimationTimer,
|
||||
},
|
||||
};
|
||||
@@ -15,10 +16,12 @@ use avian3d::prelude::*;
|
||||
use bevy::{pbr::NotShadowCaster, prelude::*};
|
||||
use bevy_ballistic::launch_velocity;
|
||||
use bevy_sprite3d::{Sprite3dBuilder, Sprite3dParams};
|
||||
use lightyear::prelude::{NetworkTarget, Replicate};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::f32::consts::PI;
|
||||
|
||||
#[derive(Component)]
|
||||
struct ThrownProjectile {
|
||||
#[derive(Component, Serialize, Deserialize, PartialEq)]
|
||||
pub struct ThrownProjectile {
|
||||
impact_animation: bool,
|
||||
damage: u32,
|
||||
}
|
||||
@@ -50,8 +53,6 @@ fn on_trigger_thrown(
|
||||
trigger: Trigger<TriggerThrow>,
|
||||
mut commands: Commands,
|
||||
query_transform: Query<&Transform>,
|
||||
assets: Res<GameAssets>,
|
||||
gltf_assets: Res<Assets<Gltf>>,
|
||||
heads_db: Res<HeadsDatabase>,
|
||||
) {
|
||||
let state = trigger.event().0;
|
||||
@@ -76,8 +77,6 @@ fn on_trigger_thrown(
|
||||
};
|
||||
|
||||
let head = heads_db.head_stats(state.head);
|
||||
let mesh = assets.projectiles[format!("{}.glb", head.projectile).as_str()].clone();
|
||||
let asset = gltf_assets.get(&mesh).unwrap();
|
||||
|
||||
//TODO: projectile db?
|
||||
let explosion_animation = !matches!(state.head, 8 | 16);
|
||||
@@ -102,9 +101,10 @@ fn on_trigger_thrown(
|
||||
Visibility::default(),
|
||||
Sensor,
|
||||
))
|
||||
.insert_server(Replicate::to_clients(NetworkTarget::All))
|
||||
.with_child((
|
||||
AutoRotation(Quat::from_rotation_x(0.4) * Quat::from_rotation_z(0.3)),
|
||||
SceneRoot(asset.scenes[0].clone()),
|
||||
GltfSceneRoot::Projectile(head.projectile.clone()),
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user