1
0
Fork 0
mirror of https://github.com/doukutsu-rs/doukutsu-rs synced 2025-04-01 23:34:54 +00:00

light cone toggle

This commit is contained in:
Alula 2021-10-10 02:31:07 +02:00
parent cd959f8f7c
commit 3f9ad235ce
No known key found for this signature in database
GPG key ID: 3E00485503A1D8BA
3 changed files with 63 additions and 28 deletions

View file

@ -35,6 +35,7 @@ impl SettingsMenu {
pub fn init(&mut self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { 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("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 self.graphics
.push_entry(MenuEntry::Toggle("Motion interpolation:".to_string(), state.settings.motion_interpolation)); .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)); self.graphics.push_entry(MenuEntry::Toggle("Subpixel scrolling:".to_string(), state.settings.subpixel_coords));
@ -156,6 +157,14 @@ impl SettingsMenu {
} }
} }
MenuSelectionResult::Selected(1, toggle) => { 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 { if let MenuEntry::Toggle(_, value) = toggle {
state.settings.motion_interpolation = !state.settings.motion_interpolation; state.settings.motion_interpolation = !state.settings.motion_interpolation;
let _ = state.settings.save(ctx); let _ = state.settings.save(ctx);
@ -163,7 +172,7 @@ impl SettingsMenu {
*value = state.settings.motion_interpolation; *value = state.settings.motion_interpolation;
} }
} }
MenuSelectionResult::Selected(2, toggle) => { MenuSelectionResult::Selected(3, toggle) => {
if let MenuEntry::Toggle(_, value) = toggle { if let MenuEntry::Toggle(_, value) = toggle {
state.settings.subpixel_coords = !state.settings.subpixel_coords; state.settings.subpixel_coords = !state.settings.subpixel_coords;
let _ = state.settings.save(ctx); let _ = state.settings.save(ctx);
@ -171,7 +180,7 @@ impl SettingsMenu {
*value = state.settings.subpixel_coords; *value = state.settings.subpixel_coords;
} }
} }
MenuSelectionResult::Selected(3, toggle) => { MenuSelectionResult::Selected(4, toggle) => {
if let MenuEntry::Toggle(_, value) = toggle { if let MenuEntry::Toggle(_, value) = toggle {
state.settings.original_textures = !state.settings.original_textures; state.settings.original_textures = !state.settings.original_textures;
state.reload_textures(); state.reload_textures();
@ -180,7 +189,7 @@ impl SettingsMenu {
*value = state.settings.original_textures; *value = state.settings.original_textures;
} }
} }
MenuSelectionResult::Selected(4, toggle) => { MenuSelectionResult::Selected(5, toggle) => {
if let MenuEntry::Toggle(_, value) = toggle { if let MenuEntry::Toggle(_, value) = toggle {
state.settings.seasonal_textures = !state.settings.seasonal_textures; state.settings.seasonal_textures = !state.settings.seasonal_textures;
state.reload_textures(); state.reload_textures();
@ -189,7 +198,7 @@ impl SettingsMenu {
*value = state.settings.seasonal_textures; *value = state.settings.seasonal_textures;
} }
} }
MenuSelectionResult::Selected(6, _) | MenuSelectionResult::Canceled => { MenuSelectionResult::Selected(7, _) | MenuSelectionResult::Canceled => {
self.current = CurrentMenu::MainMenu self.current = CurrentMenu::MainMenu
} }
_ => (), _ => (),

View file

@ -809,6 +809,7 @@ impl GameScene {
[(&self.player1, &self.inventory_player1), (&self.player2, &self.inventory_player2)].iter() [(&self.player1, &self.inventory_player1), (&self.player2, &self.inventory_player2)].iter()
{ {
if player.cond.alive() && !player.cond.hidden() && inv.get_current_weapon().is_some() { if player.cond.alive() && !player.cond.hidden() && inv.get_current_weapon().is_some() {
if state.settings.light_cone {
let range = match () { let range = match () {
_ if player.up => 60..120, _ if player.up => 60..120,
_ if player.down => 240..300, _ if player.down => 240..300,
@ -836,6 +837,23 @@ impl GameScene {
range, range,
batch, 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,
);
}
} }
} }

View file

@ -12,10 +12,15 @@ use crate::sound::InterpolationMode;
pub struct Settings { pub struct Settings {
#[serde(default = "current_version")] #[serde(default = "current_version")]
pub version: u32, pub version: u32,
#[serde(default = "default_true")]
pub seasonal_textures: bool, pub seasonal_textures: bool,
pub original_textures: bool, pub original_textures: bool,
pub shader_effects: bool, pub shader_effects: bool,
#[serde(default = "default_true")]
pub light_cone: bool,
#[serde(default = "default_true")]
pub subpixel_coords: bool, pub subpixel_coords: bool,
#[serde(default = "default_true")]
pub motion_interpolation: bool, pub motion_interpolation: bool,
pub touch_controls: bool, pub touch_controls: bool,
pub soundtrack: String, pub soundtrack: String,
@ -35,6 +40,8 @@ pub struct Settings {
pub debug_outlines: bool, pub debug_outlines: bool,
} }
fn default_true() -> bool { true }
#[inline(always)] #[inline(always)]
fn current_version() -> u32 { 2 } fn current_version() -> u32 { 2 }
@ -84,6 +91,7 @@ impl Default for Settings {
seasonal_textures: true, seasonal_textures: true,
original_textures: false, original_textures: false,
shader_effects: true, shader_effects: true,
light_cone: true,
subpixel_coords: true, subpixel_coords: true,
motion_interpolation: true, motion_interpolation: true,
touch_controls: cfg!(target_os = "android"), touch_controls: cfg!(target_os = "android"),