use super::components::PlotId;
use bevy::prelude::*;
use bevy_camera::visibility::RenderLayers;
use std::collections::{HashMap, VecDeque};
#[derive(Resource, Clone)]
pub struct DashboardRes(pub crate::core::Dashboard);
impl DashboardRes {
pub fn new(dashboard: crate::core::Dashboard) -> Self {
Self(dashboard)
}
}
#[derive(Resource, Default)]
pub struct TileRegistry {
pub by_plot: HashMap<PlotId, Entity>,
pub camera_of: HashMap<PlotId, Entity>,
pub overlay_of: HashMap<PlotId, Entity>,
pub dirty: VecDeque<PlotId>,
}
#[derive(Resource, Default)]
pub struct HoveredTile(pub Option<usize>);
#[derive(Resource, Default)]
pub struct CursorWorldPos {
pub position: Option<Vec2>,
pub data_coords: Option<Vec2>,
pub tile_index: Option<usize>,
}
#[derive(Resource)]
pub struct UnitMeshes {
pub quad: Handle<Mesh>,
pub sphere: Handle<Mesh>,
}
pub fn setup_global_scene(mut commands: Commands) {
commands.insert_resource(AmbientLight {
brightness: 300.0,
..default()
});
commands.spawn((
Camera2d,
Camera {
order: 100, ..default()
},
RenderLayers::layer(0),
));
}
pub fn setup_unit_meshes(mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>) {
let quad = meshes.add(Mesh::from(Rectangle::new(1.0, 1.0)));
let sphere = meshes.add(Mesh::from(Sphere::new(0.5)));
commands.insert_resource(UnitMeshes { quad, sphere });
}
#[derive(Resource, Default)]
pub struct ScatterPoints3D {
pub points: HashMap<usize, Vec<(Vec3, Vec3)>>,
}
#[derive(Clone, Default)]
pub struct AxisInfo3D {
pub x_label: Option<String>,
pub y_label: Option<String>,
pub z_label: Option<String>,
pub bounds_min: [f32; 3],
pub bounds_max: [f32; 3],
}
#[derive(Resource, Default)]
pub struct AxisInfo3DStore {
pub info: HashMap<usize, AxisInfo3D>,
}