add grid in map, so the player actually knows wtf is going on
This commit is contained in:
parent
098c47b030
commit
4daa0e8a68
4 changed files with 64 additions and 10 deletions
BIN
assets/models/mapgrid.glb
Normal file
BIN
assets/models/mapgrid.glb
Normal file
Binary file not shown.
BIN
src/blender/mapgrid.blend
Normal file
BIN
src/blender/mapgrid.blend
Normal file
Binary file not shown.
|
@ -90,6 +90,12 @@ impl Plugin for CameraPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
|
pub enum MapGrid {
|
||||||
|
HighRes,
|
||||||
|
LowRes,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Component, Default)]
|
||||||
pub struct ShowOnlyInMap {
|
pub struct ShowOnlyInMap {
|
||||||
pub min_distance: f64,
|
pub min_distance: f64,
|
||||||
pub distance_to_id: String,
|
pub distance_to_id: String,
|
||||||
|
@ -126,6 +132,7 @@ impl Default for MapCam {
|
||||||
pub fn setup_camera(
|
pub fn setup_camera(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
settings: Res<var::Settings>,
|
settings: Res<var::Settings>,
|
||||||
|
asset_server: Res<AssetServer>,
|
||||||
prefs: Res<var::Preferences>,
|
prefs: Res<var::Preferences>,
|
||||||
) {
|
) {
|
||||||
// Add player
|
// Add player
|
||||||
|
@ -201,6 +208,28 @@ pub fn setup_camera(
|
||||||
commands.insert_resource(DirectionalLightShadowMap {
|
commands.insert_resource(DirectionalLightShadowMap {
|
||||||
size: settings.shadowmap_resolution,
|
size: settings.shadowmap_resolution,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add map grid
|
||||||
|
let mut entitycmd = commands.spawn((
|
||||||
|
MapGrid::HighRes,
|
||||||
|
hud::ToggleableHudElement,
|
||||||
|
ShowOnlyInMap::default(),
|
||||||
|
bevy::pbr::NotShadowCaster,
|
||||||
|
bevy::pbr::NotShadowReceiver,
|
||||||
|
visual::IsEffect,
|
||||||
|
SpatialBundle::default(),
|
||||||
|
));
|
||||||
|
load_asset("mapgrid", &mut entitycmd, &*asset_server);
|
||||||
|
let mut entitycmd = commands.spawn((
|
||||||
|
MapGrid::LowRes,
|
||||||
|
hud::ToggleableHudElement,
|
||||||
|
ShowOnlyInMap::default(),
|
||||||
|
bevy::pbr::NotShadowCaster,
|
||||||
|
bevy::pbr::NotShadowReceiver,
|
||||||
|
visual::IsEffect,
|
||||||
|
SpatialBundle::default(),
|
||||||
|
));
|
||||||
|
load_asset("mapgrid", &mut entitycmd, &*asset_server);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sync_camera_to_player(
|
pub fn sync_camera_to_player(
|
||||||
|
@ -259,6 +288,14 @@ pub fn update_map_camera(
|
||||||
),
|
),
|
||||||
>,
|
>,
|
||||||
q_target_changed: Query<(), Changed<hud::IsTargeted>>,
|
q_target_changed: Query<(), Changed<hud::IsTargeted>>,
|
||||||
|
mut q_mapgrid: Query<
|
||||||
|
(&mut Transform, &MapGrid),
|
||||||
|
(
|
||||||
|
Without<hud::IsTargeted>,
|
||||||
|
Without<Camera>,
|
||||||
|
Without<actor::PlayerCamera>,
|
||||||
|
),
|
||||||
|
>,
|
||||||
mut mouse_events: EventReader<MouseMotion>,
|
mut mouse_events: EventReader<MouseMotion>,
|
||||||
mut er_mousewheel: EventReader<MouseWheel>,
|
mut er_mousewheel: EventReader<MouseWheel>,
|
||||||
keyboard_input: Res<ButtonInput<KeyCode>>,
|
keyboard_input: Res<ButtonInput<KeyCode>>,
|
||||||
|
@ -275,6 +312,18 @@ pub fn update_map_camera(
|
||||||
};
|
};
|
||||||
mapcam.center_on_entity = Some(target_entity);
|
mapcam.center_on_entity = Some(target_entity);
|
||||||
|
|
||||||
|
// Update map grid
|
||||||
|
let step: f64 = 5.0;
|
||||||
|
for (mut trans, mapgrid) in &mut q_mapgrid {
|
||||||
|
trans.translation = Vec3::ZERO;
|
||||||
|
let scale = step.powf(mapcam.zoom_level.log(step).floor());
|
||||||
|
let scale = match mapgrid {
|
||||||
|
MapGrid::HighRes => scale,
|
||||||
|
MapGrid::LowRes => scale * step,
|
||||||
|
};
|
||||||
|
trans.scale = Vec3::splat(scale as f32);
|
||||||
|
}
|
||||||
|
|
||||||
// Get mouse movement
|
// Get mouse movement
|
||||||
let mut mouse_delta = Vec2::ZERO;
|
let mut mouse_delta = Vec2::ZERO;
|
||||||
for mouse_event in mouse_events.read() {
|
for mouse_event in mouse_events.read() {
|
||||||
|
@ -625,19 +674,23 @@ pub fn update_map_only_object_visibility(
|
||||||
let cam_pos: Vec3 = cam.translation + player_pos.as_vec3();
|
let cam_pos: Vec3 = cam.translation + player_pos.as_vec3();
|
||||||
for (mut vis, onlyinmap) in &mut q_onlyinmap {
|
for (mut vis, onlyinmap) in &mut q_onlyinmap {
|
||||||
if settings.map_active && settings.hud_active {
|
if settings.map_active && settings.hud_active {
|
||||||
if let Some(pos) = id2pos.0.get(&onlyinmap.distance_to_id) {
|
if onlyinmap.distance_to_id.is_empty() {
|
||||||
let dist = cam_pos.distance(pos.as_vec3());
|
*vis = Visibility::Inherited;
|
||||||
if dist >= onlyinmap.min_distance as f32 {
|
} else {
|
||||||
*vis = Visibility::Inherited;
|
if let Some(pos) = id2pos.0.get(&onlyinmap.distance_to_id) {
|
||||||
|
let dist = cam_pos.distance(pos.as_vec3());
|
||||||
|
if dist >= onlyinmap.min_distance as f32 {
|
||||||
|
*vis = Visibility::Inherited;
|
||||||
|
} else {
|
||||||
|
*vis = Visibility::Hidden;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
error!(
|
||||||
|
"Failed get position of actor ID '{}'",
|
||||||
|
&onlyinmap.distance_to_id
|
||||||
|
);
|
||||||
*vis = Visibility::Hidden;
|
*vis = Visibility::Hidden;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
error!(
|
|
||||||
"Failed get position of actor ID '{}'",
|
|
||||||
&onlyinmap.distance_to_id
|
|
||||||
);
|
|
||||||
*vis = Visibility::Hidden;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
*vis = Visibility::Hidden;
|
*vis = Visibility::Hidden;
|
||||||
|
|
|
@ -63,6 +63,7 @@ pub fn asset_name_to_path(name: &str) -> &'static str {
|
||||||
"pizzasign" => "models/pizzasign.glb#Scene0",
|
"pizzasign" => "models/pizzasign.glb#Scene0",
|
||||||
"selectagon" => "models/selectagon.glb#Scene0",
|
"selectagon" => "models/selectagon.glb#Scene0",
|
||||||
"orbitring" => "models/orbitring.glb#Scene0",
|
"orbitring" => "models/orbitring.glb#Scene0",
|
||||||
|
"mapgrid" => "models/mapgrid.glb#Scene0",
|
||||||
"clippy" => "models/clippy/clippy.glb#Scene0",
|
"clippy" => "models/clippy/clippy.glb#Scene0",
|
||||||
"clippy_ar" => "models/clippy/ar_happy.glb#Scene0",
|
"clippy_ar" => "models/clippy/ar_happy.glb#Scene0",
|
||||||
"whale" => "models/whale.gltf#Scene0",
|
"whale" => "models/whale.gltf#Scene0",
|
||||||
|
|
Loading…
Add table
Reference in a new issue