diff --git a/engine/world_generation/src/states.rs b/engine/world_generation/src/states.rs index 38c78f3..dfb66ff 100644 --- a/engine/world_generation/src/states.rs +++ b/engine/world_generation/src/states.rs @@ -9,10 +9,3 @@ pub enum GeneratorState { Regenerate, } -#[derive(States, Debug, Clone, PartialEq, Eq, Hash)] -pub enum AssetLoadState { - StartLoading, - Loading, - FinalizeAssets, - LoadComplete, -} diff --git a/game/buildings/src/assets/building_asset.rs b/game/buildings/src/assets/building_asset.rs index 8c73b59..339f01f 100644 --- a/game/buildings/src/assets/building_asset.rs +++ b/game/buildings/src/assets/building_asset.rs @@ -12,7 +12,7 @@ pub struct BuildingAsset { pub footprint: BuildingFootprint, pub prefab_path: String, #[serde(skip)] - pub prefab: Handle<()>, + pub prefab: Handle, pub cost: Vec, pub consumption: Vec, diff --git a/game/buildings/src/assets/building_database.rs b/game/buildings/src/assets/building_database.rs index 1b83259..2a564b4 100644 --- a/game/buildings/src/assets/building_database.rs +++ b/game/buildings/src/assets/building_database.rs @@ -5,7 +5,9 @@ use serde::{Deserialize, Serialize}; use super::building_asset::BuildingAsset; #[derive(Resource)] -pub struct BuildingDatabase(Handle); +pub struct BuildingDatabase{ + pub handle: Handle +} #[derive(Serialize, Deserialize, Debug, TypePath, Asset)] pub struct BuildingDatabaseAsset { diff --git a/game/buildings/src/building_plugin.rs b/game/buildings/src/building_plugin.rs index c2be0e1..ef25b05 100644 --- a/game/buildings/src/building_plugin.rs +++ b/game/buildings/src/building_plugin.rs @@ -1,18 +1,29 @@ use bevy::{prelude::*, window::PrimaryWindow}; use bevy_rapier3d::{pipeline::QueryFilter, plugin::RapierContext}; -use shared::{despawn::Despawn, states::GameplayState, tags::MainCamera}; +use shared::{ + despawn::Despawn, + states::{AssetLoadState, GameplayState}, + tags::MainCamera, +}; use world_generation::{hex_utils::HexCoord, map::map::Map}; -use crate::build_queue::{BuildQueue, QueueEntry}; +use crate::{ + assets::{ + building_asset::BuildingAssetPlugin, + building_database::{BuildingDatabase, BuildingDatabasePlugin}, + }, + build_queue::{BuildQueue, QueueEntry}, +}; pub struct BuildingPugin; impl Plugin for BuildingPugin { fn build(&self, app: &mut App) { app.insert_resource(BuildQueue::default()); + app.add_plugins(BuildingAssetPlugin).add_plugins(BuildingDatabasePlugin); - app.add_systems(Startup, init); - //app.add_systems(Update, hq_placement.run_if(in_state(GameplayState::PlaceHQ))); + app.add_systems(Startup, init.run_if(in_state(AssetLoadState::StartLoading))); + app.add_systems(Update, hq_placement.run_if(in_state(GameplayState::PlaceHQ))); app.add_systems(PreUpdate, process_build_queue.run_if(in_state(GameplayState::Playing))); } @@ -21,11 +32,19 @@ impl Plugin for BuildingPugin { #[derive(Resource)] struct IndicatorCube(Handle, Handle); -fn init(mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>) { +fn init( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, + asset_server: Res, +) { let cube = Cuboid::from_size(Vec3::splat(1.)); let mesh_handle = meshes.add(cube); let mat_handle = materials.add(Color::WHITE); commands.insert_resource(IndicatorCube(mesh_handle, mat_handle)); + + let db = asset_server.load("buildings/buildings.db.json"); + commands.insert_resource(BuildingDatabase { handle: db }); } fn hq_placement( diff --git a/game/main/assets b/game/main/assets index d7389cf..59a833a 160000 --- a/game/main/assets +++ b/game/main/assets @@ -1 +1 @@ -Subproject commit d7389cf5b1dc0764ffe77ccf822aefdb6417f6d7 +Subproject commit 59a833a575a21dc5858c5ef76ca5d0bc2bdb5fe0 diff --git a/game/main/src/map_rendering/map_init.rs b/game/main/src/map_rendering/map_init.rs index 1eb2546..0081eb1 100644 --- a/game/main/src/map_rendering/map_init.rs +++ b/game/main/src/map_rendering/map_init.rs @@ -1,15 +1,15 @@ #[cfg(feature = "tracing")] use bevy::log::*; use bevy::{ - asset::{AssetEvents, LoadState}, + asset::LoadState, pbr::{ExtendedMaterial, NotShadowCaster}, prelude::*, }; use bevy_inspector_egui::quick::ResourceInspectorPlugin; use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; -use shared::states::{GameplayState, MenuState}; +use shared::states::{AssetLoadState, GameplayState, MenuState}; use world_generation::{ - biome_asset::{BiomeAsset, BiomeAssetLoadState}, + biome_asset::{BiomeAsset, BiomeAssetLoadState, BiomeAssetPlugin}, biome_painter::*, heightmap::generate_heightmap, hex_utils::{offset_to_index, SHORT_DIAGONAL}, @@ -42,6 +42,12 @@ impl Plugin for MapInitPlugin { app.insert_state(GeneratorState::Startup); app.insert_state(AssetLoadState::StartLoading); + //Assets + app.add_plugins(TileAssetPlugin); + app.add_plugins(TileMapperAssetPlugin); + app.add_plugins(BiomePainterPlugin); + app.add_plugins(BiomeAssetPlugin); + app.add_plugins(ResourceInspectorPlugin::::default()); app.add_plugins(ResourceInspectorPlugin::::default()); app.register_type::>(); diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index 7199927..4042106 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -13,9 +13,6 @@ use buildings::BuildingPugin; use iyes_perf_ui::prelude::*; use shared::despawn::DespawnPuglin; use shared::states::{GameplayState, MenuState}; -use world_generation::tile_manager::TileAssetPlugin; -use world_generation::tile_mapper::TileMapperAssetPlugin; -use world_generation::{biome_asset::BiomeAssetPlugin, biome_painter::BiomePainterPlugin}; pub struct PhosGamePlugin; @@ -44,11 +41,6 @@ impl Plugin for PhosGamePlugin { .add_plugins(bevy::diagnostic::SystemInformationDiagnosticsPlugin) .add_plugins(PerfUiPlugin); - //Assets - app.add_plugins(TileAssetPlugin); - app.add_plugins(TileMapperAssetPlugin); - app.add_plugins(BiomePainterPlugin); - app.add_plugins(BiomeAssetPlugin); //Physics app.add_plugins(RapierPhysicsPlugin::::default()); // app.add_plugins(RapierDebugRenderPlugin::default()); diff --git a/game/shared/src/states.rs b/game/shared/src/states.rs index 6245409..9526c0b 100644 --- a/game/shared/src/states.rs +++ b/game/shared/src/states.rs @@ -15,3 +15,11 @@ pub enum GameplayState { PlaceHQ, Playing, } + +#[derive(States, Debug, Clone, PartialEq, Eq, Hash)] +pub enum AssetLoadState { + StartLoading, + Loading, + FinalizeAssets, + LoadComplete, +}