summaryrefslogtreecommitdiff
path: root/crates/renderer/src/overlay/tcg.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/renderer/src/overlay/tcg.rs')
-rw-r--r--crates/renderer/src/overlay/tcg.rs108
1 files changed, 55 insertions, 53 deletions
diff --git a/crates/renderer/src/overlay/tcg.rs b/crates/renderer/src/overlay/tcg.rs
index 1ec74ca..5c6c16a 100644
--- a/crates/renderer/src/overlay/tcg.rs
+++ b/crates/renderer/src/overlay/tcg.rs
@@ -2,7 +2,7 @@ use teleia::*;
use image::EncodableLayout;
use glow::HasContext;
-use crate::{fig, overlay};
+use crate::overlay;
pub const WIDTH: f32 = 320.0;
pub const HEIGHT: f32 = 450.0;
@@ -64,60 +64,62 @@ impl overlay::Overlay for Overlay {
fn reset(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State) -> Erm<()> {
Ok(())
}
- fn handle_binary(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State, msg: fig::BinaryMessage) -> Erm<()> {
+ fn handle_binary(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State, msg: &fig::BinaryMessage) -> Erm<()> {
match &*msg.event {
b"overlay tcg generate" => {
- let s = std::str::from_utf8(&msg.data)?.to_owned();
- let mut sp = s.split("\t");
- let id = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let name = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let ty = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let depicted_subject = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let element = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let color = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- log::info!("{} {} {}", &color[1..=2], &color[3..=4], &color[5..=6]);
- let r = i64::from_str_radix(&color[1..=2], 16)?;
- let g = i64::from_str_radix(&color[3..=4], 16)?;
- let b = i64::from_str_radix(&color[5..=6], 16)?;
- let faction = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let equity = sp.next().ok_or(Error::NotEnoughFields)?.parse()?;
- let boost_level = sp.next().ok_or(Error::NotEnoughFields)?.parse()?;
- let rarity = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let rarity_level = sp.next().ok_or(Error::NotEnoughFields)?.parse()?;
- let body_text = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let base_image_name = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- let flags = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
- unsafe {
- let img = image::ImageReader::open(format!("crates/renderer/src/assets/textures/tcg/bases/{}.png", base_image_name))?.decode()?.into_rgba8();
- self.texture.bind(ctx);
- ctx.gl.tex_image_2d(
- glow::TEXTURE_2D,
- 0,
- glow::RGBA as i32,
- img.width() as i32,
- img.height() as i32,
- 0,
- glow::RGBA,
- glow::UNSIGNED_BYTE,
- Some(&img.as_bytes()),
- );
- ctx.gl.generate_mipmap(glow::TEXTURE_2D);
- }
- self.card = Some(Card {
- name,
- ty,
- depicted_subject,
- element,
- color: glam::Vec4::new(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, 1.0),
- faction,
- equity,
- boost_level,
- rarity,
- rarity_level,
- body_text,
- base_image_name,
- flags,
- });
+ let res: Erm<()> = (|| {
+ let s = std::str::from_utf8(&msg.data)?.to_owned();
+ let mut sp = s.split("\t");
+ let id = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let name = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let ty = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let depicted_subject = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let element = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let color = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let r = i64::from_str_radix(&color[1..=2], 16)?;
+ let g = i64::from_str_radix(&color[3..=4], 16)?;
+ let b = i64::from_str_radix(&color[5..=6], 16)?;
+ let faction = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let equity = sp.next().ok_or(Error::NotEnoughFields)?.parse()?;
+ let boost_level = sp.next().ok_or(Error::NotEnoughFields)?.parse()?;
+ let rarity = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let rarity_level = sp.next().ok_or(Error::NotEnoughFields)?.parse()?;
+ let body_text = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let base_image_name = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ let flags = sp.next().ok_or(Error::NotEnoughFields)?.to_owned();
+ unsafe {
+ let img = image::ImageReader::open(format!("crates/renderer/src/assets/textures/tcg/bases/{}.png", base_image_name))?.decode()?.into_rgba8();
+ self.texture.bind(ctx);
+ ctx.gl.tex_image_2d(
+ glow::TEXTURE_2D,
+ 0,
+ glow::RGBA as i32,
+ img.width() as i32,
+ img.height() as i32,
+ 0,
+ glow::RGBA,
+ glow::UNSIGNED_BYTE,
+ Some(&img.as_bytes()),
+ );
+ ctx.gl.generate_mipmap(glow::TEXTURE_2D);
+ }
+ self.card = Some(Card {
+ name,
+ ty,
+ depicted_subject,
+ element,
+ color: glam::Vec4::new(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, 1.0),
+ faction,
+ equity,
+ boost_level,
+ rarity, rarity_level,
+ body_text,
+ base_image_name,
+ flags,
+ });
+ Ok(())
+ })();
+ if let Err(e) = res { log::warn!("malformed TCG generate: {}", e); }
},
_ => {},
}