resource asset

This commit is contained in:
2024-10-16 13:26:32 -04:00
parent 3531f9f68f
commit b61dacf5e2
6 changed files with 114 additions and 4 deletions

20
game/resources/Cargo.toml Normal file
View File

@@ -0,0 +1,20 @@
[package]
name = "resources"
version = "0.1.0"
edition = "2021"
[dependencies]
bevy = "0.14.2"
world_generation = { path = "../../engine/world_generation" }
shared = { path = "../shared" }
serde = { version = "1.0.204", features = ["derive"] }
asset_loader = { path = "../../engine/asset_loader" }
serde_json = "1.0.120"
ron = "0.8.1"
bevy_asset_loader = { version = "0.21.0", features = [
"standard_dynamic_assets",
"3d",
] }
[features]
tracing = []

16
game/resources/src/lib.rs Normal file
View 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);
}
}

View 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>,
}