process debug keys in game scene and add quick save shortcut

This commit is contained in:
Sallai József 2022-08-21 22:06:06 +03:00
parent f1b3c680c9
commit b1b3b131e2
5 changed files with 61 additions and 37 deletions

View File

@ -276,7 +276,9 @@ impl BackendEventLoop for SDL2EventLoop {
Event::KeyDown { scancode: Some(scancode), repeat, keymod, .. } => {
if let Some(drs_scan) = conv_scancode(scancode) {
if !repeat {
state.process_debug_keys(ctx, drs_scan);
if let Some(scene) = &mut game.scene {
scene.process_debug_keys(state, ctx, drs_scan);
}
if keymod.intersects(keyboard::Mod::RALTMOD | keyboard::Mod::LALTMOD)
&& drs_scan == ScanCode::Return

View File

@ -154,6 +154,7 @@ impl LiveDebugger {
if state.textscript_vm.state == TextScriptExecutionState::Ended {
if ui.button("Save") {
let _ = state.save_game(game_scene, ctx);
state.sound_manager.play_sfx(18);
}
} else if ui.button("Busy") {
}
@ -162,7 +163,9 @@ impl LiveDebugger {
if ui.button("Hotkey List") {
self.hotkey_list_visible = !self.hotkey_list_visible;
}
ui.checkbox("noclip", &mut state.settings.noclip);
ui.same_line();
ui.checkbox("more rust", &mut state.more_rust);
});
@ -402,7 +405,7 @@ impl LiveDebugger {
if self.hotkey_list_visible {
Window::new("Hotkeys")
.position([400.0, 5.0], Condition::FirstUseEver)
.size([300.0, 240.0], Condition::FirstUseEver)
.size([300.0, 280.0], Condition::FirstUseEver)
.resizable(false)
.build(ui, || {
let key = vec![
@ -418,6 +421,7 @@ impl LiveDebugger {
"F11 > Toggle FPS Counter",
"F12 > Toggle Debugger",
"Ctrl + F3 > Reload Sound Manager",
"Ctrl + S > Quick Save",
];
for hotkeys in key.iter() {
match hotkeys {

View File

@ -30,6 +30,7 @@ use crate::framework::backend::SpriteBatchCommand;
use crate::framework::context::Context;
use crate::framework::error::GameResult;
use crate::framework::graphics::{draw_rect, BlendMode, FilterMode};
use crate::framework::keyboard::ScanCode;
use crate::framework::ui::Components;
use crate::framework::{filesystem, gamepad, graphics};
use crate::input::touch_controls::TouchControlType;
@ -2320,4 +2321,46 @@ impl Scene for GameScene {
components.live_debugger.run_ingame(self, state, ctx, ui)?;
Ok(())
}
fn process_debug_keys(&mut self, state: &mut SharedGameState, ctx: &mut Context, key_code: ScanCode) -> GameResult {
if key_code == ScanCode::F3 && ctx.keyboard_context.active_mods().ctrl() {
let _ = state.sound_manager.reload();
return Ok(());
}
if key_code == ScanCode::S && ctx.keyboard_context.active_mods().ctrl() {
let _ = state.save_game(self, ctx);
state.sound_manager.play_sfx(18);
return Ok(());
}
#[cfg(not(debug_assertions))]
if !state.settings.debug_mode {
return Ok(());
}
match key_code {
ScanCode::F3 => state.settings.god_mode = !state.settings.god_mode,
ScanCode::F4 => state.settings.infinite_booster = !state.settings.infinite_booster,
ScanCode::F5 => state.settings.subpixel_coords = !state.settings.subpixel_coords,
ScanCode::F6 => state.settings.motion_interpolation = !state.settings.motion_interpolation,
ScanCode::F7 => state.set_speed(1.0),
ScanCode::F8 => {
if state.settings.speed > 0.2 {
state.set_speed(state.settings.speed - 0.1);
}
}
ScanCode::F9 => {
if state.settings.speed < 3.0 {
state.set_speed(state.settings.speed + 0.1);
}
}
ScanCode::F10 => state.settings.debug_outlines = !state.settings.debug_outlines,
ScanCode::F11 => state.settings.fps_counter = !state.settings.fps_counter,
ScanCode::F12 => state.debugger = !state.debugger,
_ => {}
};
Ok(())
}
}

View File

@ -1,5 +1,6 @@
use crate::framework::context::Context;
use crate::framework::error::GameResult;
use crate::framework::keyboard::ScanCode;
use crate::framework::ui::Components;
use crate::shared_game_state::SharedGameState;
@ -44,6 +45,15 @@ pub trait Scene: downcast::Any {
) -> GameResult {
Ok(())
}
fn process_debug_keys(
&mut self,
_state: &mut SharedGameState,
_ctx: &mut Context,
_key_code: ScanCode,
) -> GameResult {
Ok(())
}
}
downcast::impl_downcast!(dyn Scene);

View File

@ -13,7 +13,6 @@ use crate::framework::backend::BackendTexture;
use crate::framework::context::Context;
use crate::framework::error::GameResult;
use crate::framework::graphics::{create_texture_mutable, set_render_target};
use crate::framework::keyboard::ScanCode;
use crate::framework::vfs::OpenOptions;
use crate::framework::{filesystem, graphics};
#[cfg(feature = "hooks")]
@ -489,40 +488,6 @@ impl SharedGameState {
})
}
pub fn process_debug_keys(&mut self, ctx: &mut Context, key_code: ScanCode) {
if key_code == ScanCode::F3 && ctx.keyboard_context.active_mods().ctrl() {
let _ = self.sound_manager.reload();
return;
}
#[cfg(not(debug_assertions))]
if !self.settings.debug_mode {
return;
}
match key_code {
ScanCode::F3 => self.settings.god_mode = !self.settings.god_mode,
ScanCode::F4 => self.settings.infinite_booster = !self.settings.infinite_booster,
ScanCode::F5 => self.settings.subpixel_coords = !self.settings.subpixel_coords,
ScanCode::F6 => self.settings.motion_interpolation = !self.settings.motion_interpolation,
ScanCode::F7 => self.set_speed(1.0),
ScanCode::F8 => {
if self.settings.speed > 0.2 {
self.set_speed(self.settings.speed - 0.1);
}
}
ScanCode::F9 => {
if self.settings.speed < 3.0 {
self.set_speed(self.settings.speed + 0.1);
}
}
ScanCode::F10 => self.settings.debug_outlines = !self.settings.debug_outlines,
ScanCode::F11 => self.settings.fps_counter = !self.settings.fps_counter,
ScanCode::F12 => self.debugger = !self.debugger,
_ => {}
}
}
pub fn reload_resources(&mut self, ctx: &mut Context) -> GameResult {
self.constants.rebuild_path_list(self.mod_path.clone(), self.season, &self.settings);
if !self.constants.is_demo {