html terminal
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/bot/schematic.rs | 25 | ||||
| -rw-r--r-- | src/conv.rs | 37 |
3 files changed, 61 insertions, 3 deletions
@@ -39,7 +39,7 @@ parse_duration = "2.1.1" serde = "1.0" serde_json = "1.0" btparse = "0.1.1" -mindus = { version = "5", features = [], default-features = false } +mindus = { version = "5.0.7", features = [], default-features = false } oxipng = { git = "https://github.com/shssoichiro/oxipng", branch = "master", default-features = false } flate2 = { version = "1.0", features = ["cloudflare_zlib"], default-features = false } strip-ansi-escapes = "0.2.0" diff --git a/src/bot/schematic.rs b/src/bot/schematic.rs index 4c3aced..c0f11b1 100644 --- a/src/bot/schematic.rs +++ b/src/bot/schematic.rs @@ -1,9 +1,11 @@ use anyhow::{anyhow, Result}; +use mindus::block::ratios::Resource; use mindus::data::DataRead; use mindus::*; use oxipng::*; use poise::serenity_prelude::*; use regex::Regex; +use std::fmt::Write; use std::sync::LazyLock; use std::{borrow::Cow, ops::ControlFlow}; @@ -41,6 +43,7 @@ pub async fn with(m: SMsg, c: &serenity::client::Context) -> Result<ControlFlow< let d = v.tags.get("description").map(|t| crate::conv::replace(t)); let name = crate::conv::replace(&strip_colors(v.tags.get("name").unwrap())); let cost = v.compute_total_cost().0; + let rats = v.ratios(); let p = tokio::task::spawn_blocking(move || to_png(&v)).await?; anyhow::Ok( m.channel @@ -57,10 +60,28 @@ pub async fn with(m: SMsg, c: &serenity::client::Context) -> Result<ControlFlow< if n == 0 { continue; } - use std::fmt::Write; write!(s, "{} {n} ", crate::conv::item(i)).unwrap(); } - e.field("", s, true); + e.field("req", s, true); + macro_rules! fmt { + ($i:ident) => {{ + let mut s = String::new(); + for &(i, n) in &*rats.$i { + let e = crate::conv::res(i); + if matches!(i, Resource::Item(_)) && n % 10.5 < 0.1 { + match (n / 10.5).round() as u64 { + 1 => write!(s, "{e} <:titanium_conveyor:1165056617809715210> ").unwrap(), + n => write!(s, "{e} {n} <:titanium_conveyor:1165056617809715210>'s ").unwrap() + } + } else { + write!(s, "{e} {n}/s ").unwrap(); + } + } + s + }} + } + e.field("in", fmt!(input), true); + e.field("out", fmt!(output), true); e.title(name) .footer(|f| f.text(format!("requested by {author}"))) .color(SUCCESS) diff --git a/src/conv.rs b/src/conv.rs index 19752dd..d8465ea 100644 --- a/src/conv.rs +++ b/src/conv.rs @@ -1,3 +1,5 @@ +use mindus::block::ratios::Resource; +use mindus::fluid::Type as Fluid; use mindus::item::Type as Item; static E2E: phf::Map<char, &str> = phf::phf_map! { @@ -204,8 +206,43 @@ static E2E: phf::Map<char, &str> = phf::phf_map! { '' => item(Item::BlastCompound), '' => item(Item::Beryllium), '' => item(Item::Oxide), + '' => fluid(Fluid::Water), + '' => fluid(Fluid::Slag), + '' => fluid(Fluid::Oil), + '' => fluid(Fluid::Cryofluid), + '' => fluid(Fluid::Neoplasm), + '' => fluid(Fluid::Arkycite), + '' => fluid(Fluid::Gallium), + '' => fluid(Fluid::Ozone), + '' => fluid(Fluid::Hydrogen), + '' => fluid(Fluid::Nitrogen), + '' => fluid(Fluid::Cyanogen), }; +pub const fn res(r: Resource) -> &'static str { + match r { + Resource::Item(i) => item(i), + Resource::Fluid(f) => fluid(f), + } +} + +pub const fn fluid(f: Fluid) -> &'static str { + use Fluid::*; + match f { + Water => "<:water:1144220582204944434>", + Slag => "<:slag:1144220603671396352>", + Oil => "<:oil:1144220637448118353>", + Cryofluid => "<:cryofluid:1144220686018154599>", + Neoplasm => "<:neoplasm:1144220645794791505>", + Arkycite => "<:arkycite:1144220710106038383>", + Gallium => "<:gallium:1144220668238516264>", + Ozone => "<:ozone:1144220628627497091>", + Hydrogen => "<:hydrogen:1144220658746798090>", + Nitrogen => "<:nitrogen:1144220641160077363>", + Cyanogen => "<:cyanogen:1144220681945489408>", + } +} + /// Returns the emoji of a item pub const fn item(i: Item) -> &'static str { use Item::*; |