resource asset
This commit is contained in:
16
game/resources/src/lib.rs
Normal file
16
game/resources/src/lib.rs
Normal file
@@ -0,0 +1,16 @@
|
||||
pub mod resource_asset;
|
||||
|
||||
pub fn add(left: usize, right: usize) -> usize {
|
||||
left + right
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
}
|
||||
}
|
||||
49
game/resources/src/resource_asset.rs
Normal file
49
game/resources/src/resource_asset.rs
Normal file
@@ -0,0 +1,49 @@
|
||||
use asset_loader::create_asset_loader;
|
||||
use bevy::prelude::*;
|
||||
use bevy_asset_loader::asset_collection::AssetCollection;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use shared::Tier;
|
||||
|
||||
#[derive(Asset, TypePath, Debug, Serialize, Deserialize)]
|
||||
pub struct ResourceAsset {
|
||||
pub identifier: String,
|
||||
pub name: String,
|
||||
pub description: String,
|
||||
pub sprite_id: usize,
|
||||
pub tier: Tier,
|
||||
}
|
||||
|
||||
create_asset_loader!(
|
||||
ResourceAssetPlugin,
|
||||
ResourceAssetLoader,
|
||||
ResourceAsset,
|
||||
&["res", "res.ron"],
|
||||
;?
|
||||
);
|
||||
|
||||
#[derive(Resource, AssetCollection)]
|
||||
pub struct ResourceDatabase {
|
||||
#[asset(key = "resources", collection(typed))]
|
||||
pub units: Vec<Handle<ResourceAsset>>,
|
||||
}
|
||||
|
||||
impl ResourceDatabase {
|
||||
pub fn create_lookup(&self, assets: &Assets<ResourceAsset>) -> ResourceLookup {
|
||||
let mut identifiers = Vec::with_capacity(self.units.len());
|
||||
for handle in &self.units {
|
||||
if let Some(asset) = assets.get(handle.id()) {
|
||||
identifiers.push(asset.identifier.clone());
|
||||
}
|
||||
}
|
||||
return ResourceLookup {
|
||||
handles: self.units.clone(),
|
||||
identifiers,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Resource)]
|
||||
pub struct ResourceLookup {
|
||||
pub handles: Vec<Handle<ResourceAsset>>,
|
||||
pub identifiers: Vec<String>,
|
||||
}
|
||||
Reference in New Issue
Block a user