diff --git a/Cargo.lock b/Cargo.lock index 5481898..f142eba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4446,6 +4446,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "resources" +version = "0.1.0" +dependencies = [ + "asset_loader", + "bevy", + "bevy_asset_loader", + "ron", + "serde", + "serde_json", + "shared", + "world_generation", +] + [[package]] name = "rgb" version = "0.8.47" diff --git a/Cargo.toml b/Cargo.toml index 5b959d4..b69da53 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ members = [ "game/buildings", "game/shared", "engine/world_generation", - "engine/asset_loader", "game/buildings", "game/shared", "game/units", "engine/data"] + "engine/asset_loader", "game/buildings", "game/shared", "game/units", "engine/data", "game/resources"] # Enable a small amount of optimization in debug mode [profile.dev] diff --git a/game/resources/Cargo.toml b/game/resources/Cargo.toml new file mode 100644 index 0000000..2343b16 --- /dev/null +++ b/game/resources/Cargo.toml @@ -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 = [] diff --git a/game/resources/src/lib.rs b/game/resources/src/lib.rs new file mode 100644 index 0000000..e662fd8 --- /dev/null +++ b/game/resources/src/lib.rs @@ -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); + } +} diff --git a/game/resources/src/resource_asset.rs b/game/resources/src/resource_asset.rs new file mode 100644 index 0000000..45e35c4 --- /dev/null +++ b/game/resources/src/resource_asset.rs @@ -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>, +} + +impl ResourceDatabase { + pub fn create_lookup(&self, assets: &Assets) -> 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>, + pub identifiers: Vec, +} diff --git a/game/shared/src/lib.rs b/game/shared/src/lib.rs index 2c2f7cf..b2f1167 100644 --- a/game/shared/src/lib.rs +++ b/game/shared/src/lib.rs @@ -1,8 +1,19 @@ +use serde::{Deserialize, Serialize}; + pub mod building; pub mod despawn; +pub mod events; pub mod identifiers; +pub mod resources; +pub mod sets; pub mod states; pub mod tags; -pub mod events; -pub mod sets; -pub mod resources; + +#[derive(Debug, Serialize, Deserialize)] +pub enum Tier { + Zero, + One, + Two, + Three, + Superior, +}