aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar memdmp <memdmpmemewarenet>2025-01-12 01:51:48 +0100
committerLibravatarLarge Libravatar memdmp <memdmpmemewarenet>2025-01-12 01:51:48 +0100
commit55b325a257f4d06c5999dfb2103605e8d6989850 (patch)
tree21260094d71c27c3a8f769192ada63488c320fc5
parent18ef4a4d0734ac9f7f330d13e5b2ee541c50daa9 (diff)
downloadcosin25-invite-mountainbytes-55b325a257f4d06c5999dfb2103605e8d6989850.tar.gz
cosin25-invite-mountainbytes-55b325a257f4d06c5999dfb2103605e8d6989850.tar.bz2
cosin25-invite-mountainbytes-55b325a257f4d06c5999dfb2103605e8d6989850.tar.lz
cosin25-invite-mountainbytes-55b325a257f4d06c5999dfb2103605e8d6989850.zip

feat: it worky

-rw-r--r--Cargo.lock25
-rw-r--r--Cargo.toml5
-rw-r--r--src/font.rs41
-rw-r--r--src/main.rs56
4 files changed, 93 insertions, 34 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 28792f2..584058c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -15,12 +15,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
+name = "cc"
+version = "1.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
+name = "cmake"
+version = "0.1.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e"
+dependencies = [
+ "cc",
+]
+
+[[package]]
name = "cosin-2025-invite-deck"
version = "0.1.0"
dependencies = [
@@ -78,11 +96,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "951deab27af08ed9c6068b7b0d05a93c91f0a8eb16b6b816a5e73452a43521d3"
dependencies = [
"cfg-if",
+ "cmake",
"libc",
"version-compare",
]
[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
name = "ttf-parser"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index dd60646..5b016a5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -15,3 +15,8 @@ panic = "abort"
[build-dependencies]
rusttype = "0.9.3"
+
+[features]
+default = []
+# Bundle-in SDL. Not enabled for demo submission builds. Useful for compatibility.
+bundled = ["sdl2/bundled"]
diff --git a/src/font.rs b/src/font.rs
index d82d5a9..056c691 100644
--- a/src/font.rs
+++ b/src/font.rs
@@ -41,6 +41,42 @@ pub trait BakedFont {
}
}
}
+impl RenderableCharacter {
+ /** Alpha value of colour is currently ignored! */
+ pub fn to_surface(&self, colour: Color) -> Surface<'static> {
+ let mut surface = Surface::new(
+ self.width.into(),
+ self.height.into(),
+ PixelFormatEnum::RGBA32,
+ )
+ .unwrap();
+ surface.with_lock_mut(|buffer: &mut [u8]| {
+ let mut idx: usize = 0;
+ print!("{} ({}x{})", self.data.len() * 4, self.width, self.height);
+ for pixel in self.data {
+ let index = idx * 4;
+ buffer[index] = colour.r; // Red
+ buffer[index + 1] = colour.g; // Green
+ buffer[index + 2] = colour.b; // Blue
+ buffer[index + 3] = *pixel; // Alpha
+ idx += 1;
+ }
+ });
+ surface
+ }
+ /** Colour Alpha Channel is ignored */
+ pub fn to_texture<'a>(
+ &self,
+ texture_creator: &'a TextureCreator<WindowContext>,
+ colour: Color,
+ ) -> Result<Texture<'a>, TextureValueError> {
+ let surface = self.to_surface(colour);
+ surface.as_texture(texture_creator)
+ }
+ pub fn to_rect(&self, x: i32, y: i32) -> Rect {
+ Rect::new(x, y, self.width.into(), self.height.into())
+ }
+}
pub struct Font<'a> {
pub texture: &'a [u8],
pub glyphs: Vec<*const Glyph>,
@@ -151,4 +187,9 @@ mod sprite_sheets {
use std::str::Bytes;
+use sdl2::pixels::{Color, PixelFormatEnum};
+use sdl2::rect::Rect;
+use sdl2::render::{Canvas, Texture, TextureCreator, TextureValueError};
+use sdl2::surface::Surface;
+use sdl2::video::WindowContext;
pub use sprite_sheets::UwUFont;
diff --git a/src/main.rs b/src/main.rs
index 39f39d2..287847d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,12 +3,12 @@ extern crate sdl2;
mod font;
pub mod generated;
-use font::{UwUFont, UWU_WIDTH};
+use font::BakedFont;
+use generated::fonts::FONT_CHERRY_BOMB_ONE;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
use sdl2::rect::Rect;
-use sdl2::render::TextureCreator;
use std::time::Duration;
pub fn main() {
@@ -24,42 +24,30 @@ pub fn main() {
let mut canvas = window.into_canvas().build().unwrap();
let texture_creator = canvas.texture_creator();
- let uwu_font = font::UwUFont::new(&texture_creator);
- let u_char = uwu_font.u_surface().as_texture(&texture_creator).unwrap();
- let w_char = uwu_font.w_surface().as_texture(&texture_creator).unwrap();
- let p_char = uwu_font.p_surface().as_texture(&texture_creator).unwrap();
-
- canvas
- .copy(&u_char, None, UwUFont::pos_to_rect(0, 0))
- .unwrap();
- canvas
- .copy(&w_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32, 0))
- .unwrap();
- canvas
- .copy(&u_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32 * 2, 0))
- .unwrap();
- canvas
- .copy(&p_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32 * 2, 0))
- .unwrap();
-
- //canvas.clear();
- let tc = canvas.texture_creator();
- // let sheet = tc.load_texture_bytes(font::MEOW_FONT.texture).unwrap();
- /*
- canvas.copy(
- &sheet,
- Rect::new(0, 0, font::UWU_WIDTH, font::UWU_HEIGHT),
- font::UwUFont::pos_to_rect(0, 0),
- );
- */
- canvas.draw_rect(Rect::new(100, 100, 200, 200));
+ // let uwu_font = font::UwUFont::new(&texture_creator);
+ canvas.clear();
+ let mut offset: u16 = 0;
+ for c in "UwUSpace".chars() {
+ let char = FONT_CHERRY_BOMB_ONE.get_char(c);
+ canvas
+ .copy(
+ &char
+ .to_texture(&texture_creator, Color::RGB(255, 10, 100))
+ .unwrap(),
+ None,
+ char.to_rect(offset as i32, 0),
+ )
+ .unwrap();
+ offset += char.width;
+ }
+ canvas.draw_rect(Rect::new(100, 100, 200, 200)).unwrap();
canvas.present();
let mut event_pump = sdl_context.event_pump().unwrap();
let mut i = 0;
'running: loop {
i = (i + 1) % 255;
- //canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
- //canvas.clear();
+ // canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
+ // canvas.clear();
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. }
@@ -71,7 +59,7 @@ pub fn main() {
}
}
// The rest of the game loop goes here...
- //canvas.present();
+ // canvas.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
}
}