Guest User

Post Update Functions

a guest
Jun 30th, 2025
4
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 3.96 KB | None | 0 0
  1. pub fn disable_tiled_entities_when_hidden(
  2.     mut commands: Commands,
  3.     q_rendereable_entities: Query<(Entity, &Visibility, &InheritedVisibility), (With<TiledCollidersSpawned>, Or<(With<TiledMapMarker>, With<TiledMapLayer>, With<TiledMapObject>)>)>
  4. ) {
  5.     for (entity, visibility, inherited_visibility) in q_rendereable_entities {
  6.         if
  7.             visibility == Visibility::Visible ||
  8.             visibility == Visibility::Inherited && inherited_visibility.get()
  9.         {
  10.             continue;
  11.         }
  12.  
  13.         info!("disabled entity {}", entity);
  14.  
  15.         commands.entity(entity).insert((
  16.             Disabled,
  17.             DisabledByVisibility
  18.         ));
  19.     }
  20. }
  21.  
  22. pub fn enable_tiled_entities(
  23.     mut commands: Commands,
  24.     q_rendereable_entities: Query<Entity, (With<DisabledByVisibility>, With<Disabled>, Or<(With<TiledMapMarker>, With<TiledMapLayer>, With<TiledMapObject>)>)>
  25. ) {
  26.     info!("enabled all entities");
  27.     for entity in q_rendereable_entities {
  28.         commands.entity(entity).remove::<(
  29.             Disabled,
  30.             DisabledByVisibility
  31.         )>();
  32.     }
  33. }
  34.  
  35. pub fn disable_tiled_colliders_when_parent_disabled(
  36.     mut commands: Commands,
  37.     q_colliders: Query<(Entity, &ChildOf), With<TiledColliderMarker>>,
  38.     q_parents: Query<Entity, With<Disabled>>
  39. ) {
  40.     for (entity, child_of) in q_colliders.iter() {
  41.         if !q_parents.contains(child_of.0) {
  42.             continue;
  43.         };
  44.  
  45.         info!("disabled collider {}", entity);
  46.  
  47.         commands.entity(entity).insert((
  48.             DisabledByParent,
  49.             Disabled
  50.         ));
  51.     }
  52. }
  53.  
  54. pub fn enable_tiled_colliders_when_parent_enabled(
  55.     mut commands: Commands,
  56.     q_colliders: Query<(Entity, &ChildOf), (With<DisabledByParent>, With<Disabled>, With<TiledColliderMarker>)>,
  57.     q_parents: Query<Entity>
  58. ) {
  59.     for (entity, child_of) in q_colliders.iter() {
  60.         if !q_parents.contains(child_of.0) {
  61.             continue;
  62.         };
  63.  
  64.         info!("enabled collider {}", entity);
  65.  
  66.         commands.entity(entity).remove::<(
  67.             DisabledByParent,
  68.             Disabled
  69.         )>();
  70.     }
  71. }
  72.  
  73. fn compute_grid_collision(
  74.     mut commands: Commands,
  75.     mut s_grid: Single<(&mut Grid<CardinalNeighborhood>, &GridTileSize, &TilemapAnchor)>,
  76.     s_scan_collider: Single<&Collider, With<ScanCollider>>,
  77.     q_colliders: Query<(Entity, &GlobalTransform, &Collider, &RigidBody), (Without<GridCollisionCalculated>, Without<TriggerCollider>)>,
  78. ) {
  79.     if q_colliders.is_empty() {
  80.         return;
  81.     }
  82.  
  83.     info!("computed grid");
  84.  
  85.     let (grid, tile_size, anchor) = s_grid.deref_mut();
  86.  
  87.     let offset = anchor.as_offset(
  88.         &TilemapSize::new(grid.width(), grid.height()),
  89.         &TilemapGridSize::new(tile_size.0.x, tile_size.0.y),
  90.         &TilemapTileSize::new(tile_size.0.x, tile_size.0.y),
  91.         &TilemapType::Square,
  92.     );
  93.  
  94.     let collider = s_scan_collider.into_inner();
  95.  
  96.     for (entity, other_collider_transform, other_collider, rigid_body) in q_colliders.iter() {
  97.         if *rigid_body != RigidBody::Static {
  98.             continue;
  99.         }
  100.  
  101.         for x in 0..grid.width() {
  102.             for y in 0..grid.height() {
  103.                 let collider_translation = offset + tile_size.0 * Vec2::new(x as f32, y as f32);
  104.  
  105.                 let Ok(result) = contact_query::intersection_test(
  106.                     collider,
  107.                     collider_translation,
  108.                     Quat::default(),
  109.                     other_collider,
  110.                     other_collider_transform.translation().truncate(),
  111.                     other_collider_transform.rotation()
  112.                 ) else {
  113.                     continue;
  114.                 };
  115.  
  116.                 if !result {
  117.                     continue;
  118.                 }
  119.  
  120.                 grid.set_point(UVec3::new(x, y, 0), Point::new(0, true));
  121.             }
  122.         }
  123.  
  124.         commands.entity(entity).insert(GridCollisionCalculated);
  125.     }
  126.  
  127.     grid.build();
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment