From ea271c25d065b04c3bbc7af44933c4621f84fec3 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Thu, 14 Nov 2024 22:52:54 -0500 Subject: [PATCH] preparation of building asset structure --- game/buildings/src/assets/building_asset.rs | 25 ++++++++++++++++++- .../buildings/src/buildings/basic_building.rs | 4 +++ .../src/buildings/factory_building.rs | 6 +++++ game/buildings/src/buildings/mod.rs | 4 +++ .../src/buildings/resource_gathering.rs | 8 ++++++ game/buildings/src/buildings/tech_building.rs | 9 +++++++ game/buildings/src/lib.rs | 1 + game/main/src/camera_system/camera_plugin.rs | 4 ++- game/main/src/ui/game/build_ui.rs | 22 +++++++++++----- game/shared/src/building.rs | 3 ++- game/shared/src/identifiers.rs | 10 ++++++-- game/shared/src/lib.rs | 15 +++++++++++ game/units/src/lib.rs | 2 ++ 13 files changed, 102 insertions(+), 11 deletions(-) create mode 100644 game/buildings/src/buildings/basic_building.rs create mode 100644 game/buildings/src/buildings/factory_building.rs create mode 100644 game/buildings/src/buildings/mod.rs create mode 100644 game/buildings/src/buildings/resource_gathering.rs create mode 100644 game/buildings/src/buildings/tech_building.rs diff --git a/game/buildings/src/assets/building_asset.rs b/game/buildings/src/assets/building_asset.rs index 5aea700..acc372d 100644 --- a/game/buildings/src/assets/building_asset.rs +++ b/game/buildings/src/assets/building_asset.rs @@ -3,7 +3,13 @@ use bevy::prelude::*; use serde::{Deserialize, Serialize}; use shared::identifiers::ResourceIdentifier; -use crate::footprint::BuildingFootprint; +use crate::{ + buildings::{ + basic_building::BasicBuildingInfo, factory_building::FactoryBuildingInfo, + resource_gathering::ResourceGatheringBuildingInfo, + }, + footprint::BuildingFootprint, +}; #[derive(Asset, TypePath, Debug, Serialize, Deserialize)] pub struct BuildingAsset { @@ -17,8 +23,25 @@ pub struct BuildingAsset { pub cost: Vec, pub consumption: Vec, pub production: Vec, + + pub health: u32, + + pub building_type: BuildingType, + pub animations: Vec, } +#[derive(Serialize, Deserialize, Debug, TypePath)] +pub enum BuildingType { + Basic, + Gathering(ResourceGatheringBuildingInfo), + FactoryBuildingInfo(FactoryBuildingInfo), +} + +#[derive(Serialize, Deserialize, Debug, Reflect)] +pub enum AnimationComponent { + Rotation, + Slider, +} create_asset_loader!( BuildingAssetPlugin, BuildingAssetLoader, diff --git a/game/buildings/src/buildings/basic_building.rs b/game/buildings/src/buildings/basic_building.rs new file mode 100644 index 0000000..6cc5598 --- /dev/null +++ b/game/buildings/src/buildings/basic_building.rs @@ -0,0 +1,4 @@ +use serde::{Deserialize, Serialize}; +use shared::identifiers::ResourceIdentifier; +#[derive(Serialize, Deserialize, Debug)] +pub struct BasicBuildingInfo {} diff --git a/game/buildings/src/buildings/factory_building.rs b/game/buildings/src/buildings/factory_building.rs new file mode 100644 index 0000000..9c78898 --- /dev/null +++ b/game/buildings/src/buildings/factory_building.rs @@ -0,0 +1,6 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct FactoryBuildingInfo { + pub units_to_build: Vec<()> +} diff --git a/game/buildings/src/buildings/mod.rs b/game/buildings/src/buildings/mod.rs new file mode 100644 index 0000000..3293ddb --- /dev/null +++ b/game/buildings/src/buildings/mod.rs @@ -0,0 +1,4 @@ +pub mod resource_gathering; +pub mod basic_building; +pub mod factory_building; +pub mod tech_building; diff --git a/game/buildings/src/buildings/resource_gathering.rs b/game/buildings/src/buildings/resource_gathering.rs new file mode 100644 index 0000000..85dd925 --- /dev/null +++ b/game/buildings/src/buildings/resource_gathering.rs @@ -0,0 +1,8 @@ +use serde::{Deserialize, Serialize}; +use shared::identifiers::ResourceIdentifier; + +#[derive(Serialize, Deserialize, Debug)] +pub struct ResourceGatheringBuildingInfo { + pub resources_to_gather: Vec, + pub gather_range: usize, +} diff --git a/game/buildings/src/buildings/tech_building.rs b/game/buildings/src/buildings/tech_building.rs new file mode 100644 index 0000000..3e9f89f --- /dev/null +++ b/game/buildings/src/buildings/tech_building.rs @@ -0,0 +1,9 @@ +use serde::{Deserialize, Serialize}; +use shared::{building::BuildingIdentifier, StatusEffect}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct TechBuildingInfo { + pub effect_range: usize, + pub buildings_to_unlock: Vec, + pub buffs: Vec, +} diff --git a/game/buildings/src/lib.rs b/game/buildings/src/lib.rs index 9e24bf4..75fd0e0 100644 --- a/game/buildings/src/lib.rs +++ b/game/buildings/src/lib.rs @@ -4,4 +4,5 @@ pub mod building_plugin; pub mod buildings_map; pub mod footprint; pub mod prelude; +mod buildings; pub use building_plugin::*; diff --git a/game/main/src/camera_system/camera_plugin.rs b/game/main/src/camera_system/camera_plugin.rs index 65348f7..2eecf03 100644 --- a/game/main/src/camera_system/camera_plugin.rs +++ b/game/main/src/camera_system/camera_plugin.rs @@ -2,6 +2,7 @@ use bevy::core_pipeline::experimental::taa::{TemporalAntiAliasBundle, TemporalAn use bevy::core_pipeline::prepass::DepthPrepass; use bevy::input::mouse::{MouseMotion, MouseScrollUnit, MouseWheel}; use bevy::prelude::*; +use bevy::render::view::RenderLayers; use bevy::window::{CursorGrabMode, PrimaryWindow}; use bevy_lunex::prelude::MainUi; use shared::sets::GameplaySet; @@ -62,7 +63,8 @@ fn setup(mut commands: Commands, mut msaa: ResMut) { PhosOrbitCamera::default(), MainUi, )) - .insert(TemporalAntiAliasBundle::default()); + .insert(TemporalAntiAliasBundle::default()) + .insert(RenderLayers::layer(0)); *msaa = Msaa::Off; } diff --git a/game/main/src/ui/game/build_ui.rs b/game/main/src/ui/game/build_ui.rs index 4aeeb0f..78ec27f 100644 --- a/game/main/src/ui/game/build_ui.rs +++ b/game/main/src/ui/game/build_ui.rs @@ -1,4 +1,4 @@ -use bevy::prelude::*; +use bevy::{prelude::*, render::view::RenderLayers}; use bevy_lunex::prelude::*; use shared::tags::MainCamera; @@ -6,16 +6,23 @@ pub struct BuildUiPlugin; impl Plugin for BuildUiPlugin { fn build(&self, app: &mut App) { - app.add_plugins(UiDefaultPlugins) - .add_plugins(UiDebugPlugin::::new()); + // app.add_plugins(UiDefaultPlugins) + // .add_plugins(UiDebugPlugin::::new()); app.add_systems(PostStartup, setup_ui); } } -fn setup_ui(mut commands: Commands, cam: Query>, assets: Res) { - let c = cam.single(); - commands.entity(c).insert(MainUi); +fn setup_ui(mut commands: Commands, assets: Res) { + commands + .spawn(( + Camera2dBundle { + transform: Transform::from_xyz(0.0, 0.0, 1000.0), + ..default() + }, + MainUi, + )) + .insert(RenderLayers::layer(1)); commands .spawn(( @@ -25,6 +32,7 @@ fn setup_ui(mut commands: Commands, cam: Query>, assets }, Name::new("Build UI"), SourceFromCamera, + RenderLayers::layer(1), )) .with_children(|ui| { ui.spawn(( @@ -33,12 +41,14 @@ fn setup_ui(mut commands: Commands, cam: Query>, assets .pos1(Ab(20.0)) .pos2(Rl(100.0) - Ab(20.0)) .pack::(), + RenderLayers::layer(1), )); ui.spawn(( UiLink::::path("Root/Rect"), UiLayout::solid().size((Ab(1920.0), Ab(1080.0))).pack::(), UiImage2dBundle::from(assets.load("textures/world/test2.png")), + RenderLayers::layer(1), )); }); } diff --git a/game/shared/src/building.rs b/game/shared/src/building.rs index e3bdafc..3131418 100644 --- a/game/shared/src/building.rs +++ b/game/shared/src/building.rs @@ -1,6 +1,7 @@ +use bevy::reflect::Reflect; use serde::{Deserialize, Serialize}; -#[derive(Default, PartialEq, Eq, Serialize, Deserialize)] +#[derive(Default, Reflect, Debug, PartialEq, Eq, Serialize, Deserialize)] pub struct BuildingIdentifier(pub usize); impl From for BuildingIdentifier { diff --git a/game/shared/src/identifiers.rs b/game/shared/src/identifiers.rs index f1947d9..166f5d7 100644 --- a/game/shared/src/identifiers.rs +++ b/game/shared/src/identifiers.rs @@ -1,9 +1,15 @@ -use bevy::prelude::Resource; +use bevy::reflect::Reflect; use serde::{Deserialize, Serialize}; use world_generation::hex_utils::HexCoord; -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, Reflect)] pub struct ResourceIdentifier { pub id: u32, pub qty: u32, } + +#[derive(Serialize, Deserialize, Debug, Reflect)] +pub struct UnitIdentifier(u32); + +#[derive(Serialize, Deserialize, Debug, Reflect)] +pub struct TileIdentifier(u32); diff --git a/game/shared/src/lib.rs b/game/shared/src/lib.rs index b2f1167..2de0e49 100644 --- a/game/shared/src/lib.rs +++ b/game/shared/src/lib.rs @@ -1,3 +1,4 @@ +use bevy::reflect::Reflect; use serde::{Deserialize, Serialize}; pub mod building; @@ -17,3 +18,17 @@ pub enum Tier { Three, Superior, } + +#[derive(Serialize, Deserialize, Debug, Reflect)] +pub enum StatusEffect { + UnitRange(f32), + UnitAttack(f32), + UnitHealth(f32), + StructureRange(f32), + StructureAttack(f32), + StructureHealth(f32), + BuildSpeedMulti(f32), + BuildCostMulti(f32), + ConsumptionMulti(f32), + ProductionMulti(f32), +} diff --git a/game/units/src/lib.rs b/game/units/src/lib.rs index 440c589..61e9eb8 100644 --- a/game/units/src/lib.rs +++ b/game/units/src/lib.rs @@ -1,3 +1,5 @@ +use bevy::reflect::Reflect; +use serde::{Deserialize, Serialize}; pub mod assets; pub mod components;