diff --git a/assets/furniture/blender.png b/assets/furniture/blender.png new file mode 100644 index 0000000..bfe9e9c Binary files /dev/null and b/assets/furniture/blender.png differ diff --git a/assets/furniture/cupboard.png b/assets/furniture/cupboard.png new file mode 100644 index 0000000..f35cf2b Binary files /dev/null and b/assets/furniture/cupboard.png differ diff --git a/assets/furniture/dishwasher.png b/assets/furniture/dishwasher.png new file mode 100644 index 0000000..e804519 Binary files /dev/null and b/assets/furniture/dishwasher.png differ diff --git a/assets/furniture/drawer.png b/assets/furniture/drawer.png new file mode 100644 index 0000000..fa924d2 Binary files /dev/null and b/assets/furniture/drawer.png differ diff --git a/assets/furniture/drawer_cupboard.png b/assets/furniture/drawer_cupboard.png new file mode 100644 index 0000000..42887b6 Binary files /dev/null and b/assets/furniture/drawer_cupboard.png differ diff --git a/assets/furniture/dryer.png b/assets/furniture/dryer.png new file mode 100644 index 0000000..e798a8b Binary files /dev/null and b/assets/furniture/dryer.png differ diff --git a/assets/furniture/elec/blender.png b/assets/furniture/elec/blender.png new file mode 100644 index 0000000..f0f3a90 Binary files /dev/null and b/assets/furniture/elec/blender.png differ diff --git a/assets/furniture/elec/dishwasher.png b/assets/furniture/elec/dishwasher.png new file mode 100644 index 0000000..6fd60a1 Binary files /dev/null and b/assets/furniture/elec/dishwasher.png differ diff --git a/assets/furniture/elec/dryer.png b/assets/furniture/elec/dryer.png new file mode 100644 index 0000000..30c97a7 Binary files /dev/null and b/assets/furniture/elec/dryer.png differ diff --git a/assets/furniture/elec/fridge.png b/assets/furniture/elec/fridge.png new file mode 100644 index 0000000..8878c75 Binary files /dev/null and b/assets/furniture/elec/fridge.png differ diff --git a/assets/furniture/elec/kettle.png b/assets/furniture/elec/kettle.png new file mode 100644 index 0000000..29b9e3c Binary files /dev/null and b/assets/furniture/elec/kettle.png differ diff --git a/assets/furniture/elec/minifridge.png b/assets/furniture/elec/minifridge.png new file mode 100644 index 0000000..fefb063 Binary files /dev/null and b/assets/furniture/elec/minifridge.png differ diff --git a/assets/furniture/elec/oven.png b/assets/furniture/elec/oven.png new file mode 100644 index 0000000..c2e501b Binary files /dev/null and b/assets/furniture/elec/oven.png differ diff --git a/assets/furniture/elec/stove.png b/assets/furniture/elec/stove.png new file mode 100644 index 0000000..e07dc22 Binary files /dev/null and b/assets/furniture/elec/stove.png differ diff --git a/assets/furniture/elec/toaster.png b/assets/furniture/elec/toaster.png new file mode 100644 index 0000000..67fd14f Binary files /dev/null and b/assets/furniture/elec/toaster.png differ diff --git a/assets/furniture/elec/washing_machine.png b/assets/furniture/elec/washing_machine.png new file mode 100644 index 0000000..24c3b5a Binary files /dev/null and b/assets/furniture/elec/washing_machine.png differ diff --git a/assets/furniture/fridge.png b/assets/furniture/fridge.png new file mode 100644 index 0000000..889dd29 Binary files /dev/null and b/assets/furniture/fridge.png differ diff --git a/assets/furniture/hanging_cupboard.png b/assets/furniture/hanging_cupboard.png new file mode 100644 index 0000000..2028555 Binary files /dev/null and b/assets/furniture/hanging_cupboard.png differ diff --git a/assets/furniture/kettle.png b/assets/furniture/kettle.png new file mode 100644 index 0000000..3fc8cb8 Binary files /dev/null and b/assets/furniture/kettle.png differ diff --git a/assets/furniture/metal/blender.png b/assets/furniture/metal/blender.png new file mode 100644 index 0000000..84cde50 Binary files /dev/null and b/assets/furniture/metal/blender.png differ diff --git a/assets/furniture/metal/cupboard.png b/assets/furniture/metal/cupboard.png new file mode 100644 index 0000000..7a8f88f Binary files /dev/null and b/assets/furniture/metal/cupboard.png differ diff --git a/assets/furniture/metal/dishwasher.png b/assets/furniture/metal/dishwasher.png new file mode 100644 index 0000000..2dbde95 Binary files /dev/null and b/assets/furniture/metal/dishwasher.png differ diff --git a/assets/furniture/metal/drawer.png b/assets/furniture/metal/drawer.png new file mode 100644 index 0000000..06c33cb Binary files /dev/null and b/assets/furniture/metal/drawer.png differ diff --git a/assets/furniture/metal/drawer_cupboard.png b/assets/furniture/metal/drawer_cupboard.png new file mode 100644 index 0000000..18f28bc Binary files /dev/null and b/assets/furniture/metal/drawer_cupboard.png differ diff --git a/assets/furniture/metal/dryer.png b/assets/furniture/metal/dryer.png new file mode 100644 index 0000000..6614123 Binary files /dev/null and b/assets/furniture/metal/dryer.png differ diff --git a/assets/furniture/metal/fridge.png b/assets/furniture/metal/fridge.png new file mode 100644 index 0000000..13beb26 Binary files /dev/null and b/assets/furniture/metal/fridge.png differ diff --git a/assets/furniture/metal/hanging_cupboard.png b/assets/furniture/metal/hanging_cupboard.png new file mode 100644 index 0000000..2375c23 Binary files /dev/null and b/assets/furniture/metal/hanging_cupboard.png differ diff --git a/assets/furniture/metal/kettle.png b/assets/furniture/metal/kettle.png new file mode 100644 index 0000000..3131431 Binary files /dev/null and b/assets/furniture/metal/kettle.png differ diff --git a/assets/furniture/metal/minifridge.png b/assets/furniture/metal/minifridge.png new file mode 100644 index 0000000..db315f8 Binary files /dev/null and b/assets/furniture/metal/minifridge.png differ diff --git a/assets/furniture/metal/oven.png b/assets/furniture/metal/oven.png new file mode 100644 index 0000000..446c166 Binary files /dev/null and b/assets/furniture/metal/oven.png differ diff --git a/assets/furniture/metal/sink.png b/assets/furniture/metal/sink.png new file mode 100644 index 0000000..3f1356e Binary files /dev/null and b/assets/furniture/metal/sink.png differ diff --git a/assets/furniture/metal/stove.png b/assets/furniture/metal/stove.png new file mode 100644 index 0000000..318c288 Binary files /dev/null and b/assets/furniture/metal/stove.png differ diff --git a/assets/furniture/metal/toaster.png b/assets/furniture/metal/toaster.png new file mode 100644 index 0000000..9a0532d Binary files /dev/null and b/assets/furniture/metal/toaster.png differ diff --git a/assets/furniture/metal/washing_machine.png b/assets/furniture/metal/washing_machine.png new file mode 100644 index 0000000..a7ad67f Binary files /dev/null and b/assets/furniture/metal/washing_machine.png differ diff --git a/assets/furniture/minifridge.png b/assets/furniture/minifridge.png new file mode 100644 index 0000000..c9a73dd Binary files /dev/null and b/assets/furniture/minifridge.png differ diff --git a/assets/furniture/oven.png b/assets/furniture/oven.png new file mode 100644 index 0000000..189570c Binary files /dev/null and b/assets/furniture/oven.png differ diff --git a/assets/furniture/sideboard_1.png b/assets/furniture/sideboard_1.png new file mode 100644 index 0000000..68767cb Binary files /dev/null and b/assets/furniture/sideboard_1.png differ diff --git a/assets/furniture/sideboard_2.png b/assets/furniture/sideboard_2.png new file mode 100644 index 0000000..227b266 Binary files /dev/null and b/assets/furniture/sideboard_2.png differ diff --git a/assets/furniture/sideboard_3.png b/assets/furniture/sideboard_3.png new file mode 100644 index 0000000..6c65a5c Binary files /dev/null and b/assets/furniture/sideboard_3.png differ diff --git a/assets/furniture/sideboard_3.png.png b/assets/furniture/sideboard_3.png.png new file mode 100644 index 0000000..98d6c7c Binary files /dev/null and b/assets/furniture/sideboard_3.png.png differ diff --git a/assets/furniture/sink.png b/assets/furniture/sink.png new file mode 100644 index 0000000..a6c5edf Binary files /dev/null and b/assets/furniture/sink.png differ diff --git a/assets/furniture/stove.png b/assets/furniture/stove.png new file mode 100644 index 0000000..f724460 Binary files /dev/null and b/assets/furniture/stove.png differ diff --git a/assets/furniture/toaster.png b/assets/furniture/toaster.png new file mode 100644 index 0000000..e263173 Binary files /dev/null and b/assets/furniture/toaster.png differ diff --git a/assets/furniture/washing_machine.png b/assets/furniture/washing_machine.png new file mode 100644 index 0000000..8c75234 Binary files /dev/null and b/assets/furniture/washing_machine.png differ diff --git a/src/activities/house/furniture.rs b/src/activities/house/furniture.rs new file mode 100644 index 0000000..139c178 --- /dev/null +++ b/src/activities/house/furniture.rs @@ -0,0 +1,90 @@ +use comfy::{error, texture_id, EngineContext, HashSet, Lazy, Mutex, TextureHandle}; +use std::{fs, io, sync::Arc}; + +static ASSETS_LOADED: Lazy>>> = + Lazy::new(|| Arc::new(Mutex::new(HashSet::new()))); + +struct FurnitureAsset { + folder: String, + name: String +} + +struct FurnitureTextureHandles { + human: Option, + magnet: Option, + elec: Option +} + +impl FurnitureAsset { + fn asset_path(&self) -> String { + format!("{}/{}.png", self.folder, self.name) + } + + fn asset_path_magnet(&self) -> String { + format!("{}/magnet/{}.png", self.folder, self.name) + } + + fn asset_path_elec(&self) -> String { + format!("{}/elec/{}.png", self.folder, self.name) + } + + fn load_asset_path( + &self, + path: String, + ctx: &mut EngineContext<'_> + ) -> Option { + let mut loaded = ASSETS_LOADED.lock(); + if loaded.contains(&path) { + return None; + } + let bytes = match fs::read(format!( + "{}/assets/furniture/{path}", + env!("CARGO_MANIFEST_DIR") + )) { + Ok(bytes) => bytes, + Err(err) if err.kind() == io::ErrorKind::NotFound => return None, + Err(err) => { + error!("Failed to load asset {path:?}: {err}"); + return None; + } + }; + ctx.load_texture_from_bytes(&path, &bytes); + let handle = texture_id(&path); + loaded.insert(path); + Some(handle) + } + + /// Attempt to load the assets. Silently ignore missing assets. + fn load_assets(&self, ctx: &mut EngineContext<'_>) -> FurnitureTextureHandles { + FurnitureTextureHandles { + human: self.load_asset_path(self.asset_path(), ctx), + magnet: self.load_asset_path(self.asset_path_magnet(), ctx), + elec: self.load_asset_path(self.asset_path_elec(), ctx) + } + } +} + +pub struct Furniture { + asset: FurnitureAsset, + handles: FurnitureTextureHandles, + on: Box bool> +} + +impl Furniture { + pub fn new, N: Into>( + folder: F, + name: N, + ctx: &mut EngineContext<'_> + ) -> Self { + let asset = FurnitureAsset { + folder: folder.into(), + name: name.into() + }; + let handles = asset.load_assets(ctx); + Self { + asset, + handles, + on: Box::new(|| false) + } + } +} diff --git a/src/activities/house/mod.rs b/src/activities/house/mod.rs index fbcca6d..8d75cf4 100644 --- a/src/activities/house/mod.rs +++ b/src/activities/house/mod.rs @@ -1,3 +1,4 @@ +mod furniture; mod grid; mod player;