From 3f9ad235ce345f16720ae8b8d4725f172725b538 Mon Sep 17 00:00:00 2001 From: Alula <6276139+alula@users.noreply.github.com> Date: Sun, 10 Oct 2021 02:31:07 +0200 Subject: [PATCH] light cone toggle --- src/menu/settings_menu.rs | 17 +++++++--- src/scene/game_scene.rs | 66 +++++++++++++++++++++++++-------------- src/settings.rs | 8 +++++ 3 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/menu/settings_menu.rs b/src/menu/settings_menu.rs index 9e289c6..55ee07a 100644 --- a/src/menu/settings_menu.rs +++ b/src/menu/settings_menu.rs @@ -35,6 +35,7 @@ impl SettingsMenu { pub fn init(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { self.graphics.push_entry(MenuEntry::Toggle("Lighting effects:".to_string(), state.settings.shader_effects)); + self.graphics.push_entry(MenuEntry::Toggle("Player's weapon light cone:".to_string(), state.settings.light_cone)); self.graphics .push_entry(MenuEntry::Toggle("Motion interpolation:".to_string(), state.settings.motion_interpolation)); self.graphics.push_entry(MenuEntry::Toggle("Subpixel scrolling:".to_string(), state.settings.subpixel_coords)); @@ -156,6 +157,14 @@ impl SettingsMenu { } } MenuSelectionResult::Selected(1, toggle) => { + if let MenuEntry::Toggle(_, value) = toggle { + state.settings.light_cone = !state.settings.light_cone; + let _ = state.settings.save(ctx); + + *value = state.settings.light_cone; + } + } + MenuSelectionResult::Selected(2, toggle) => { if let MenuEntry::Toggle(_, value) = toggle { state.settings.motion_interpolation = !state.settings.motion_interpolation; let _ = state.settings.save(ctx); @@ -163,7 +172,7 @@ impl SettingsMenu { *value = state.settings.motion_interpolation; } } - MenuSelectionResult::Selected(2, toggle) => { + MenuSelectionResult::Selected(3, toggle) => { if let MenuEntry::Toggle(_, value) = toggle { state.settings.subpixel_coords = !state.settings.subpixel_coords; let _ = state.settings.save(ctx); @@ -171,7 +180,7 @@ impl SettingsMenu { *value = state.settings.subpixel_coords; } } - MenuSelectionResult::Selected(3, toggle) => { + MenuSelectionResult::Selected(4, toggle) => { if let MenuEntry::Toggle(_, value) = toggle { state.settings.original_textures = !state.settings.original_textures; state.reload_textures(); @@ -180,7 +189,7 @@ impl SettingsMenu { *value = state.settings.original_textures; } } - MenuSelectionResult::Selected(4, toggle) => { + MenuSelectionResult::Selected(5, toggle) => { if let MenuEntry::Toggle(_, value) = toggle { state.settings.seasonal_textures = !state.settings.seasonal_textures; state.reload_textures(); @@ -189,7 +198,7 @@ impl SettingsMenu { *value = state.settings.seasonal_textures; } } - MenuSelectionResult::Selected(6, _) | MenuSelectionResult::Canceled => { + MenuSelectionResult::Selected(7, _) | MenuSelectionResult::Canceled => { self.current = CurrentMenu::MainMenu } _ => (), diff --git a/src/scene/game_scene.rs b/src/scene/game_scene.rs index 04a645e..30da5dc 100644 --- a/src/scene/game_scene.rs +++ b/src/scene/game_scene.rs @@ -809,33 +809,51 @@ impl GameScene { [(&self.player1, &self.inventory_player1), (&self.player2, &self.inventory_player2)].iter() { if player.cond.alive() && !player.cond.hidden() && inv.get_current_weapon().is_some() { - let range = match () { - _ if player.up => 60..120, - _ if player.down => 240..300, - _ if player.direction == Direction::Left => -30..30, - _ if player.direction == Direction::Right => 150..210, - _ => continue 'cc, - }; + if state.settings.light_cone { + let range = match () { + _ if player.up => 60..120, + _ if player.down => 240..300, + _ if player.direction == Direction::Left => -30..30, + _ if player.direction == Direction::Right => 150..210, + _ => continue 'cc, + }; - let (color, att) = match inv.get_current_weapon() { - Some(Weapon { wtype: WeaponType::Fireball, .. }) => ((170u8, 80u8, 0u8), 0.92), - Some(Weapon { wtype: WeaponType::PolarStar, .. }) => ((150u8, 150u8, 160u8), 0.92), - Some(Weapon { wtype: WeaponType::Spur, .. }) => ((170u8, 170u8, 200u8), 0.92), - Some(Weapon { wtype: WeaponType::Blade, .. }) => continue 'cc, - _ => ((150u8, 150u8, 150u8), 0.92), - }; + let (color, att) = match inv.get_current_weapon() { + Some(Weapon { wtype: WeaponType::Fireball, .. }) => ((170u8, 80u8, 0u8), 0.92), + Some(Weapon { wtype: WeaponType::PolarStar, .. }) => ((150u8, 150u8, 160u8), 0.92), + Some(Weapon { wtype: WeaponType::Spur, .. }) => ((170u8, 170u8, 200u8), 0.92), + Some(Weapon { wtype: WeaponType::Blade, .. }) => continue 'cc, + _ => ((150u8, 150u8, 150u8), 0.92), + }; - let (_, gun_off_y) = player.skin.get_gun_offset(); + let (_, gun_off_y) = player.skin.get_gun_offset(); - self.draw_light_raycast( - state.tile_size, - player.x + player.direction.vector_x() * 0x800, - player.y + gun_off_y * 0x200 + 0x400, - color, - att, - range, - batch, - ); + self.draw_light_raycast( + state.tile_size, + player.x + player.direction.vector_x() * 0x800, + player.y + gun_off_y * 0x200 + 0x400, + color, + att, + range, + batch, + ); + } else { + self.draw_light( + interpolate_fix9_scale( + player.prev_x - self.frame.prev_x, + player.x - self.frame.x, + state.frame_time, + ), + interpolate_fix9_scale( + player.prev_y - self.frame.prev_y, + player.y - self.frame.y, + state.frame_time, + ), + 5.0, + (150, 150, 150), + batch, + ); + } } } diff --git a/src/settings.rs b/src/settings.rs index 3edbdb7..7034051 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -12,10 +12,15 @@ use crate::sound::InterpolationMode; pub struct Settings { #[serde(default = "current_version")] pub version: u32, + #[serde(default = "default_true")] pub seasonal_textures: bool, pub original_textures: bool, pub shader_effects: bool, + #[serde(default = "default_true")] + pub light_cone: bool, + #[serde(default = "default_true")] pub subpixel_coords: bool, + #[serde(default = "default_true")] pub motion_interpolation: bool, pub touch_controls: bool, pub soundtrack: String, @@ -35,6 +40,8 @@ pub struct Settings { pub debug_outlines: bool, } +fn default_true() -> bool { true } + #[inline(always)] fn current_version() -> u32 { 2 } @@ -84,6 +91,7 @@ impl Default for Settings { seasonal_textures: true, original_textures: false, shader_effects: true, + light_cone: true, subpixel_coords: true, motion_interpolation: true, touch_controls: cfg!(target_os = "android"),