From a3db20c9d68936e43811ff9a2f8431494332bb04 Mon Sep 17 00:00:00 2001 From: Christof Petig Date: Sun, 22 Nov 2020 00:05:48 +0100 Subject: [PATCH] Show caves in map --- assets/voxygen/element/map/cave.png | 3 ++ assets/voxygen/element/map/cave_bg.png | 3 ++ assets/voxygen/element/map/cave_hover.png | 3 ++ assets/voxygen/i18n/en.ron | 2 + common/src/msg/world_msg.rs | 1 + voxygen/src/hud/img_ids.rs | 3 ++ voxygen/src/hud/map.rs | 61 ++++++++++++++++++++++- voxygen/src/hud/minimap.rs | 3 ++ voxygen/src/hud/mod.rs | 4 ++ voxygen/src/session.rs | 4 ++ voxygen/src/settings.rs | 2 + world/src/civ/mod.rs | 7 ++- world/src/lib.rs | 10 ++++ 13 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 assets/voxygen/element/map/cave.png create mode 100644 assets/voxygen/element/map/cave_bg.png create mode 100644 assets/voxygen/element/map/cave_hover.png diff --git a/assets/voxygen/element/map/cave.png b/assets/voxygen/element/map/cave.png new file mode 100644 index 0000000000..e6837435ba --- /dev/null +++ b/assets/voxygen/element/map/cave.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3d514d0d812da55df4ab4a1084f08ca7d6374150450b19ba0b5a975f9befdcd +size 156 diff --git a/assets/voxygen/element/map/cave_bg.png b/assets/voxygen/element/map/cave_bg.png new file mode 100644 index 0000000000..626f6b8d38 --- /dev/null +++ b/assets/voxygen/element/map/cave_bg.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c96e7cee0ef68c2bd50407c016c8af2dded071020e053cccc610b9e1bda615f7 +size 155 diff --git a/assets/voxygen/element/map/cave_hover.png b/assets/voxygen/element/map/cave_hover.png new file mode 100644 index 0000000000..e7197a9a61 --- /dev/null +++ b/assets/voxygen/element/map/cave_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b6f9c60863d94567050fc9fe4e22152ec5fc43ccca6694b9c1ac8a09a037e43 +size 212 diff --git a/assets/voxygen/i18n/en.ron b/assets/voxygen/i18n/en.ron index 5b58e3ec5e..2c57b849ef 100644 --- a/assets/voxygen/i18n/en.ron +++ b/assets/voxygen/i18n/en.ron @@ -418,6 +418,8 @@ magically infused items?"#, "hud.map.towns": "Towns", "hud.map.castles": "Castles", "hud.map.dungeons": "Dungeons", + "hud.map.caves": "Caves", + "hud.map.cave": "Cave", "hud.map.town": "Town", "hud.map.castle": "Castle", "hud.map.dungeon": "Dungeon", diff --git a/common/src/msg/world_msg.rs b/common/src/msg/world_msg.rs index be2d16292d..5290871b81 100644 --- a/common/src/msg/world_msg.rs +++ b/common/src/msg/world_msg.rs @@ -136,4 +136,5 @@ pub enum SiteKind { Town, Dungeon { difficulty: u32 }, Castle, + Cave, } diff --git a/voxygen/src/hud/img_ids.rs b/voxygen/src/hud/img_ids.rs index fe9f525e2e..c68a98253a 100644 --- a/voxygen/src/hud/img_ids.rs +++ b/voxygen/src/hud/img_ids.rs @@ -210,6 +210,9 @@ image_ids! { mmap_site_castle: "voxygen.element.map.castle", mmap_site_castle_hover: "voxygen.element.map.castle_hover", mmap_site_castle_bg: "voxygen.element.map.castle_bg", + mmap_site_cave_bg: "voxygen.element.map.cave_bg", + mmap_site_cave_hover: "voxygen.element.map.cave_hover", + mmap_site_cave: "voxygen.element.map.cave", // Window Parts window_3: "voxygen.element.frames.window_3", diff --git a/voxygen/src/hud/map.rs b/voxygen/src/hud/map.rs index 8ea0fd4944..498babea7d 100644 --- a/voxygen/src/hud/map.rs +++ b/voxygen/src/hud/map.rs @@ -55,7 +55,9 @@ widget_ids! { drag_ico, zoom_txt, zoom_ico, - + show_caves_img, + show_caves_box, + show_caves_text, } } @@ -117,6 +119,7 @@ pub enum Event { ShowTowns(bool), ShowCastles(bool), ShowDungeons(bool), + ShowCaves(bool), Close, } @@ -142,6 +145,7 @@ impl<'a> Widget for Map<'a> { let show_towns = self.global_state.settings.gameplay.map_show_towns; let show_dungeons = self.global_state.settings.gameplay.map_show_dungeons; let show_castles = self.global_state.settings.gameplay.map_show_castles; + let show_caves = self.global_state.settings.gameplay.map_show_caves; let mut events = Vec::new(); let i18n = &self.localized_strings; // Tooltips @@ -453,6 +457,40 @@ impl<'a> Widget for Map<'a> { .graphics_for(state.ids.show_dungeons_box) .color(TEXT_COLOR) .set(state.ids.show_dungeons_text, ui); + // Caves + Image::new(self.imgs.mmap_site_cave) + .down_from(state.ids.show_dungeons_img, 10.0) + .w_h(20.0, 20.0) + .set(state.ids.show_caves_img, ui); + if Button::image(if show_caves { + self.imgs.checkbox_checked + } else { + self.imgs.checkbox + }) + .w_h(18.0, 18.0) + .hover_image(if show_caves { + self.imgs.checkbox_checked_mo + } else { + self.imgs.checkbox_mo + }) + .press_image(if show_caves { + self.imgs.checkbox_checked + } else { + self.imgs.checkbox_press + }) + .right_from(state.ids.show_caves_img, 10.0) + .set(state.ids.show_caves_box, ui) + .was_clicked() + { + events.push(Event::ShowCaves(!show_caves)); + } + Text::new(i18n.get("hud.map.caves")) + .right_from(state.ids.show_caves_box, 10.0) + .font_size(self.fonts.cyri.scale(14)) + .font_id(self.fonts.cyri.conrod_id) + .graphics_for(state.ids.show_caves_box) + .color(TEXT_COLOR) + .set(state.ids.show_caves_text, ui); // Map icons if state.ids.mmap_site_icons.len() < self.client.sites().len() { state.update(|state| { @@ -493,6 +531,7 @@ impl<'a> Widget for Map<'a> { SiteKind::Town => i18n.get("hud.map.town"), SiteKind::Dungeon { .. } => i18n.get("hud.map.dungeon"), SiteKind::Castle => i18n.get("hud.map.castle"), + SiteKind::Cave => i18n.get("hud.map.cave"), }); let (difficulty, desc) = match &site.kind { SiteKind::Town => (0, i18n.get("hud.map.town").to_string()), @@ -502,6 +541,7 @@ impl<'a> Widget for Map<'a> { .replace("{difficulty}", difficulty.to_string().as_str()), ), SiteKind::Castle => (0, i18n.get("hud.map.castle").to_string()), + SiteKind::Cave => (0, i18n.get("hud.map.cave").to_string()), }; let site_btn = Button::image(match &site.kind { SiteKind::Town => { @@ -525,6 +565,13 @@ impl<'a> Widget for Map<'a> { self.imgs.nothing } }, + SiteKind::Cave => { + if show_caves { + self.imgs.mmap_site_cave + } else { + self.imgs.nothing + } + }, }) .x_y_position_relative_to( state.ids.grid, @@ -536,6 +583,7 @@ impl<'a> Widget for Map<'a> { SiteKind::Town => self.imgs.mmap_site_town_hover, SiteKind::Dungeon { .. } => self.imgs.mmap_site_dungeon_hover, SiteKind::Castle => self.imgs.mmap_site_castle_hover, + SiteKind::Cave => self.imgs.mmap_site_cave_hover, }) .image_color(UI_HIGHLIGHT_0) .with_tooltip( @@ -555,6 +603,7 @@ impl<'a> Widget for Map<'a> { 5 => QUALITY_DEBUG, _ => TEXT_COLOR, }, + SiteKind::Cave => TEXT_COLOR, }, ); // Only display sites that are toggled on @@ -574,6 +623,11 @@ impl<'a> Widget for Map<'a> { site_btn.set(state.ids.mmap_site_icons[i], ui); } }, + SiteKind::Cave => { + if show_caves { + site_btn.set(state.ids.mmap_site_icons[i], ui); + } + }, } // Difficulty from 0-6 @@ -626,6 +680,11 @@ impl<'a> Widget for Map<'a> { dif_img.set(state.ids.site_difs[i], ui) } }, + SiteKind::Cave => { + if show_caves { + dif_img.set(state.ids.site_difs[i], ui) + } + }, } } } diff --git a/voxygen/src/hud/minimap.rs b/voxygen/src/hud/minimap.rs index 9d53a08e6b..e4264dbbed 100644 --- a/voxygen/src/hud/minimap.rs +++ b/voxygen/src/hud/minimap.rs @@ -258,6 +258,7 @@ impl<'a> Widget for MiniMap<'a> { SiteKind::Town => self.imgs.mmap_site_town_bg, SiteKind::Dungeon { .. } => self.imgs.mmap_site_dungeon_bg, SiteKind::Castle => self.imgs.mmap_site_castle_bg, + SiteKind::Cave => self.imgs.mmap_site_cave_bg, }) .x_y_position_relative_to( state.ids.grid, @@ -277,6 +278,7 @@ impl<'a> Widget for MiniMap<'a> { 5 => QUALITY_DEBUG, _ => Color::Rgba(1.0, 1.0, 1.0, 0.0), }, + SiteKind::Cave => Color::Rgba(1.0, 1.0, 1.0, 0.0), })) .parent(state.ids.grid) .set(state.ids.mmap_site_icons_bgs[i], ui); @@ -284,6 +286,7 @@ impl<'a> Widget for MiniMap<'a> { SiteKind::Town => self.imgs.mmap_site_town, SiteKind::Dungeon { .. } => self.imgs.mmap_site_dungeon, SiteKind::Castle => self.imgs.mmap_site_castle, + SiteKind::Cave => self.imgs.mmap_site_cave, }) .middle_of(state.ids.mmap_site_icons_bgs[i]) .w_h(20.0, 20.0) diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index c513fa3ccf..4ee016ee6e 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -330,6 +330,7 @@ pub enum Event { MapShowTowns(bool), MapShowDungeons(bool), MapShowCastles(bool), + MapShowCaves(bool), AdjustWindowSize([u16; 2]), ChangeFullscreenMode(FullScreenSettings), ToggleParticlesEnabled(bool), @@ -2285,6 +2286,9 @@ impl Hud { map::Event::MapDrag(map_drag) => { events.push(Event::MapDrag(map_drag)); }, + map::Event::ShowCaves(map_show_caves) => { + events.push(Event::MapShowCaves(map_show_caves)); + }, } } } else { diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index a22d6ec32c..3c7002c475 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -984,6 +984,10 @@ impl PlayState for SessionState { global_state.settings.gameplay.map_show_castles = map_show_castles; global_state.settings.save_to_file_warn(); }, + HudEvent::MapShowCaves(map_show_caves) => { + global_state.settings.gameplay.map_show_caves = map_show_caves; + global_state.settings.save_to_file_warn(); + }, HudEvent::ChangeGamma(new_gamma) => { global_state.settings.graphics.gamma = new_gamma; global_state.settings.save_to_file_warn(); diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index 1ad981073a..cf4cd44a5e 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -522,6 +522,7 @@ pub struct GameplaySettings { pub map_show_dungeons: bool, pub map_show_castles: bool, pub loading_tips: bool, + pub map_show_caves: bool, } impl Default for GameplaySettings { @@ -558,6 +559,7 @@ impl Default for GameplaySettings { map_show_dungeons: true, map_show_castles: true, loading_tips: true, + map_show_caves: true, } } } diff --git a/world/src/civ/mod.rs b/world/src/civ/mod.rs index 4ef8c81ca9..0aa94174e9 100644 --- a/world/src/civ/mod.rs +++ b/world/src/civ/mod.rs @@ -56,6 +56,7 @@ pub struct Civs { >, pub sites: Store, + pub caves: Store>, } // Change this to get rid of particularly horrid seeds @@ -231,7 +232,7 @@ impl Civs { } // TODO: Move this - fn generate_cave(&self, ctx: &mut GenCtx) { + fn generate_cave(&mut self, ctx: &mut GenCtx) { let mut pos = ctx .sim .get_size() @@ -292,6 +293,10 @@ impl Civs { chunk.spawn_rate = 0.0; } } + self.caves + .insert(path.first().unwrap().0 * TerrainChunkSize::RECT_SIZE.map(|e: u32| e as i32)); + self.caves + .insert(path.last().unwrap().0 * TerrainChunkSize::RECT_SIZE.map(|e: u32| e as i32)); } pub fn place(&self, id: Id) -> &Place { self.places.get(id) } diff --git a/world/src/lib.rs b/world/src/lib.rs index a3c4cf7ca1..02bccbd529 100644 --- a/world/src/lib.rs +++ b/world/src/lib.rs @@ -114,6 +114,16 @@ impl World { wpos: site.center * TerrainChunkSize::RECT_SIZE.map(|e| e as i32), } }) + .chain( + self.civs() + .caves + .iter() + .map(|(_, pos)| world_msg::SiteInfo { + name: None, + kind: world_msg::SiteKind::Cave, + wpos: *pos, + }), + ) .collect(), ..self.sim.get_map(index) }