From 1cdd4efd78985872c92235563f3dbd39ae699f3c Mon Sep 17 00:00:00 2001 From: Rendo Date: Sat, 22 Feb 2025 01:57:53 +0500 Subject: [PATCH 1/2] Asset preload structures and their impls --- src/asset_preloader/mod.rs | 73 ++++++++++++++++++++++++++++++ src/lib.rs | 33 +++++++++++++- src/main.rs | 8 ++-- src/plugins/asset_preloader.rs | 14 ++++++ src/{plugins.rs => plugins/mod.rs} | 2 + 5 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 src/asset_preloader/mod.rs create mode 100644 src/plugins/asset_preloader.rs rename src/{plugins.rs => plugins/mod.rs} (96%) diff --git a/src/asset_preloader/mod.rs b/src/asset_preloader/mod.rs new file mode 100644 index 0000000..54fad11 --- /dev/null +++ b/src/asset_preloader/mod.rs @@ -0,0 +1,73 @@ +use bevy::prelude::*; +use std::collections::HashMap; +use std::any::type_name; + +pub enum AssetPreloadState{ + Loading, + Ready +} + +#[derive(Resource)] +pub struct AssetPreloadChecker + where T : Asset + { + pub data: Vec, + typename: String + } + +pub struct AssetPreloadCheckerBuilder + where T: Asset +{ + data : AssetPreloadChecker +} + +#[derive(Resource)] +pub(crate) struct AssetPreload(HashMap); + +pub(crate) fn check_preload_status(gl_preloader: Res) { + todo!(); +} + +pub(crate) fn check_loader_status(loader: Res>) + where T: Asset{ + todo!(); +} + +impl AssetPreload{ + pub(crate) fn new() -> Self{ + AssetPreload(HashMap::new()) + } +} + +impl AssetPreloadChecker{ + pub(crate) fn build(asset_preload: &mut AssetPreload) -> AssetPreloadCheckerBuilder + { + let checker = AssetPreloadChecker::new(); + + asset_preload.0.insert(checker.typename.clone(), false); + + AssetPreloadCheckerBuilder{ + data: checker + } + } + + fn new() -> Self{ + AssetPreloadChecker + { + data: Vec::new(), + typename: type_name::().to_string() + } + } +} + +impl AssetPreloadCheckerBuilder{ + pub fn finish(self) -> AssetPreloadChecker { + self.data + } + + pub fn map_vec<'a, F>(&'a mut self, mut f: F) + where F: FnMut(&mut Vec) + 'a{ + f(&mut self.data.data); + } +} + diff --git a/src/lib.rs b/src/lib.rs index 41e88eb..5ea35aa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,16 +13,44 @@ pub mod hand; pub mod animal; pub mod properties; pub mod plugins; +pub mod asset_preloader; -#[derive(Component)] +/*#[derive(Component)] pub struct JustUpdated; #[derive(Resource)] pub struct Systems { pub update_hand_dimensions: SystemId +}*/ + +pub fn setup(mut commands: Commands,asset_server: Res) { + let hand_img: Handle = asset_server.load("sprites/hand_9s.png"); + + commands.spawn(Camera2d); + commands.spawn( + ( + Hand{name: "Rendo".to_string()}, + Sprite { + image: hand_img, + image_mode: SpriteImageMode::Sliced(TextureSlicer { + border: BorderRect::square(4.), + center_scale_mode: SliceScaleMode::Stretch, + sides_scale_mode: SliceScaleMode::Stretch, + ..default() + }), + ..default() + }, + Transform::from_xyz(0., -300., 0.) + ) + ); } -pub fn setup( +pub fn setup_board() +{ + +} + +/*pub fn setup( mut commands: Commands, asset_server: Res, ) { @@ -101,3 +129,4 @@ pub fn update_hand_dimensions( hand.1.custom_size = Some(Vec2::new(hand_total_width, hand_height)); commands.entity(hand.0).remove::(); } +*/ \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 63b8ac5..32d4d59 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; use evolution_rs::{ plugins::*, - setup, test_setup_hand, update_hand_dimensions + setup, //test_setup_hand, update_hand_dimensions }; @@ -16,7 +16,9 @@ use evolution_rs::{ // P.S. оставляю комменты в коде, потому что так надёжнее, чем сообщениями, которые можно потерять fn main() { App::new() - .add_plugins((DefaultPlugins,BasePropertiesPlugin)) - .add_systems(Startup, (setup, test_setup_hand, update_hand_dimensions).chain()) + .add_plugins((DefaultPlugins,BasePropertiesPlugin, asset_preloader::AssetPreloadPlugin)) + + .add_systems(Startup, setup) + //.add_systems(PostStartup, (test_setup_hand, update_hand_dimensions).chain()) .run(); } diff --git a/src/plugins/asset_preloader.rs b/src/plugins/asset_preloader.rs new file mode 100644 index 0000000..cb61555 --- /dev/null +++ b/src/plugins/asset_preloader.rs @@ -0,0 +1,14 @@ +use bevy::prelude::*; +use crate::asset_preloader::*; + +pub struct AssetPreloadPlugin; + +impl Plugin for AssetPreloadPlugin { + fn build(&self, app: &mut App) { + //app.init_resource::>(); + let mut preload = AssetPreload::new(); + let image: AssetPreloadChecker = AssetPreloadChecker::build(&mut preload).finish(); + + app.insert_resource(image); + } +} \ No newline at end of file diff --git a/src/plugins.rs b/src/plugins/mod.rs similarity index 96% rename from src/plugins.rs rename to src/plugins/mod.rs index 8852f14..1f901fd 100644 --- a/src/plugins.rs +++ b/src/plugins/mod.rs @@ -2,6 +2,8 @@ use bevy::prelude::{App,Plugin}; use crate::properties::{Property, TestProperty}; +pub mod asset_preloader; + pub struct BasePropertiesPlugin; impl Plugin for BasePropertiesPlugin From f70340db24d5422c75deeb3d63a7a8eb5b6ac1d8 Mon Sep 17 00:00:00 2001 From: Rendo Date: Sat, 22 Feb 2025 02:07:06 +0500 Subject: [PATCH 2/2] asset_preloader refactor --- src/asset_preloader/checker.rs | 50 ++++++++++++++++++++++++ src/asset_preloader/mod.rs | 66 ++------------------------------ src/asset_preloader/preloader.rs | 16 ++++++++ src/plugins/asset_preloader.rs | 2 +- 4 files changed, 71 insertions(+), 63 deletions(-) create mode 100644 src/asset_preloader/checker.rs create mode 100644 src/asset_preloader/preloader.rs diff --git a/src/asset_preloader/checker.rs b/src/asset_preloader/checker.rs new file mode 100644 index 0000000..11df930 --- /dev/null +++ b/src/asset_preloader/checker.rs @@ -0,0 +1,50 @@ +use bevy::prelude::{Resource, Asset}; +use crate::asset_preloader::preloader::*; +use std::any::type_name; + + +#[derive(Resource)] +pub struct AssetPreloadChecker + where T : Asset +{ + pub data: Vec, + typename: String +} + +pub struct AssetPreloadCheckerBuilder + where T: Asset +{ + data : AssetPreloadChecker +} + +impl AssetPreloadChecker{ + pub(crate) fn build(asset_preload: &mut AssetPreload) -> AssetPreloadCheckerBuilder + { + let checker = AssetPreloadChecker::new(); + + asset_preload.0.insert(checker.typename.clone(), false); + + AssetPreloadCheckerBuilder{ + data: checker + } + } + + fn new() -> Self{ + AssetPreloadChecker + { + data: Vec::new(), + typename: type_name::().to_string() + } + } +} + +impl AssetPreloadCheckerBuilder{ + pub fn finish(self) -> AssetPreloadChecker { + self.data + } + + pub fn map_vec<'a, F>(&'a mut self, mut f: F) + where F: FnMut(&mut Vec) + 'a{ + f(&mut self.data.data); + } +} diff --git a/src/asset_preloader/mod.rs b/src/asset_preloader/mod.rs index 54fad11..29c8a8d 100644 --- a/src/asset_preloader/mod.rs +++ b/src/asset_preloader/mod.rs @@ -1,28 +1,9 @@ use bevy::prelude::*; -use std::collections::HashMap; -use std::any::type_name; +use preloader::*; +use checker::*; -pub enum AssetPreloadState{ - Loading, - Ready -} - -#[derive(Resource)] -pub struct AssetPreloadChecker - where T : Asset - { - pub data: Vec, - typename: String - } - -pub struct AssetPreloadCheckerBuilder - where T: Asset -{ - data : AssetPreloadChecker -} - -#[derive(Resource)] -pub(crate) struct AssetPreload(HashMap); +pub mod preloader; +pub mod checker; pub(crate) fn check_preload_status(gl_preloader: Res) { todo!(); @@ -32,42 +13,3 @@ pub(crate) fn check_loader_status(loader: Res>) where T: Asset{ todo!(); } - -impl AssetPreload{ - pub(crate) fn new() -> Self{ - AssetPreload(HashMap::new()) - } -} - -impl AssetPreloadChecker{ - pub(crate) fn build(asset_preload: &mut AssetPreload) -> AssetPreloadCheckerBuilder - { - let checker = AssetPreloadChecker::new(); - - asset_preload.0.insert(checker.typename.clone(), false); - - AssetPreloadCheckerBuilder{ - data: checker - } - } - - fn new() -> Self{ - AssetPreloadChecker - { - data: Vec::new(), - typename: type_name::().to_string() - } - } -} - -impl AssetPreloadCheckerBuilder{ - pub fn finish(self) -> AssetPreloadChecker { - self.data - } - - pub fn map_vec<'a, F>(&'a mut self, mut f: F) - where F: FnMut(&mut Vec) + 'a{ - f(&mut self.data.data); - } -} - diff --git a/src/asset_preloader/preloader.rs b/src/asset_preloader/preloader.rs new file mode 100644 index 0000000..d68d26a --- /dev/null +++ b/src/asset_preloader/preloader.rs @@ -0,0 +1,16 @@ +use std::collections::HashMap; +use bevy::prelude::Resource; + +pub enum AssetPreloadState{ + Loading, + Ready +} + +#[derive(Resource)] +pub(crate) struct AssetPreload(pub(crate) HashMap); + +impl AssetPreload{ + pub(crate) fn new() -> Self{ + AssetPreload(HashMap::new()) + } +} \ No newline at end of file diff --git a/src/plugins/asset_preloader.rs b/src/plugins/asset_preloader.rs index cb61555..c9f0252 100644 --- a/src/plugins/asset_preloader.rs +++ b/src/plugins/asset_preloader.rs @@ -1,5 +1,5 @@ use bevy::prelude::*; -use crate::asset_preloader::*; +use crate::asset_preloader::{preloader::AssetPreload,checker::AssetPreloadChecker}; pub struct AssetPreloadPlugin;