From 822db3969f3bf28495d9640d0e58a883902db5e4 Mon Sep 17 00:00:00 2001 From: jugeeya Date: Wed, 2 Aug 2023 11:09:02 -0700 Subject: [PATCH] [Build] Clippy Fixes (#554) * Add slots as menu options, randomize playback slots * Clippy Fixes --- src/common/events.rs | 7 +++-- src/common/mod.rs | 4 +-- src/training/combo.rs | 2 +- src/training/directional_influence.rs | 2 +- src/training/input_record.rs | 36 ++++++++++++---------- src/training/input_recording/structures.rs | 5 ++- src/training/ledge.rs | 12 +++++--- src/training/mash.rs | 2 +- src/training/tech.rs | 2 +- src/training/ui/damage.rs | 2 +- src/training/ui/display.rs | 2 +- src/training/ui/menu.rs | 18 +++++------ 12 files changed, 50 insertions(+), 44 deletions(-) diff --git a/src/common/events.rs b/src/common/events.rs index cd3ac9e..8bcd4e7 100644 --- a/src/common/events.rs +++ b/src/common/events.rs @@ -40,10 +40,13 @@ pub struct Uuid { impl Uuid { pub fn to_str(&self) -> String { + use std::fmt::Write; self.data .iter() - .map(|i| format!("{i:02x}")) - .collect::() + .fold(String::new(), |mut output, b| { + let _ = write!(output, "{b:02x}"); + output + }) } } diff --git a/src/common/mod.rs b/src/common/mod.rs index e7441fc..b38f8e5 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -31,7 +31,7 @@ pub fn is_training_mode() -> bool { true } -pub fn get_category(module_accessor: &mut app::BattleObjectModuleAccessor) -> i32 { +pub fn get_category(module_accessor: &app::BattleObjectModuleAccessor) -> i32 { (module_accessor.info >> 28) as u8 as i32 } @@ -51,7 +51,7 @@ pub fn get_module_accessor(fighter_id: FighterId) -> *mut app::BattleObjectModul } } -pub fn is_fighter(module_accessor: &mut app::BattleObjectModuleAccessor) -> bool { +pub fn is_fighter(module_accessor: &app::BattleObjectModuleAccessor) -> bool { get_category(module_accessor) == BATTLE_OBJECT_CATEGORY_FIGHTER } diff --git a/src/training/combo.rs b/src/training/combo.rs index 5578d00..e1cde93 100644 --- a/src/training/combo.rs +++ b/src/training/combo.rs @@ -63,7 +63,7 @@ fn update_frame_advantage(new_frame_adv: i32) { b: 8, a: 255, }, - x if x == 0 => ResColor { + 0 => ResColor { r: 0, g: 0, b: 0, diff --git a/src/training/directional_influence.rs b/src/training/directional_influence.rs index 647ea88..cf5946e 100644 --- a/src/training/directional_influence.rs +++ b/src/training/directional_influence.rs @@ -45,7 +45,7 @@ pub unsafe fn handle_correct_damage_vector_common( original!()(fighter, arg1) } -unsafe fn mod_handle_di(fighter: &mut L2CFighterCommon, _arg1: L2CValue) { +unsafe fn mod_handle_di(fighter: &L2CFighterCommon, _arg1: L2CValue) { if MENU.di_state == Direction::empty() { return; } diff --git a/src/training/input_record.rs b/src/training/input_record.rs index a9e24e7..641074a 100644 --- a/src/training/input_record.rs +++ b/src/training/input_record.rs @@ -2,6 +2,7 @@ use smash::app::{BattleObjectModuleAccessor, lua_bind::*, utility}; use smash::lib::lua_const::*; use lazy_static::lazy_static; use parking_lot::Mutex; +use std::cmp::Ordering; use crate::training::input_recording::structures::*; use crate::common::consts::{RecordTrigger, HitstunPlayback, FighterId}; use crate::common::{MENU, get_module_accessor, is_in_hitstun, is_in_shieldstun}; @@ -164,6 +165,9 @@ fn into_transition_term(starting_status: StartingStatus) -> i32 { } pub unsafe fn get_command_flag_cat(module_accessor: &mut BattleObjectModuleAccessor) { + // Allow this because sometimes we want to make sure our NNSDK doesn't have + // an erroneous definition + #[allow(clippy::unnecessary_cast)] let entry_id_int = WorkModule::get_int(module_accessor, *FIGHTER_INSTANCE_WORK_ID_INT_ENTRY_ID) as i32; let fighter_kind = utility::get_kind(module_accessor); @@ -191,14 +195,12 @@ pub unsafe fn get_command_flag_cat(module_accessor: &mut BattleObjectModuleAcces // may need to move this to another func - if INPUT_RECORD == Record || INPUT_RECORD == Playback { - if INPUT_RECORD_FRAME >= FINAL_RECORD_FRAME - 1 { - INPUT_RECORD = None; - POSSESSION = Player; - INPUT_RECORD_FRAME = 0; - if mash::is_playback_queued() { - mash::reset(); - } + if (INPUT_RECORD == Record || INPUT_RECORD == Playback) && INPUT_RECORD_FRAME >= FINAL_RECORD_FRAME - 1 { + INPUT_RECORD = None; + POSSESSION = Player; + INPUT_RECORD_FRAME = 0; + if mash::is_playback_queued() { + mash::reset(); } } } @@ -288,7 +290,7 @@ pub unsafe fn is_end_standby() -> bool { let clamped_rstick_x = ((first_frame_input.rstick_x as f32) * STICK_CLAMP_MULTIPLIER).clamp(-1.0, 1.0); let clamped_rstick_y = ((first_frame_input.rstick_y as f32) * STICK_CLAMP_MULTIPLIER).clamp(-1.0, 1.0); - let buttons_pressed = first_frame_input.buttons != Buttons::NONE; + let buttons_pressed = first_frame_input.buttons.is_empty(); let lstick_movement = clamped_lstick_x.abs() >= STICK_NEUTRAL || clamped_lstick_y.abs() >= STICK_NEUTRAL; let rstick_movement = clamped_rstick_x.abs() >= STICK_NEUTRAL || clamped_rstick_y.abs() >= STICK_NEUTRAL; lstick_movement || rstick_movement || buttons_pressed @@ -305,7 +307,7 @@ unsafe fn handle_final_input_mapping( arg: bool ) { // go through the original mapping function first - let _ret = original!()(mappings, player_idx, out, controller_struct, arg); + original!()(mappings, player_idx, out, controller_struct, arg); if player_idx == 0 { // if player 1 if INPUT_RECORD == Record { // check for standby before starting action: @@ -345,13 +347,13 @@ unsafe fn set_cpu_controls(p_data: *mut *mut u8) { } if INPUT_RECORD == Pause { - if LOCKOUT_FRAME > 0 { - LOCKOUT_FRAME -= 1; - } else if LOCKOUT_FRAME == 0 { - INPUT_RECORD = Record; - POSSESSION = Standby; - } else { - println!("LOCKOUT_FRAME OUT OF BOUNDS"); + match LOCKOUT_FRAME.cmp(&0) { + Ordering::Greater => LOCKOUT_FRAME -= 1, + Ordering::Equal => { + INPUT_RECORD = Record; + POSSESSION = Standby; + }, + Ordering::Less => println!("LOCKOUT_FRAME OUT OF BOUNDS") } } diff --git a/src/training/input_recording/structures.rs b/src/training/input_recording/structures.rs index 11d3a77..e757f64 100644 --- a/src/training/input_recording/structures.rs +++ b/src/training/input_recording/structures.rs @@ -36,7 +36,7 @@ impl ControlModuleInternal { pub fn _clear(&mut self) { // Try to nullify controls so we can't control player 1 during recording self.stick_x = 0.0; self.stick_y = 0.0; - self.buttons = Buttons::NONE; + self.buttons = Buttons::empty(); self.clamped_lstick_x = 0.0; self.clamped_lstick_y = 0.0; self.clamped_rstick_x = 0.0; @@ -162,7 +162,6 @@ pub struct ControllerMapping { //type Buttons = u32; // may need to actually implement (like label and such)? Not for now though bitflags! { pub struct Buttons: u32 { - const NONE = 0x0; // does adding this cause problems? const ATTACK = 0x1; const SPECIAL = 0x2; const JUMP = 0x4; @@ -251,7 +250,7 @@ pub struct MappedInputs { impl MappedInputs { // pub needed? pub fn default() -> MappedInputs { MappedInputs { - buttons: Buttons::NONE, + buttons: Buttons::empty(), lstick_x: 0, lstick_y: 0, rstick_x: 0, diff --git a/src/training/ledge.rs b/src/training/ledge.rs index 8da9ca8..97dbab0 100644 --- a/src/training/ledge.rs +++ b/src/training/ledge.rs @@ -89,7 +89,7 @@ fn get_ledge_option() -> Option { override_action = None; } } - return override_action.or(regular_action); + override_action.or(regular_action) } } @@ -110,6 +110,9 @@ pub unsafe fn force_option(module_accessor: &mut app::BattleObjectModuleAccessor let flag_cliff = WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_CATCH_CLIFF); let current_frame = MotionModule::frame(module_accessor) as i32; + // Allow this because sometimes we want to make sure our NNSDK doesn't have + // an erroneous definition + #[allow(clippy::unnecessary_cast)] let status_kind = StatusModule::status_kind(module_accessor) as i32; let should_buffer_playback = (LEDGE_DELAY == 0) && (current_frame == 13); // 18 - 5 of buffer let should_buffer; @@ -159,9 +162,8 @@ pub unsafe fn force_option(module_accessor: &mut app::BattleObjectModuleAccessor StatusModule::change_status_request_from_script(module_accessor, status, true); } - let ledge_option: Option = get_ledge_option(); - if ledge_option.is_some() { - mash::external_buffer_menu_mash(ledge_option.unwrap()); + if let Some(ledge_option) = get_ledge_option() { + mash::external_buffer_menu_mash(ledge_option); } } @@ -198,8 +200,10 @@ pub fn get_command_flag_cat(module_accessor: &mut app::BattleObjectModuleAccesso unsafe { let current_frame = MotionModule::frame(module_accessor) as i32; // Frame 18 is right before actionability for cliff catch + #[allow(clippy::unnecessary_cast)] let just_grabbed_ledge = (StatusModule::status_kind(module_accessor) as i32 == *FIGHTER_STATUS_KIND_CLIFF_CATCH) && current_frame == 18; // Needs to be a frame earlier for lasso grabs + #[allow(clippy::unnecessary_cast)] let just_lassoed_ledge = (StatusModule::status_kind(module_accessor) as i32 == *FIGHTER_STATUS_KIND_CLIFF_WAIT) && current_frame == 17; // Begin recording on ledge if this is the recording trigger if (just_grabbed_ledge || just_lassoed_ledge) && MENU.record_trigger == RecordTrigger::Ledge && !input_record::is_standby() { diff --git a/src/training/mash.rs b/src/training/mash.rs index 6f61e2e..9496732 100644 --- a/src/training/mash.rs +++ b/src/training/mash.rs @@ -377,7 +377,7 @@ unsafe fn perform_action(module_accessor: &mut app::BattleObjectModuleAccessor) } Action::PLAYBACK => { // Because these status changes take place after we would receive input from the controller, we need to queue input playback 1 frame before we can act - return 0; // We don't ever want to explicitly provide any command flags here; if we're trying to do input recording, the playback handles it all + 0 // We don't ever want to explicitly provide any command flags here; if we're trying to do input recording, the playback handles it all } _ => get_attack_flag(module_accessor, action), } diff --git a/src/training/tech.rs b/src/training/tech.rs index 9386e92..368980a 100644 --- a/src/training/tech.rs +++ b/src/training/tech.rs @@ -40,7 +40,7 @@ pub unsafe fn handle_change_status( } unsafe fn mod_handle_change_status( - fighter: &mut L2CFighterBase, + fighter: &L2CFighterBase, status_kind: &mut L2CValue, unk: &mut L2CValue, ) { diff --git a/src/training/ui/damage.rs b/src/training/ui/damage.rs index 918649e..e54a4ae 100644 --- a/src/training/ui/damage.rs +++ b/src/training/ui/damage.rs @@ -69,7 +69,7 @@ pub unsafe fn parse_anim_transform(anim_transform: &mut AnimTransform, layout_na } } -pub unsafe fn draw(root_pane: &mut Pane, layout_name: &str) { +pub unsafe fn draw(root_pane: &Pane, layout_name: &str) { // Update percentage display as soon as possible on death if is_training_mode() && is_ready_go() && layout_name == "info_melee" { for player_name in &["p1", "p2"] { diff --git a/src/training/ui/display.rs b/src/training/ui/display.rs index d2040ed..ad31652 100644 --- a/src/training/ui/display.rs +++ b/src/training/ui/display.rs @@ -21,7 +21,7 @@ macro_rules! display_txt_fmt { }; } -pub unsafe fn draw(root_pane: &mut Pane) { +pub unsafe fn draw(root_pane: &Pane) { let notification_idx = 0; let queue = &mut ui::notifications::QUEUE; diff --git a/src/training/ui/menu.rs b/src/training/ui/menu.rs index b49ed77..16df712 100644 --- a/src/training/ui/menu.rs +++ b/src/training/ui/menu.rs @@ -71,7 +71,7 @@ lazy_static! { ]); } -unsafe fn render_submenu_page(app: &App, root_pane: &mut Pane) { +unsafe fn render_submenu_page(app: &App, root_pane: &Pane) { let tab_selected = app.tab_selected(); let tab = app.menu_items.get(tab_selected).unwrap(); let submenu_ids = app.submenu_ids(); @@ -113,9 +113,8 @@ unsafe fn render_submenu_page(app: &App, root_pane: &mut Pane) { // corresponds with a particular button to be visible. submenu_ids.iter().for_each(|id| { let pane = menu_button.find_pane_by_name_recursive(id); - match pane { - Some(p) => p.set_visible(id == &submenu.submenu_id), - None => (), + if let Some(p) = pane { + p.set_visible(id == &submenu.submenu_id); } }); @@ -156,7 +155,7 @@ unsafe fn render_submenu_page(app: &App, root_pane: &mut Pane) { }); } -unsafe fn render_toggle_page(app: &App, root_pane: &mut Pane) { +unsafe fn render_toggle_page(app: &App, root_pane: &Pane) { let (_title, _help_text, mut sub_menu_str_lists) = app.sub_menu_strs_and_states(); (0..sub_menu_str_lists.len()).for_each(|list_section| { let sub_menu_str = sub_menu_str_lists[list_section].0.clone(); @@ -194,9 +193,8 @@ unsafe fn render_toggle_page(app: &App, root_pane: &mut Pane) { submenu_ids.iter().for_each(|id| { let pane = menu_button.find_pane_by_name_recursive(id); - match pane { - Some(p) => p.set_visible(false), - None => (), + if let Some(p) = pane { + p.set_visible(false); } }); @@ -234,7 +232,7 @@ unsafe fn render_toggle_page(app: &App, root_pane: &mut Pane) { }); } -unsafe fn render_slider_page(app: &App, root_pane: &mut Pane) { +unsafe fn render_slider_page(app: &App, root_pane: &Pane) { let (title, _help_text, gauge_vals) = app.sub_menu_strs_for_slider(); let selected_min = gauge_vals.selected_min; let selected_max = gauge_vals.selected_max; @@ -347,7 +345,7 @@ unsafe fn render_slider_page(app: &App, root_pane: &mut Pane) { }); } -pub unsafe fn draw(root_pane: &mut Pane) { +pub unsafe fn draw(root_pane: &Pane) { // Update menu display // Grabbing lock as read-only, essentially let app = &*crate::common::menu::QUICK_MENU_APP.data_ptr();