Merge branch 'room-types'
Some checks failed
Rust / rustfmt (push) Failing after 24s
Rust / clippy (push) Failing after 1m27s
Rust / build (push) Successful in 3m1s

This commit is contained in:
Fredi 2024-07-07 16:20:20 +02:00
commit 3816dbac77

View file

@ -1,8 +1,7 @@
use super::{furniture::Furniture, grid::Grid}; use super::{furniture::Furniture, grid::Grid};
use crate::game; use crate::game;
use comfy::{ use comfy::{
draw_rect, draw_rect_outline, draw_sprite, error, random_i32, vec2, EngineContext, draw_rect, draw_rect_outline, draw_sprite, error, random_i32, vec2, EngineContext, HashSet, Index, RandomRange as _, Vec2, GREEN, PURPLE, RED, WHITE
HashSet, RandomRange as _, Vec2, GREEN, PURPLE, RED, WHITE
}; };
use indexmap::IndexSet; use indexmap::IndexSet;
@ -88,6 +87,34 @@ impl Room {
let random_idx = usize::gen_range(0, empty_spots.len()); let random_idx = usize::gen_range(0, empty_spots.len());
empty_spots.swap_remove_index(random_idx) empty_spots.swap_remove_index(random_idx)
} }
fn random_empty_spot_size(empty_spots: &mut IndexSet<u8>, size: u8) -> Option<u8> {
let mut empty_spots_size = IndexSet::<u8>::new();
for &index in empty_spots.iter() {
let mut is_valid = true;
for offset in 0..size{
if !empty_spots.contains(&(index + offset)){
is_valid = false;
break;
}
}
if is_valid {
empty_spots_size.insert(index);
}
}
if empty_spots_size.is_empty() {
return None;
}
let random_idx = usize::gen_range(0, empty_spots_size.len());
for offset in (0..size).rev() {
empty_spots.swap_remove_index(random_idx + offset as usize);
}
Some(random_idx as u8)
}
fn random_appliance<T>(empty_spots: &mut Vec<T>) -> Option<T> { fn random_appliance<T>(empty_spots: &mut Vec<T>) -> Option<T> {
if empty_spots.is_empty() { if empty_spots.is_empty() {
return None; return None;
@ -254,6 +281,44 @@ impl Room {
} }
}, },
RoomType::LivingRoom => {
let has_couch = match u8::gen_range(0, 2) {
0 => false,
1 => true,
_ => unreachable!()
};
if has_couch {
if let Some(pos) = random_empty_spot_size(&mut empty_spots, 3) {
furnitures.push(Tile {
pos: vec2(pos as f32, 0.0),
size: vec2(3.0, 1.0),
f: Furniture::new("bedroom", "couch", ctx),
z:0
});
}
}
if let Some(pos) = random_empty_spot(&mut empty_spots) {
furnitures.push(Tile {
pos: vec2(pos as f32, 0.0),
size: vec2(1.0, 2.0),
f: Furniture::new("bedroom", "bookshelf", ctx),
z:0
});
}
if let Some(pos) = random_empty_spot(&mut empty_spots) {
furnitures.push(Tile {
pos: vec2(pos as f32, 0.0),
size: vec2(0.5, 0.9),
f: Furniture::new("bedroom", "mini_ac", ctx),
z:0
});
}
},
_ => {} _ => {}
} }