Something went wrong. Try again.
HEXWORK - A Lantern in the Deep: 3D ASCII terminal roguelike RPG in Rust.
Entirely designed and built by Muse Spark 1.3 to evaluate if I like the model.
Something went wrong. Try again.
2.7 kB · 39 lines
Rust
at main
12345678910111213141516171819202122232425262728293031323334353637383940//! Shared modal content and binding presentation.use hexwork_term::remap::{Action, Keymap};use hexwork_ui::inventory::{BrowserBindings, render_browser};use hexwork_ui::transfer::{TransferPromptBindings, TransferPromptKind, render_transfer_prompt};use crate::app::{InventoryBrowserSnapshot, TransferPromptSnapshot};pub fn binding_label(keymap: &Keymap, action: Action, fallback: &str) -> String { keymap.primary_binding_label(action).unwrap_or_else(|| fallback.to_owned())}pub fn inventory_browser_bindings(keymap: &Keymap) -> BrowserBindings { BrowserBindings { up: binding_label(keymap, Action::Up, "up action"), down: binding_label(keymap, Action::Down, "down action"), left: binding_label(keymap, Action::Left, "left action"), right: binding_label(keymap, Action::Right, "right action"), inspect: binding_label(keymap, Action::Confirm, "confirm action"), wield: None, identify: None, back: binding_label(keymap, Action::Look, "look action"), close: binding_label(keymap, Action::Inventory, "inventory action"), quit: binding_label(keymap, Action::Quit, "quit action"), picks: std::array::from_fn(|slot| binding_label(keymap, Action::ChargenPick(slot), "unavailable")), }}pub fn transfer_prompt_bindings(keymap: &Keymap, kind: TransferPromptKind) -> TransferPromptBindings { TransferPromptBindings { previous: binding_label(keymap, Action::Up, "up action"), next: binding_label(keymap, Action::Down, "down action"), confirm: binding_label(keymap, Action::Confirm, "confirm action"), quit: binding_label(keymap, Action::Quit, "quit action"), originating_action: match kind { TransferPromptKind::Pickup => keymap.primary_binding_label(Action::Pickup), TransferPromptKind::Drop => keymap.primary_binding_label(Action::Drop), TransferPromptKind::Wield | TransferPromptKind::TinkerIdentify { .. } => None, }, }}pub fn modal_rows(prompt: Option<&TransferPromptSnapshot>, browser: Option<&InventoryBrowserSnapshot>, keymap: &Keymap) -> Option<Vec<String>> { if let Some(prompt) = prompt { return Some(render_transfer_prompt(&prompt.content, &transfer_prompt_bindings(keymap, prompt.content.kind), &prompt.layout)); } browser.map(|browser| { let mut bindings = inventory_browser_bindings(keymap); if browser.content.can_wield_selected { bindings.wield = keymap.primary_binding_label(Action::Confirm); } if browser.content.tinker.as_ref().is_some_and(|t| t.selected_eligible) { bindings.identify = keymap.primary_binding_label(Action::Confirm); } render_browser(&browser.content, &bindings, &browser.layout) })}