From 707a71b432f2055b5c02044730eed26956cd568e Mon Sep 17 00:00:00 2001 From: dani Date: Sun, 2 Jul 2023 08:54:24 +0000 Subject: [PATCH] lifetimes are too hard, assets are now ref-counted --- examples/test.rs | 5 +++-- src/image.rs | 6 ++++-- src/tileset.rs | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/examples/test.rs b/examples/test.rs index cb08283..d2ccec7 100644 --- a/examples/test.rs +++ b/examples/test.rs @@ -1,11 +1,12 @@ use skunk2d::*; +use std::rc::Rc; const WIDTH: i32 = 1920 / 3; const HEIGHT: i32 = 1080 / 3; struct World { - img: Image, - font: Tileset, + img: Rc, + font: Rc, pos: Vec2, } diff --git a/src/image.rs b/src/image.rs index bef5ea6..26ee5b5 100644 --- a/src/image.rs +++ b/src/image.rs @@ -2,6 +2,7 @@ use crate::vec2::Vec2; use crate::Rect; use std::fs; use std::fs::File; +use std::rc::Rc; //todo: make dynamically different bitdepths pub struct Image { @@ -17,11 +18,11 @@ impl Image { } } - pub fn load(path: &str) -> Self { + pub fn load(path: &str) -> Rc { Self::load_data(fs::read(path).unwrap().as_slice()) } - pub fn load_data(data: &[u8]) -> Self { + pub fn load_data(data: &[u8]) -> Rc { let mut options = gif::DecodeOptions::new(); options.set_color_output(gif::ColorOutput::Indexed); let mut decoder = options.read_info(data).unwrap(); @@ -39,6 +40,7 @@ impl Image { y: y as i32, }, } + .into() } pub fn clear(&mut self) { diff --git a/src/tileset.rs b/src/tileset.rs index 1b120de..e928f8e 100644 --- a/src/tileset.rs +++ b/src/tileset.rs @@ -1,5 +1,6 @@ use crate::{Image, Rect, Vec2}; use std::fs; +use std::rc::Rc; pub struct Tileset { count: i32, @@ -8,11 +9,11 @@ pub struct Tileset { } impl Tileset { - pub fn load(path: &str, tile_count: Vec2) -> Self { + pub fn load(path: &str, tile_count: Vec2) -> Rc { Self::load_data(fs::read(path).unwrap().as_slice(), tile_count) } - pub fn load_data(data: &[u8], tile_count: Vec2) -> Self { + pub fn load_data(data: &[u8], tile_count: Vec2) -> Rc { let img = Image::load_data(data); let mut images: Vec = vec![]; let size = Vec2 { @@ -41,6 +42,7 @@ impl Tileset { size, images, } + .into() } pub fn get(&self, idx: i32) -> &Image {