diff --git a/src/activities/house/mod.rs b/src/activities/house/mod.rs index a26db43..555d631 100644 --- a/src/activities/house/mod.rs +++ b/src/activities/house/mod.rs @@ -3,10 +3,10 @@ mod grid; mod player; mod room; -use comfy::EngineContext; -use grid::Grid; -use player::Player; -use room::Room; +use self::{grid::Grid, player::Player, room::Room}; +use super::Activity; +use crate::State; +use comfy::{error, EngineContext}; #[derive(Debug)] pub struct HouseState { @@ -15,32 +15,33 @@ pub struct HouseState { player: Player } -pub fn setup(state: &mut crate::State, ctx: &mut EngineContext<'_>) { - if let Some(house) = state.house() { +impl HouseState { + pub fn generate_new_house(ctx: &mut EngineContext<'_>) -> Self { let room = Room::new(ctx); let player = Player::new(&room); HouseState { room, player } - }; - - state.house = Some(house); -} - -pub fn draw(state: &crate::State, _ctx: &comfy::EngineContext<'_>) { - if let Some(house) = &state.house { - //Draw House - house.room.draw(); - - //Draw Grid - //state.house.grid.draw(); - - //Draw Player - house.player.draw(); } } -pub fn update(state: &mut crate::State, ctx: &mut comfy::EngineContext<'_>) { - let house = state.house_mut(); - house.player.update(&house.grid); +pub fn draw(state: &State, _ctx: &comfy::EngineContext<'_>) { + let Some(house) = state.house() else { + error!("How can I render a house when I'm not in one?!?"); + return; + }; + + //Draw House + house.room.draw(); + + //Draw Grid + //state.house.grid.draw(); + + //Draw Player + house.player.draw(); +} + +pub fn update(state: &mut State, ctx: &mut comfy::EngineContext<'_>) { + let house = state.house_mut(ctx); + house.player.update(&house.room.grid); if house.player.is_moving_to_right_room(&house.room) { house.room = Room::new(ctx); diff --git a/src/activities/mod.rs b/src/activities/mod.rs index e0afdc4..4f3efbd 100644 --- a/src/activities/mod.rs +++ b/src/activities/mod.rs @@ -7,7 +7,5 @@ pub mod overworld; pub enum Activity { House(IVec2), #[default] - House, - #[allow(dead_code)] Overworld } diff --git a/src/activities/overworld/mod.rs b/src/activities/overworld/mod.rs index d2e1613..d2dd96a 100644 --- a/src/activities/overworld/mod.rs +++ b/src/activities/overworld/mod.rs @@ -32,7 +32,7 @@ pub fn draw(state: &crate::State, _engine: &comfy::EngineContext<'_>) { draw_circle(state.ghost.overworld_pos, 0.5, RED, ZLayer::Ghost.into()); } -fn update_move_player(state: &mut State) { +fn update_move_player(state: &mut State, ctx: &mut EngineContext<'_>) { let now = Instant::now(); // Are there any pending position updates? If so, we ignore all user input and execute @@ -160,18 +160,18 @@ fn update_move_player(state: &mut State) { if current_tile.can_enter_house() { info!("enter house at {tile_pos}"); state.activity = Activity::House(tile_pos); - state.house_mut(); // gen new house + state.house_mut(ctx); // gen new house } } } -pub fn update(state: &mut State, _ctx: &mut EngineContext<'_>) { +pub fn update(state: &mut State, ctx: &mut EngineContext<'_>) { let mut camera = main_camera_mut(); camera.center = Vec2::ZERO; camera.zoom = 30.0; // move player - update_move_player(state); + update_move_player(state, ctx); // generate more chunks if needed { diff --git a/src/game.rs b/src/game.rs index e84c08b..3a3a920 100644 --- a/src/game.rs +++ b/src/game.rs @@ -88,8 +88,6 @@ impl Sub for ZLayer { pub fn setup(state: &mut State, ctx: &mut EngineContext<'_>) { Assets::load(ctx); - - house::setup(state, ctx); } pub fn update(state: &mut State, engine: &mut EngineContext<'_>) { diff --git a/src/main.rs b/src/main.rs index d05f0e5..a84ee9b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,13 +40,13 @@ impl State { } fn house(&self) -> Option<&HouseState> { - self.houses.get(&self.get_house_pos().unwrap()) + self.houses.get(&self.get_house_pos()?) } - fn house_mut(&mut self) -> &mut HouseState { + fn house_mut(&mut self, ctx: &mut EngineContext<'_>) -> &mut HouseState { self.houses .entry(self.get_house_pos().unwrap()) - .or_insert_with(HouseState::default) + .or_insert_with(|| HouseState::generate_new_house(ctx)) } }