Compare commits

...
Sign in to create a new pull request.

2 commits

Author SHA1 Message Date
f70340db24 asset_preloader refactor 2025-02-22 02:07:06 +05:00
1cdd4efd78 Asset preload structures and their impls 2025-02-22 01:57:53 +05:00
7 changed files with 133 additions and 5 deletions

View file

@ -0,0 +1,50 @@
use bevy::prelude::{Resource, Asset};
use crate::asset_preloader::preloader::*;
use std::any::type_name;
#[derive(Resource)]
pub struct AssetPreloadChecker<T>
where T : Asset
{
pub data: Vec<T>,
typename: String
}
pub struct AssetPreloadCheckerBuilder<T>
where T: Asset
{
data : AssetPreloadChecker<T>
}
impl<T: Asset> AssetPreloadChecker<T>{
pub(crate) fn build(asset_preload: &mut AssetPreload) -> AssetPreloadCheckerBuilder<T>
{
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::<T>().to_string()
}
}
}
impl<T: Asset> AssetPreloadCheckerBuilder<T>{
pub fn finish(self) -> AssetPreloadChecker<T> {
self.data
}
pub fn map_vec<'a, F>(&'a mut self, mut f: F)
where F: FnMut(&mut Vec<T>) + 'a{
f(&mut self.data.data);
}
}

View file

@ -0,0 +1,15 @@
use bevy::prelude::*;
use preloader::*;
use checker::*;
pub mod preloader;
pub mod checker;
pub(crate) fn check_preload_status(gl_preloader: Res<AssetPreload>) {
todo!();
}
pub(crate) fn check_loader_status<T>(loader: Res<AssetPreloadChecker<T>>)
where T: Asset{
todo!();
}

View file

@ -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<String,bool>);
impl AssetPreload{
pub(crate) fn new() -> Self{
AssetPreload(HashMap::new())
}
}

View file

@ -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<AssetServer>) {
let hand_img: Handle<Image> = 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<AssetServer>,
) {
@ -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::<JustUpdated>();
}
*/

View file

@ -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();
}

View file

@ -0,0 +1,14 @@
use bevy::prelude::*;
use crate::asset_preloader::{preloader::AssetPreload,checker::AssetPreloadChecker};
pub struct AssetPreloadPlugin;
impl Plugin for AssetPreloadPlugin {
fn build(&self, app: &mut App) {
//app.init_resource::<AssetPreloadChecker<Image>>();
let mut preload = AssetPreload::new();
let image: AssetPreloadChecker<Image> = AssetPreloadChecker::build(&mut preload).finish();
app.insert_resource(image);
}
}

View file

@ -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