Skip to content

Commit

Permalink
fix spawning; fix wall collision
Browse files Browse the repository at this point in the history
  • Loading branch information
stillonearth committed Dec 25, 2023
1 parent 205c5e2 commit 66b7923
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 13 deletions.
28 changes: 27 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,34 @@ license = "MIT OR Apache-2.0"

[dependencies]
bevy = "0.11"
bevy_ecs_ldtk = {version="0.8", features=["default", "derive", "atlas", "render"]}
bevy_ecs_ldtk = { version = "0.8", features = [
"default",
"derive",
"atlas",
"render",
] }
bevy-inspector-egui = "0.19"
bevy_rapier2d = "0.22"
rand = "0.8.5"
pecs = "0.4"
# bevy_nine_slice_ui = "0.2"

[profile.dev.package."*"]
opt-level = 3

[profile.dev]
opt-level = 1

[profile.release]
lto = true
codegen-units = 1

# The profile that 'cargo dist' will build with
[profile.dist]
inherits = "release"
lto = "thin"

[features]
dev = [
"bevy/dynamic_linking",
]
3 changes: 1 addition & 2 deletions src/ai.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ pub(crate) fn mierda_activity(
mierda.hit_at = None;
}
}

v.linvel = Vec2::new(
mierda.move_direction.x * rotation_angle.cos()
- mierda.move_direction.y * rotation_angle.sin(),
Expand All @@ -46,7 +45,7 @@ pub(crate) fn update_mierdas_move_direction(
{
direction_update_timer.timer.tick(time.delta());

if direction_update_timer.timer.finished() {
if direction_update_timer.timer.finished() || mierda.move_direction == Vec2::ZERO {
let mierda_position = mierda_position.translation;
mierda.move_direction = Vec2::new(
player_position.x - mierda_position.x,
Expand Down
35 changes: 30 additions & 5 deletions src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ use bevy_ecs_ldtk::{LdtkLevel, LevelSelection};
use bevy_rapier2d::prelude::Velocity;
use pecs::prelude::*;

use rand::Rng;

use crate::{
components::{Mierda, Player},
sprites::{AnimationDirection, CharacterAnimation, FlashingTimer},
Expand Down Expand Up @@ -37,10 +39,17 @@ pub fn event_spawn_mierda(
level_selection: Res<LevelSelection>,
level_handles: Query<(Entity, &Handle<LdtkLevel>)>,
level_assets: Res<Assets<LdtkLevel>>,
_texture_atlasses: ResMut<Assets<TextureAtlas>>,
los_mierdas: Query<(Entity, &Parent, &mut Visibility, &Mierda)>,
los_mierdas: Query<(Entity, &Parent, &Mierda)>,
levels: Query<(Entity, &Handle<LdtkLevel>)>,
q_player_query: Query<(Entity, &Transform, &Player)>,
) {
if q_player_query.iter().count() == 0 {
return;
}

let mut rng = rand::thread_rng();
let player_translation = q_player_query.single().1.translation;

for ev_spawn in ev_spawn_mierda.iter() {
for (_, level_handle) in level_handles.iter() {
let level = &level_assets.get(level_handle).unwrap().level;
Expand All @@ -52,9 +61,7 @@ pub fn event_spawn_mierda(
.unwrap();

for _i in 0..ev_spawn.count {
for (mierda_entity, mierda_parent, _mierda_visibility, mierda) in
los_mierdas.iter()
{
for (mierda_entity, mierda_parent, mierda) in los_mierdas.iter() {
if !mierda.is_dummy {
continue;
}
Expand All @@ -73,6 +80,22 @@ pub fn event_spawn_mierda(
new_entity = Some(ne);
});

// generate random position

let mut offset_position = Vec3::new(0.0, 0.0, 0.);
let mut mierda_position = player_translation + offset_position;

while (player_translation - mierda_position).length() < 50.0 {
let x = rng.gen_range(-100.0..100.0);
let y = rng.gen_range(-100.0..100.0);

offset_position = Vec3::new(x, y, 0.);
mierda_position = player_translation + offset_position;
}

let transform = Transform::from_translation(mierda_position)
.with_scale(Vec3::ONE * 0.5);

let new_entity = new_entity.unwrap();
commands.entity(new_entity).insert(Mierda {
is_dummy: false,
Expand All @@ -85,6 +108,8 @@ pub fn event_spawn_mierda(
source: mierda_entity,
destination: new_entity,
});

commands.entity(new_entity).insert(transform);
}
}
}
Expand Down
8 changes: 5 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#![allow(clippy::too_many_arguments, clippy::type_complexity)]

use bevy::prelude::*;
use bevy::{input::common_conditions::input_toggle_active, prelude::*};
use bevy_ecs_ldtk::prelude::*;
use bevy_inspector_egui::quick::WorldInspectorPlugin;
// use bevy_nine_slice_ui::*;
use bevy_rapier2d::prelude::*;
use components::Mierda;
use pecs::prelude::*;
Expand All @@ -28,7 +29,9 @@ fn main() {

app.add_plugins(DefaultPlugins)
.add_plugins(PecsPlugin)
.add_plugins(WorldInspectorPlugin::new())
.add_plugins(
WorldInspectorPlugin::default().run_if(input_toggle_active(false, KeyCode::Escape)),
)
.add_systems(Startup, setup)
// UI
.add_systems(Startup, ui::draw_ui)
Expand Down Expand Up @@ -105,7 +108,6 @@ fn main() {
.add_event::<events::SpawnMierdaEvent>();

app.run();
// .run();
}

fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
Expand Down
12 changes: 10 additions & 2 deletions src/physics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,22 @@ pub(crate) fn handle_mierda_wall_collisions(
pub(crate) fn handle_player_mierda_collisions(
mut collision_events: EventReader<CollisionEvent>,
mut q_player: Query<(Entity, &mut Player)>,
q_los_mierdas: Query<(Entity, &mut Velocity, &Mierda)>,
mut ev_player_hit: EventWriter<PlayerHitEvent>,
) {
for event in collision_events.iter() {
for (e, _) in q_player.iter_mut() {
if let CollisionEvent::Started(e1, e2, _) = event {
if e1.index() == e.index() || e2.index() == e.index() {
ev_player_hit.send(PlayerHitEvent { entity: e });
if !(e1.index() == e.index() || e2.index() == e.index()) {
continue;
}

let other_entity = if e1.index() == e.index() { *e2 } else { *e1 };
if !q_los_mierdas.get(other_entity).is_ok() {
continue;
}

ev_player_hit.send(PlayerHitEvent { entity: e });
}
}
}
Expand Down

0 comments on commit 66b7923

Please sign in to comment.