asset_preloader refactor

This commit is contained in:
Rendo 2025-02-22 02:07:06 +05:00
commit f70340db24
4 changed files with 71 additions and 63 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

@ -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<T>
where T : Asset
{
pub data: Vec<T>,
typename: String
}
pub struct AssetPreloadCheckerBuilder<T>
where T: Asset
{
data : AssetPreloadChecker<T>
}
#[derive(Resource)]
pub(crate) struct AssetPreload(HashMap<String,bool>);
pub mod preloader;
pub mod checker;
pub(crate) fn check_preload_status(gl_preloader: Res<AssetPreload>) {
todo!();
@ -32,42 +13,3 @@ pub(crate) fn check_loader_status<T>(loader: Res<AssetPreloadChecker<T>>)
where T: Asset{
todo!();
}
impl AssetPreload{
pub(crate) fn new() -> Self{
AssetPreload(HashMap::new())
}
}
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,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

@ -1,5 +1,5 @@
use bevy::prelude::*;
use crate::asset_preloader::*;
use crate::asset_preloader::{preloader::AssetPreload,checker::AssetPreloadChecker};
pub struct AssetPreloadPlugin;