1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use bevy::prelude::*;
use de_camera::{CameraDistance, DistanceSet};
use de_core::state::AppState;
use de_terrain::MarkerVisibility;

use crate::{DISTANCE_FLAG_BIT, MAX_VISIBILITY_DISTANCE};

pub(crate) struct MarkersPlugin;

impl Plugin for MarkersPlugin {
    fn build(&self, app: &mut App) {
        app.add_systems(
            PostUpdate,
            update_distance
                .run_if(in_state(AppState::InGame))
                .after(DistanceSet::Update),
        );
    }
}

fn update_distance(
    mut markers: Query<(&CameraDistance, &mut MarkerVisibility), Changed<CameraDistance>>,
) {
    for (cam_distance, mut visibility) in markers.iter_mut() {
        visibility.0.update_invisible(
            DISTANCE_FLAG_BIT,
            cam_distance.distance() > MAX_VISIBILITY_DISTANCE,
        );
    }
}