From 3fbe81d3883bcc6cf5e121a2c54a4eac9cf59801 Mon Sep 17 00:00:00 2001 From: hheik <4469778+hheik@users.noreply.github.com> Date: Fri, 1 Sep 2023 19:13:07 +0300 Subject: [PATCH] started working on shadows --- src/game/darkness.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/game/darkness.rs b/src/game/darkness.rs index 938ccab..75e618c 100644 --- a/src/game/darkness.rs +++ b/src/game/darkness.rs @@ -8,6 +8,7 @@ use bevy::{ sprite::{Material2dPlugin, Mesh2dHandle}, }; use bevy_ecs_ldtk::{LdtkLevel, LevelEvent}; +use bevy_rapier2d::prelude::{Collider, QueryFilter, RapierContext}; mod material; @@ -173,6 +174,8 @@ fn add_to_level( fn prepare_lights( mut materials: ResMut>, mut images: ResMut>, + rapier_context: Res, + visibility_blocker_query: Query<&VisibilityBlocker>, material_query: Query<&Handle>, point_light_query: Query<(&GlobalTransform, &PointLight2D)>, spot_light_query: Query<(&GlobalTransform, &SpotLight2D)>, @@ -198,6 +201,7 @@ fn prepare_lights( .iter() .enumerate() .for_each(|(i, (transform, light))| { + get_light_geometry(&rapier_context, &visibility_blocker_query, *light); material.point_lights[i] = GpuPointLight2D { position: transform.translation().truncate(), radius: light.radius, @@ -239,3 +243,21 @@ fn prepare_lights( }); } } + +fn get_light_geometry( + rapier_context: &Res, + visibility_blocker_query: &Query<&VisibilityBlocker>, + light: &impl LightAabb, +) -> Vec { + let rect = light.aabb(); + let collider = Collider::cuboid(rect.half_size().x, rect.half_size().y); + let mut filter = QueryFilter::new().exclude_sensors(); + let predicate = |coll_entity| visibility_blocker_query.get(coll_entity).is_ok(); + filter.predicate = Some(&predicate); + let mut colls = vec![]; + rapier_context.intersections_with_shape(rect.center(), 0.0, &collider, filter, |coll| { + colls.push(coll); + true + }); + vec![] +}