From 6d56f89aeeabc57b0d896e80e565d691a64716eb Mon Sep 17 00:00:00 2001 From: jugeeya Date: Tue, 15 Aug 2023 09:39:05 -0700 Subject: [PATCH] Colored icons in 5 slots --- src/common/input.rs | 11 ++ src/static/layout.arc | Bin 2478864 -> 2482960 bytes src/static/training_mod_menu_input_log.bflyt | Bin 0 -> 4840 bytes src/training/ui/input_log.rs | 150 +++++++++++++++---- src/training/ui/menu.rs | 4 +- src/training/ui/mod.rs | 8 +- training_mod_consts/src/options.rs | 1 + 7 files changed, 146 insertions(+), 28 deletions(-) create mode 100644 src/static/training_mod_menu_input_log.bflyt diff --git a/src/common/input.rs b/src/common/input.rs index 21cbf69..ecc34bf 100644 --- a/src/common/input.rs +++ b/src/common/input.rs @@ -1,6 +1,7 @@ #![allow(dead_code)] // TODO: Yeah don't do this use bitflags::bitflags; use modular_bitfield::{bitfield, specifiers::*}; +use training_mod_consts::extra_bitflag_impls; // Need to define necesary structures here. Probably should move to consts or something. Realistically, should be in skyline smash prob tho. @@ -212,6 +213,16 @@ bitflags! { } } +// This requires some imports to work +use training_mod_consts::{random_option, ToggleTrait}; +impl Buttons { + fn as_str(self) -> Option<&'static str> { + todo!(); + } +} + +extra_bitflag_impls!(Buttons); + // Controller class used internally by the game #[derive(Debug, Default, Copy, Clone)] #[repr(C)] diff --git a/src/static/layout.arc b/src/static/layout.arc index 130ff5d9143dda4e1c007825c18b19678e4d44ef..e64e08a91bdc13d8361e8d81ee1a3ed726b7bc5f 100644 GIT binary patch delta 2248 zcmZ|Qdr*{B7{~Ev4~ty2RS`uJK{*DK+7T~l-WIi+VGwHVsF~L^BmqOg>l*68NmOvb zbu|TVNolD-LZu~_F-NSBAT?1DP1I1qP_rQWJ&rb0V}Bgx`#F2gyXSr99X9nNyCL<6 z-QYetG;+8X-T%vUald=H(W>GFIsCqy7U)Cj`rk=LvGztEN8-b9YD( zbmoO0r;mWS0}}xapb6jSMa_oMRw`Q} z=$X9D?=Hjyx93tpFXiaC<-7px^}e9!6TXS7VeXV9K{o=z6F0)#8v^*D3#WtiJ_9S#+LF1emRM>k>A^c#|>ID*P3AN z`V813A=L-2w*sxV2pZ*^m+FTJFLYL>pcmZ^+Ma^B)3XGb(~HwXVD9X#f(CpOoDm9h zR~!&@>*m6YFqnJ939PTJ%@_-FN0bYyySZciTQK+WNhoFEf z35A1U?kDf#CH=avXe7*Ch2cKrUeRcnJCB^m?aj#IH?5c;lM`9|B{jT#xOgheZR#Q^ zZPIte(J;4HS4mScZWYgixdWx7xn~_m7Q@{B-6W~a)yI-y?yw+9J-T)(O@q1XLL{Ay zm{ghxa|aEPv{uxYTR*`B!__S5NXVv&Jed3VFiD*jR#z6n+((B?D!iU>vJ~bX^gIrH z_|VBpn0w3%lH#7r{<#|F&U;bP?Sz46>R|5fFH4FKk34e^<_;PuX=v`p)-z5mZ~)-& zC`r~VLscu7+Y%{hO=;F>oE?Hpix`~qP3D!=vllcO`OOqtMUeT*I2IjU*mgK#A&$UFDyKIW2 zo&Fxbu7J5Crb${^6kN9k=8kQp(+Z-)v zmo-u}9Krp z=g#TIKiKG|O?V2Xn%gce_{W4U*&@mJ;KV!aVD7vuJn`vU2Ho|;1S4y!q!0GB|2+ui z-mp#5g?88P^@X_`x8sQ%TJz^{n0w4lNq6PA=GS2EF&{~Kd)3V5@oaR&E=dDkx!OD( z=AMu(Y0KcF_hVpgQ?6VV?vWhsVaN~n5Pg%J3%rTCvzNPDk5>fU_5l^J(pX)!|Nh_mPh!$G8XyvMvn^x{xd1&RSRZFc}Y4wCwCaqd) z)kdqfT6t;JPAhM%+H2K8D<7>oYUQidlUjAs%1^7#TKQ`gpj8*Gx@r}8KuOc~zX9x! Bt_T1C delta 1955 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 L&pD)L`5^ckH0Ra5 literal 0 HcmV?d00001 diff --git a/src/training/ui/input_log.rs b/src/training/ui/input_log.rs index 8b66827..87cdd6d 100644 --- a/src/training/ui/input_log.rs +++ b/src/training/ui/input_log.rs @@ -11,7 +11,7 @@ use crate::{ training::input_log::P1_INPUT_MAPPINGS, }; -use super::set_icon_text; +use super::set_colored_icon_text; macro_rules! log_parent_fmt { ($x:ident) => { @@ -44,37 +44,137 @@ pub unsafe fn draw(root_pane: &Pane) { return; } - let input_pane = log_pane - .find_pane_by_name_recursive("InputTxt") - .unwrap() - .as_textbox(); + let icons = first_log + .buttons + .to_vec() + .iter() + .filter_map(|button| { + Some(match *button { + Buttons::ATTACK | Buttons::ATTACK_RAW => ( + name_to_font_glyph(ButtonConfig::A, *p1_style_ptr), + ResColor { + r: 0, + g: 255, + b: 0, + a: 255, + }, + ), + Buttons::SPECIAL | Buttons::SPECIAL_RAW | Buttons::SPECIAL_RAW2 => ( + name_to_font_glyph(ButtonConfig::B, *p1_style_ptr), + ResColor { + r: 0, + g: 255, + b: 0, + a: 255, + }, + ), + Buttons::JUMP | Buttons::FLICK_JUMP => ( + name_to_font_glyph(ButtonConfig::X, *p1_style_ptr), + ResColor { + r: 255, + g: 255, + b: 255, + a: 255, + }, + ), + Buttons::GUARD | Buttons::GUARD_HOLD => ( + name_to_font_glyph(ButtonConfig::L, *p1_style_ptr), + ResColor { + r: 0, + g: 0, + b: 255, + a: 255, + }, + ), + Buttons::CATCH => ( + name_to_font_glyph(ButtonConfig::ZR, *p1_style_ptr), + ResColor { + r: 255, + g: 0, + b: 255, + a: 255, + }, + ), + Buttons::STOCK_SHARE => ( + name_to_font_glyph(ButtonConfig::PLUS, *p1_style_ptr), + ResColor { + r: 255, + g: 255, + b: 255, + a: 255, + }, + ), + Buttons::APPEAL_HI => ( + name_to_font_glyph(ButtonConfig::DPAD_UP, *p1_style_ptr), + ResColor { + r: 255, + g: 255, + b: 255, + a: 255, + }, + ), + Buttons::APPEAL_LW => ( + name_to_font_glyph(ButtonConfig::DPAD_DOWN, *p1_style_ptr), + ResColor { + r: 255, + g: 255, + b: 255, + a: 255, + }, + ), + Buttons::APPEAL_SL => ( + name_to_font_glyph(ButtonConfig::DPAD_LEFT, *p1_style_ptr), + ResColor { + r: 255, + g: 255, + b: 255, + a: 255, + }, + ), + Buttons::APPEAL_SR => ( + name_to_font_glyph(ButtonConfig::DPAD_RIGHT, *p1_style_ptr), + ResColor { + r: 255, + g: 255, + b: 255, + a: 255, + }, + ), + _ => return None, + }) + }) + .filter_map(|(icon_opt, color)| { + if let Some(icon) = icon_opt { + return Some((icon, color)); + } - input_pane.set_text_string("NONE"); + None + }) + .collect::>(); - let mut glyphs = vec![]; - if first_log.buttons.contains(Buttons::ATTACK) { - let potential_font_glyph = name_to_font_glyph(ButtonConfig::A, *p1_style_ptr); - if let Some(font_glyph) = potential_font_glyph { - glyphs.push(font_glyph); - } + // Empty them first + const NUM_ICON_SLOTS: usize = 5; + for idx in 0..NUM_ICON_SLOTS { + let input_pane = log_pane + .find_pane_by_name_recursive(format!("InputTxt{}", idx).as_str()) + .unwrap() + .as_textbox(); + + input_pane.set_text_string(""); } - if first_log.buttons.contains(Buttons::SPECIAL) { - let potential_font_glyph = name_to_font_glyph(ButtonConfig::B, *p1_style_ptr); - if let Some(font_glyph) = potential_font_glyph { - glyphs.push(font_glyph); + for (idx, icon) in icons.iter().enumerate() { + // todo: handle this better + if idx >= NUM_ICON_SLOTS { + continue; } - } - if first_log.buttons.contains(Buttons::JUMP) { - let potential_font_glyph = name_to_font_glyph(ButtonConfig::X, *p1_style_ptr); - if let Some(font_glyph) = potential_font_glyph { - glyphs.push(font_glyph); - } - } + let input_pane = log_pane + .find_pane_by_name_recursive(format!("InputTxt{}", idx).as_str()) + .unwrap() + .as_textbox(); - if !glyphs.is_empty() { - set_icon_text(input_pane, glyphs); + set_colored_icon_text(input_pane, &vec![icon.0], icon.1); } log_pane diff --git a/src/training/ui/menu.rs b/src/training/ui/menu.rs index 3965cda..b7b9cd8 100644 --- a/src/training/ui/menu.rs +++ b/src/training/ui/menu.rs @@ -461,7 +461,7 @@ pub unsafe fn draw(root_pane: &Pane) { // Left/Right tabs have keys if let Some(key) = key { - set_icon_text(icon_pane, vec![**key]); + set_icon_text(icon_pane, &vec![**key]); } if *name == "CurrentTab" { @@ -485,7 +485,7 @@ pub unsafe fn draw(root_pane: &Pane) { .find_pane_by_name_recursive("set_txt_icon") .unwrap() .as_textbox(); - set_icon_text(icon_pane, vec![*key.unwrap()]); + set_icon_text(icon_pane, &vec![*key.unwrap()]); key_help_pane .find_pane_by_name_recursive("set_txt_help") diff --git a/src/training/ui/mod.rs b/src/training/ui/mod.rs index 159fceb..2dd2e06 100644 --- a/src/training/ui/mod.rs +++ b/src/training/ui/mod.rs @@ -15,7 +15,13 @@ mod input_log; mod menu; pub mod notifications; -pub unsafe fn set_icon_text(pane: &mut TextBox, icons: Vec) { +pub unsafe fn set_colored_icon_text(pane: &mut TextBox, icons: &Vec, color: ResColor) { + pane.set_default_material_colors(); + pane.set_color(color.r, color.g, color.b, color.a); + set_icon_text(pane, icons); +} + +pub unsafe fn set_icon_text(pane: &mut TextBox, icons: &Vec) { pane.set_text_string(""); let it = pane.text_buf as *mut u16; diff --git a/training_mod_consts/src/options.rs b/training_mod_consts/src/options.rs index ce7df62..2083fbd 100644 --- a/training_mod_consts/src/options.rs +++ b/training_mod_consts/src/options.rs @@ -28,6 +28,7 @@ pub trait SliderTrait { } // bitflag helper function macro +#[macro_export] macro_rules! extra_bitflag_impls { ($e:ty) => { impl core::fmt::Display for $e {