From 0e8b1dded85602aa2dc15f27c3c89800e4c3402b Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Thu, 6 Nov 2025 18:01:09 -0500 Subject: Update --- crates/renderer/src/assets/shaders/color/frag.glsl | 8 + crates/renderer/src/assets/shaders/color/vert.glsl | 4 + crates/renderer/src/assets/shaders/tcg/frag.glsl | 15 ++ crates/renderer/src/assets/shaders/tcg/vert.glsl | 4 + .../src/assets/shaders/tcg_screen/frag.glsl | 15 ++ .../src/assets/shaders/tcg_screen/vert.glsl | 4 + .../src/assets/textures/tcg/bases/adrenaline.png | Bin 0 -> 103027 bytes .../renderer/src/assets/textures/tcg/bases/anh.png | Bin 0 -> 286626 bytes .../src/assets/textures/tcg/bases/bigman.png | Bin 0 -> 265354 bytes .../src/assets/textures/tcg/bases/blueeyes.png | Bin 0 -> 308691 bytes .../src/assets/textures/tcg/bases/bugatti.png | Bin 0 -> 147540 bytes .../src/assets/textures/tcg/bases/cowtools.png | Bin 0 -> 41467 bytes .../renderer/src/assets/textures/tcg/bases/die.png | Bin 0 -> 190728 bytes .../src/assets/textures/tcg/bases/dragonball.png | Bin 0 -> 205573 bytes .../src/assets/textures/tcg/bases/droll.png | Bin 0 -> 63572 bytes .../tcg/bases/germanguyontopofpotofgreed.png | Bin 0 -> 220990 bytes .../src/assets/textures/tcg/bases/goyf.png | Bin 0 -> 280668 bytes .../src/assets/textures/tcg/bases/midlife.png | Bin 0 -> 206362 bytes .../src/assets/textures/tcg/bases/monstermunch.png | Bin 0 -> 245131 bytes .../src/assets/textures/tcg/bases/noise.png | Bin 0 -> 268938 bytes .../src/assets/textures/tcg/bases/recall.png | Bin 0 -> 280044 bytes .../src/assets/textures/tcg/bases/samosas.png | Bin 0 -> 224985 bytes .../src/assets/textures/tcg/bases/sleepydragon.png | Bin 0 -> 196801 bytes .../renderer/src/assets/textures/tcg/bases/sol.png | Bin 0 -> 311086 bytes .../src/assets/textures/tcg/bases/theking.png | Bin 0 -> 148821 bytes .../src/assets/textures/tcg/bases/trent.png | Bin 0 -> 288257 bytes .../src/assets/textures/tcg/bases/vlad.png | Bin 0 -> 272839 bytes crates/renderer/src/main.rs | 3 +- crates/renderer/src/overlay.rs | 13 +- crates/renderer/src/overlay/automata.rs | 2 +- crates/renderer/src/overlay/drawing.rs | 2 +- crates/renderer/src/overlay/irish.rs | 4 +- crates/renderer/src/overlay/loopback.rs | 7 +- crates/renderer/src/overlay/model.rs | 4 +- crates/renderer/src/overlay/shader.rs | 2 +- crates/renderer/src/overlay/tcg.rs | 166 +++++++++++++++++++++ 36 files changed, 238 insertions(+), 15 deletions(-) create mode 100644 crates/renderer/src/assets/shaders/color/frag.glsl create mode 100644 crates/renderer/src/assets/shaders/color/vert.glsl create mode 100644 crates/renderer/src/assets/shaders/tcg/frag.glsl create mode 100644 crates/renderer/src/assets/shaders/tcg/vert.glsl create mode 100644 crates/renderer/src/assets/shaders/tcg_screen/frag.glsl create mode 100644 crates/renderer/src/assets/shaders/tcg_screen/vert.glsl create mode 100644 crates/renderer/src/assets/textures/tcg/bases/adrenaline.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/anh.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/bigman.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/blueeyes.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/bugatti.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/cowtools.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/die.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/dragonball.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/droll.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/germanguyontopofpotofgreed.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/goyf.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/midlife.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/monstermunch.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/noise.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/recall.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/samosas.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/sleepydragon.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/sol.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/theking.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/trent.png create mode 100644 crates/renderer/src/assets/textures/tcg/bases/vlad.png create mode 100644 crates/renderer/src/overlay/tcg.rs (limited to 'crates/renderer') diff --git a/crates/renderer/src/assets/shaders/color/frag.glsl b/crates/renderer/src/assets/shaders/color/frag.glsl new file mode 100644 index 0000000..7b6b51b --- /dev/null +++ b/crates/renderer/src/assets/shaders/color/frag.glsl @@ -0,0 +1,8 @@ +uniform sampler2D texture_data; + +uniform vec4 color; + +void main() +{ + frag_color = color; +} diff --git a/crates/renderer/src/assets/shaders/color/vert.glsl b/crates/renderer/src/assets/shaders/color/vert.glsl new file mode 100644 index 0000000..e324f7e --- /dev/null +++ b/crates/renderer/src/assets/shaders/color/vert.glsl @@ -0,0 +1,4 @@ +void main() +{ + default_main(); +} \ No newline at end of file diff --git a/crates/renderer/src/assets/shaders/tcg/frag.glsl b/crates/renderer/src/assets/shaders/tcg/frag.glsl new file mode 100644 index 0000000..cab840d --- /dev/null +++ b/crates/renderer/src/assets/shaders/tcg/frag.glsl @@ -0,0 +1,15 @@ +uniform sampler2D texture_data; + +uniform float transparency; + +void main() +{ + float opacity = 1.0 - clamp(transparency, 0.0, 1.0); + vec2 tcfull = vec2(vertex_texcoord.x, 1.0 - vertex_texcoord.y); + vec4 texel = texture(texture_data, tcfull); + if (texel.a != 1.0) { + discard; + } + texel.a *= opacity; + frag_color = texel; +} diff --git a/crates/renderer/src/assets/shaders/tcg/vert.glsl b/crates/renderer/src/assets/shaders/tcg/vert.glsl new file mode 100644 index 0000000..e324f7e --- /dev/null +++ b/crates/renderer/src/assets/shaders/tcg/vert.glsl @@ -0,0 +1,4 @@ +void main() +{ + default_main(); +} \ No newline at end of file diff --git a/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl b/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl new file mode 100644 index 0000000..2a14860 --- /dev/null +++ b/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl @@ -0,0 +1,15 @@ +uniform sampler2D texture_data; + +uniform float transparency; + +void main() +{ + float opacity = 1.0 - clamp(transparency, 0.0, 1.0); + vec2 tcfull = vec2(vertex_texcoord.x, vertex_texcoord.y); + vec4 texel = texture(texture_data, tcfull); + if (texel.a != 1.0) { + discard; + } + texel.a *= opacity; + frag_color = texel; +} diff --git a/crates/renderer/src/assets/shaders/tcg_screen/vert.glsl b/crates/renderer/src/assets/shaders/tcg_screen/vert.glsl new file mode 100644 index 0000000..e324f7e --- /dev/null +++ b/crates/renderer/src/assets/shaders/tcg_screen/vert.glsl @@ -0,0 +1,4 @@ +void main() +{ + default_main(); +} \ No newline at end of file diff --git a/crates/renderer/src/assets/textures/tcg/bases/adrenaline.png b/crates/renderer/src/assets/textures/tcg/bases/adrenaline.png new file mode 100644 index 0000000..3020606 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/adrenaline.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/anh.png b/crates/renderer/src/assets/textures/tcg/bases/anh.png new file mode 100644 index 0000000..170d581 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/anh.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/bigman.png b/crates/renderer/src/assets/textures/tcg/bases/bigman.png new file mode 100644 index 0000000..df71c8e Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/bigman.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/blueeyes.png b/crates/renderer/src/assets/textures/tcg/bases/blueeyes.png new file mode 100644 index 0000000..eaf9b36 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/blueeyes.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/bugatti.png b/crates/renderer/src/assets/textures/tcg/bases/bugatti.png new file mode 100644 index 0000000..3136dc6 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/bugatti.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/cowtools.png b/crates/renderer/src/assets/textures/tcg/bases/cowtools.png new file mode 100644 index 0000000..63125b7 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/cowtools.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/die.png b/crates/renderer/src/assets/textures/tcg/bases/die.png new file mode 100644 index 0000000..4812db2 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/die.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/dragonball.png b/crates/renderer/src/assets/textures/tcg/bases/dragonball.png new file mode 100644 index 0000000..4d0c123 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/dragonball.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/droll.png b/crates/renderer/src/assets/textures/tcg/bases/droll.png new file mode 100644 index 0000000..4db4b88 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/droll.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/germanguyontopofpotofgreed.png b/crates/renderer/src/assets/textures/tcg/bases/germanguyontopofpotofgreed.png new file mode 100644 index 0000000..032812a Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/germanguyontopofpotofgreed.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/goyf.png b/crates/renderer/src/assets/textures/tcg/bases/goyf.png new file mode 100644 index 0000000..3c28128 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/goyf.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/midlife.png b/crates/renderer/src/assets/textures/tcg/bases/midlife.png new file mode 100644 index 0000000..cf0ea6d Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/midlife.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/monstermunch.png b/crates/renderer/src/assets/textures/tcg/bases/monstermunch.png new file mode 100644 index 0000000..4f235aa Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/monstermunch.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/noise.png b/crates/renderer/src/assets/textures/tcg/bases/noise.png new file mode 100644 index 0000000..6235500 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/noise.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/recall.png b/crates/renderer/src/assets/textures/tcg/bases/recall.png new file mode 100644 index 0000000..01842e1 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/recall.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/samosas.png b/crates/renderer/src/assets/textures/tcg/bases/samosas.png new file mode 100644 index 0000000..07682d4 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/samosas.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/sleepydragon.png b/crates/renderer/src/assets/textures/tcg/bases/sleepydragon.png new file mode 100644 index 0000000..cbc7e31 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/sleepydragon.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/sol.png b/crates/renderer/src/assets/textures/tcg/bases/sol.png new file mode 100644 index 0000000..3102a5b Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/sol.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/theking.png b/crates/renderer/src/assets/textures/tcg/bases/theking.png new file mode 100644 index 0000000..6d7cf46 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/theking.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/trent.png b/crates/renderer/src/assets/textures/tcg/bases/trent.png new file mode 100644 index 0000000..4ef7467 Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/trent.png differ diff --git a/crates/renderer/src/assets/textures/tcg/bases/vlad.png b/crates/renderer/src/assets/textures/tcg/bases/vlad.png new file mode 100644 index 0000000..57589ce Binary files /dev/null and b/crates/renderer/src/assets/textures/tcg/bases/vlad.png differ diff --git a/crates/renderer/src/main.rs b/crates/renderer/src/main.rs index b6103fc..35111f2 100644 --- a/crates/renderer/src/main.rs +++ b/crates/renderer/src/main.rs @@ -31,8 +31,9 @@ pub fn main() -> Erm<()> { Box::new(overlay::shader::Overlay::new(ctx)), Box::new(overlay::drawing::Overlay::new(ctx)), Box::new(overlay::irish::Overlay::new(ctx)), + Box::new(overlay::tcg::Overlay::new(ctx)), // Box::new(overlay::model::Overlay::new(ctx)), - Box::new(overlay::loopback::Overlay::new(ctx)), + // Box::new(overlay::loopback::Overlay::new(ctx)), ]) })?; }, diff --git a/crates/renderer/src/overlay.rs b/crates/renderer/src/overlay.rs index 38e75c5..bd0a24d 100644 --- a/crates/renderer/src/overlay.rs +++ b/crates/renderer/src/overlay.rs @@ -3,6 +3,7 @@ pub mod shader; pub mod drawing; pub mod automata; pub mod irish; +pub mod tcg; pub mod loopback; use teleia::*; @@ -78,7 +79,8 @@ impl State { sexp!((overlay irish save)), ]), fig_binary: fig::BinaryClient::new("shiro:32051", false, &[ - b"background frame" + b"background frame", + b"overlay tcg generate", ]), tracking_eyes: (1.0, 1.0), tracking_mouth: 0.0, @@ -169,6 +171,9 @@ pub trait Overlay { fn handle(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut State, msg: fig::SexpMessage) -> Erm<()> { Ok(()) } + fn handle_binary(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut State, msg: fig::BinaryMessage) -> Erm<()> { + Ok(()) + } fn render(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut State) -> Erm<()> { Ok(()) } @@ -235,8 +240,10 @@ impl teleia::state::Game for Overlays { log::warn!("failed to parse frame"); } }, - ev => { - log::info!("unhandled event: {:?}", ev); + _ => { + for ov in self.overlays.iter_mut() { + ov.handle_binary(ctx, st, &mut self.state, msg.clone())?; + } }, } } diff --git a/crates/renderer/src/overlay/automata.rs b/crates/renderer/src/overlay/automata.rs index fbbc138..2677fcd 100644 --- a/crates/renderer/src/overlay/automata.rs +++ b/crates/renderer/src/overlay/automata.rs @@ -289,7 +289,7 @@ impl overlay::Overlay for Overlay { st.bind_2d(ctx, &self.shader); self.tex.bind(ctx); self.shader.set_position_2d( - ctx, + ctx, st, &glam::Vec2::new(0.0, 0.0), &glam::Vec2::new(1920.0, 1080.0) ); diff --git a/crates/renderer/src/overlay/drawing.rs b/crates/renderer/src/overlay/drawing.rs index 1d5ca96..93bf85b 100644 --- a/crates/renderer/src/overlay/drawing.rs +++ b/crates/renderer/src/overlay/drawing.rs @@ -121,7 +121,7 @@ impl overlay::Overlay for Overlay { self.tex.bind(ctx); ost.backgrounds.drawing.bind_index(ctx, 1); self.shader_background.set_position_2d( - ctx, + ctx, st, &glam::Vec2::new(0.0, 0.0), &glam::Vec2::new(1920.0, 1080.0) ); diff --git a/crates/renderer/src/overlay/irish.rs b/crates/renderer/src/overlay/irish.rs index 6cf3d52..d2ee909 100644 --- a/crates/renderer/src/overlay/irish.rs +++ b/crates/renderer/src/overlay/irish.rs @@ -3,7 +3,7 @@ use teleia::*; use lexpr::sexp; use base64::prelude::*; -use crate::{fig, overlay, toggle}; +use crate::{fig, overlay}; pub const WIDTH: f32 = 500.0; pub const HEIGHT: f32 = 700.0; @@ -102,7 +102,7 @@ impl overlay::Overlay for Overlay { st.bind_2d(ctx, &self.shader); self.fb.bind_texture(ctx); self.shader.set_position_2d( - ctx, + ctx, st, &glam::Vec2::new(1000.0, 200.0), &glam::Vec2::new(WIDTH, HEIGHT) ); diff --git a/crates/renderer/src/overlay/loopback.rs b/crates/renderer/src/overlay/loopback.rs index 0346ce7..063601d 100644 --- a/crates/renderer/src/overlay/loopback.rs +++ b/crates/renderer/src/overlay/loopback.rs @@ -16,10 +16,10 @@ fn ffmpeg_to_adts(sample_rate: u32, samples: &[f32]) -> Option> { "-ac", "2", "-i", "pipe:0", "-vn", - "-frame_size:a", "1024", "-c:a", "aac", - "-ar:a", "48000", - "-f", "mpegts", + "-f", "adts", + "-ar", "48000", + "-ac", "2", "pipe:1" ]) .stdin(process::Stdio::piped()) @@ -43,7 +43,6 @@ fn upload_sample(conn: &mut redis::Connection, sequence: u32, sample_rate: u32, let max: f32 = *sample.iter().max_by(|x, y| f32::total_cmp(x, y)).unwrap(); let cells = (max / 0.1) as usize; let adts = ffmpeg_to_adts(sample_rate, sample).unwrap(); - println!("{} {} {}", sample.len(), adts.len(), "#".repeat(cells)); let _: () = conn.lpush("hlssamples", adts).unwrap(); let _: () = conn.ltrim("hlssamples", 0, 10).unwrap(); let _: () = conn.set("hlssequence", sequence).unwrap(); diff --git a/crates/renderer/src/overlay/model.rs b/crates/renderer/src/overlay/model.rs index 26c06bf..9714f09 100644 --- a/crates/renderer/src/overlay/model.rs +++ b/crates/renderer/src/overlay/model.rs @@ -42,7 +42,7 @@ impl teleia::state::Game for Terminal { ctx.clear(); st.bind_3d(ctx, &self.ost.assets.shader_scene); self.ost.assets.shader_scene.set_position_3d( - ctx, + ctx, st, &glam::Mat4::from_translation( glam::Vec3::new(0.0, -1.63, 0.42), ), @@ -109,7 +109,7 @@ impl overlay::Overlay for Overlay { ctx.clear(); st.bind_3d(ctx, &ost.assets.shader_scene); ost.assets.shader_scene.set_position_3d( - ctx, + ctx, st, &glam::Mat4::from_translation( glam::Vec3::new(0.0, -1.63, 0.42), ), diff --git a/crates/renderer/src/overlay/shader.rs b/crates/renderer/src/overlay/shader.rs index dd35031..379cfd8 100644 --- a/crates/renderer/src/overlay/shader.rs +++ b/crates/renderer/src/overlay/shader.rs @@ -79,7 +79,7 @@ impl overlay::Overlay for Overlay { let tr = 1.0 - ((st.tick - t.set_time) as f32 / 60.0).clamp(0.0, 1.0); ost.assets.shader_flat.set_f32(ctx, "transparency", tr); ost.assets.shader_flat.set_position_2d( - ctx, + ctx, st, &glam::Vec2::new(1100.0, 300.0), &glam::Vec2::new(800.0, 600.0) ); diff --git a/crates/renderer/src/overlay/tcg.rs b/crates/renderer/src/overlay/tcg.rs new file mode 100644 index 0000000..1ec74ca --- /dev/null +++ b/crates/renderer/src/overlay/tcg.rs @@ -0,0 +1,166 @@ +use teleia::*; +use image::EncodableLayout; +use glow::HasContext; + +use crate::{fig, overlay}; + +pub const WIDTH: f32 = 320.0; +pub const HEIGHT: f32 = 450.0; + +#[derive(Debug, Clone)] +enum Error { + NotEnoughFields, +} +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::NotEnoughFields => write!(f, "not enough fields"), + } + } +} +impl std::error::Error for Error {} + +struct Card { + name: String, + ty: String, + depicted_subject: String, + element: String, + color: glam::Vec4, + faction: String, + equity: i64, + boost_level: i64, + rarity: String, + rarity_level: i64, + body_text: String, + base_image_name: String, + flags: String, +} + +pub struct Overlay { + fb: framebuffer::Framebuffer, + texture: texture::Texture, + shader_color: shader::Shader, + shader_screen: shader::Shader, + shader: shader::Shader, + font: font::TrueType, + card: Option, +} + +impl Overlay { + pub fn new(ctx: &context::Context) -> Self { + Self { + fb: framebuffer::Framebuffer::new(ctx, &glam::Vec2::new(WIDTH, HEIGHT), &glam::Vec2::new(0.0, 0.0)), + texture: texture::Texture::new_empty(ctx), + shader_color: shader::Shader::new(ctx, include_str!("../assets/shaders/color/vert.glsl"), include_str!("../assets/shaders/color/frag.glsl")), + shader_screen: shader::Shader::new(ctx, include_str!("../assets/shaders/tcg_screen/vert.glsl"), include_str!("../assets/shaders/tcg_screen/frag.glsl")), + shader: shader::Shader::new(ctx, include_str!("../assets/shaders/tcg/vert.glsl"), include_str!("../assets/shaders/tcg/frag.glsl")), + font: font::TrueType::new(ctx, 20.0, include_bytes!("../assets/fonts/iosevka-comfy-regular.ttf")), + card: None, + } + } +} + +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<()> { + 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, + }); + }, + _ => {}, + } + Ok(()) + } + fn render(&mut self, ctx: &context::Context, st: &mut state::State, ost: &mut overlay::State) -> Erm<()> { + if let Some(card) = &self.card { + st.bind_framebuffer(ctx, &self.fb); + ctx.clear(); + + st.bind_2d(ctx, &ost.assets.shader_flat); + self.texture.bind(ctx); + ost.assets.shader_flat.set_f32(ctx, "transparency", 0.0); + ost.assets.shader_flat.set_mat4(ctx, "view", &glam::Mat4::IDENTITY); + ost.assets.shader_flat.set_mat4(ctx, "position", &glam::Mat4::IDENTITY); + st.mesh_square.render(ctx); + + st.bind_2d(ctx, &self.shader_color); + self.shader_color.set_vec4(ctx, "color", &glam::Vec4::new(1.0, 0.0, 0.0, 1.0)); + self.shader_color.set_position_2d( + ctx, st, + &glam::Vec2::new(0.0, 10.0), + &glam::Vec2::new(WIDTH, 32.0) + ); + st.mesh_square.render(ctx); + + self.font.render_text_helper(ctx, st, + &glam::Vec2::new(0.0, 0.0), + &glam::Vec2::new(21.0, 40.0), + &card.name, + &[] + ); + + st.bind_render_framebuffer(ctx); + st.bind_2d(ctx, &self.shader_screen); + self.fb.bind_texture(ctx); + self.shader_screen.set_position_2d( + ctx, st, + &glam::Vec2::new(1000.0, 200.0), + &glam::Vec2::new(WIDTH, HEIGHT) + ); + st.mesh_square.render(ctx); + } + Ok(()) + } +} -- cgit v1.2.3