From 0463a5645b803f979f0efb597469ed3ea3de00b3 Mon Sep 17 00:00:00 2001 From: ghostly_zsh Date: Sat, 4 Apr 2026 21:00:10 -0500 Subject: [PATCH] feat: drill drills (in theory) --- .../assets/config/parts/hearty.part.toml | 4 ++ crates/unified/src/config/part.rs | 11 +++++ crates/unified/src/ecs.rs | 8 +++ crates/unified/src/server/drill.rs | 49 ++++++++++++++++++- crates/unified/src/server/part.rs | 16 +++++- 5 files changed, 84 insertions(+), 4 deletions(-) diff --git a/crates/unified/assets/config/parts/hearty.part.toml b/crates/unified/assets/config/parts/hearty.part.toml index 914a62779806fcad56edce8edef787b75d3d2022..fed985c15649d707d4480a5d8f247e196fb6f180 100644 --- a/crates/unified/assets/config/parts/hearty.part.toml +++ b/crates/unified/assets/config/parts/hearty.part.toml @@ -69,3 +69,7 @@ can_craft = true [drill] resource_multiplier = 1.0 + +[storage] +storage_type = "SingleResource" +capacity = 1000 diff --git a/crates/unified/src/config/part.rs b/crates/unified/src/config/part.rs index 022d01d5607dea6b844aaf7427fe05303ed56ae0..d670dbb223f0425c0c08032781c9f3f9db641425 100644 --- a/crates/unified/src/config/part.rs +++ b/crates/unified/src/config/part.rs @@ -16,6 +16,7 @@ pub struct PartConfig { pub cooling: Option, pub crafting: Option, pub drill: Option, + pub storage: Option, } #[derive(Deserialize, TypePath, Serialize, Clone, Debug, PartialEq)] pub struct PartPartConfig { @@ -75,3 +76,13 @@ pub struct CraftingConfig { pub struct DrillConfig { pub resource_multiplier: f32, } +#[derive(Deserialize, TypePath, Serialize, Clone, Debug, PartialEq)] +pub struct StorageConfig { + pub storage_type: StorageType, + pub capacity: u32, +} +#[derive(Deserialize, TypePath, Serialize, Clone, Debug, PartialEq)] +pub enum StorageType { + SingleResource, + MultipleResources, +} diff --git a/crates/unified/src/ecs.rs b/crates/unified/src/ecs.rs index db42290e43c58b0b613c8a5d3685223d0d0de73d..fd95382d6bd3938dbd3efab071013e94c2b8d767 100644 --- a/crates/unified/src/ecs.rs +++ b/crates/unified/src/ecs.rs @@ -145,3 +145,11 @@ pub struct ToggleDrillEvent { #[entities] pub drill_entity: Entity, } + +#[derive(Component, Serialize, Deserialize, Debug)] +#[require(Replicated)] +pub struct SingleStorage { + pub resource_name: String, + pub capacity: f32, + pub stored: f32, +} diff --git a/crates/unified/src/server/drill.rs b/crates/unified/src/server/drill.rs index 83743b80ee0cadd27e2bb63972314ef5161cbc2d..82e7d1125d60d65a97f70d71b0c8177ac0e3b000 100644 --- a/crates/unified/src/server/drill.rs +++ b/crates/unified/src/server/drill.rs @@ -1,7 +1,7 @@ -use crate::{ecs::{Drill, PlanetSensor, ToggleDrillEvent}, prelude::*}; +use crate::{attachment::{PartInShip, Parts}, config::planet::Planet, ecs::{Drill, Part, PlanetSensor, SingleStorage, ToggleDrillEvent}, prelude::*}; pub fn drill_plugin(app: &mut App) { - app.add_systems(Update, (toggle_drill, drill_on_planet)); + app.add_systems(Update, (toggle_drill, drill_on_planet, do_drilling)); } fn toggle_drill( @@ -44,3 +44,48 @@ fn drill_on_planet( drill.on_planet = None; } } + +fn do_drilling( + drills: Query<(&Drill, &PartInShip)>, + parts_query: Query<&Parts>, + mut storage_part_query: Query<&mut SingleStorage, With>, + planet_query: Query<&Planet>, + time: Res