From 0fe22df71cb880b9026154f7f3681099737b6184 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Sun, 4 Oct 2020 15:32:50 +0900 Subject: [PATCH] Add LeftHall, can have lockable door interfaces --- resources/error_sfx.ogg | Bin 0 -> 10128 bytes src/interactable.rs | 26 +++++++ src/scenes/mainscene.rs | 158 +++++++++++++++++++++++++++++----------- 3 files changed, 140 insertions(+), 44 deletions(-) create mode 100644 resources/error_sfx.ogg diff --git a/resources/error_sfx.ogg b/resources/error_sfx.ogg new file mode 100644 index 0000000000000000000000000000000000000000..102d301257af80ac0038a76dde191b3b0f6da8d1 GIT binary patch literal 10128 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 AlK=n! literal 0 HcmV?d00001 diff --git a/src/interactable.rs b/src/interactable.rs index a7c78fe..aa9a324 100644 --- a/src/interactable.rs +++ b/src/interactable.rs @@ -6,6 +6,7 @@ const DEFAULT_RADIUS: f32 = 70f32; #[derive(Copy, Clone, PartialEq)] pub enum InteractableType { Door(usize), + LockedDoor(usize, bool), } pub struct Interactable { @@ -66,8 +67,33 @@ impl Interactable { DrawParam::new().dest([self.x - 7f32, self.y - 8f32]), )?; } + InteractableType::LockedDoor(_, unlocked) => { + let color; + if unlocked { + color = Color::from_rgb(0x16, 0x9c, 0xd8); + } else { + color = Color::from_rgb(0xdf, 0, 0); + } + let panel_mesh = Mesh::new_rectangle( + ctx, + DrawMode::fill(), + Rect::new(0f32, 0f32, 14f32, 16f32), + color, + )?; + graphics::draw( + ctx, + &panel_mesh, + DrawParam::new().dest([self.x - 7f32, self.y - 8f32]), + )?; + } } Ok(()) } + + pub fn set_unlocked(&mut self, unlocked: bool) { + if let InteractableType::LockedDoor(_, is_unlocked) = &mut self.itype { + *is_unlocked = unlocked; + } + } } diff --git a/src/scenes/mainscene.rs b/src/scenes/mainscene.rs index 903a30f..767648b 100644 --- a/src/scenes/mainscene.rs +++ b/src/scenes/mainscene.rs @@ -41,6 +41,7 @@ enum Room { LeftOfPod, MainHallFrontOfPod, WindowRightHall, + LeftHall, } enum WalkingState { @@ -52,6 +53,7 @@ enum WalkingState { #[derive(Copy, Clone, PartialEq, Eq, Hash)] enum DoorIDs { LeftOfPod, + LeftHall, } #[derive(Copy, Clone, PartialEq)] @@ -85,12 +87,14 @@ pub struct MainScene { doors: Vec, door_text: Text, door_sfx: Source, - door_states: HashMap, + // (is_open, is_locked) + door_states: HashMap, earth_image: Image, discovery_state: DiscoveryState, discovery_music: Source, saw_earth: bool, window_image: Image, + error_sfx: Source, } impl MainScene { @@ -99,9 +103,9 @@ impl MainScene { music.set_repeat(true); let mut current_text = Text::new(""); current_text.set_font(font, Scale::uniform(26f32)); - let mut interact_text = Text::new("[E] or Left Click to Interact"); + let mut interact_text = Text::new("[E] or Left Click\nto Interact"); interact_text.set_font(font, Scale::uniform(20f32)); - let mut door_text = Text::new("[W] or Right Click to enter door"); + let mut door_text = Text::new("[W] or Right Click\nto enter door"); door_text.set_font(font, Scale::uniform(20f32)); let door_states = HashMap::new(); @@ -138,6 +142,7 @@ impl MainScene { discovery_music: Source::new(ctx, "/music03.ogg").unwrap(), saw_earth: false, window_image: Image::new(ctx, "/window.png").unwrap(), + error_sfx: Source::new(ctx, "/error_sfx.ogg").unwrap(), } } @@ -167,7 +172,7 @@ impl MainScene { self.doors.clear(); self.doors .push(Door::new(false, 300f32, 600f32 - 160f32 - 50f32, 0)); - if let Some(true) = self.door_states.get(&DoorIDs::LeftOfPod) { + if let Some((true, _)) = self.door_states.get(&DoorIDs::LeftOfPod) { self.doors[0].set_open(true); } if self.state == State::ExitDoor { @@ -183,14 +188,19 @@ impl MainScene { 600f32 - 160f32 - 50f32, 0, )); - if let Some(true) = self.door_states.get(&DoorIDs::LeftOfPod) { + if let Some((true, _)) = self.door_states.get(&DoorIDs::LeftOfPod) { self.doors[0].set_open(true); } self.interactables.push(Interactable::new( - InteractableType::Door(0), + InteractableType::LockedDoor(0, false), 330f32, 450f32, )); + if let Some((_, true)) = self.door_states.get(&DoorIDs::LeftOfPod) { + self.interactables[0].set_unlocked(true); + } else if !self.door_states.contains_key(&DoorIDs::LeftOfPod) { + self.interactables[0].set_unlocked(true); + } if self.state == State::ExitDoor { self.player.borrow_mut().x = 400f32 - 96f32 / 2f32 + (96f32 - 64f32) / 2f32; } @@ -207,6 +217,24 @@ impl MainScene { self.discovery_music.play().unwrap(); } } + Room::LeftHall => { + self.doors.clear(); + self.interactables.clear(); + self.doors + .push(Door::new(false, 100f32, 600f32 - 160f32 - 50f32, 0)); + if let Some((true, _)) = self.door_states.get(&DoorIDs::LeftHall) { + self.doors[0].set_open(true); + } + self.interactables.push(Interactable::new( + InteractableType::LockedDoor(0, false), + 70f32, + 450f32, + )); + if let Some((_, true)) = self.door_states.get(&DoorIDs::LeftHall) { + self.interactables[0].set_unlocked(true); + } + self.darkness_yoffset = -250f32; + } } } @@ -227,6 +255,9 @@ impl MainScene { Room::WindowRightHall => { draw_left = true; } + Room::LeftHall => { + draw_right = true; + } } if draw_left { @@ -257,12 +288,17 @@ impl MainScene { self.init_room(); } Room::LeftOfPod => (), - Room::MainHallFrontOfPod => {} + Room::MainHallFrontOfPod => { + self.room = Room::LeftHall; + self.player.borrow_mut().x = 800f32 - 70f32 - 64f32; + self.init_room(); + } Room::WindowRightHall => { self.room = Room::MainHallFrontOfPod; self.player.borrow_mut().x = 800f32 - 70f32 - 64f32; self.init_room(); } + Room::LeftHall => (), } } @@ -280,6 +316,11 @@ impl MainScene { self.init_room(); } Room::WindowRightHall => {} + Room::LeftHall => { + self.room = Room::MainHallFrontOfPod; + self.player.borrow_mut().x = 70f32; + self.init_room(); + } } } @@ -302,6 +343,9 @@ impl MainScene { self.player.borrow_mut().set_walking(true); } Room::WindowRightHall => (), + Room::LeftHall => { + // TODO + } } } } @@ -313,26 +357,58 @@ impl MainScene { Room::StasisPod => (), Room::LeftOfPod => { if self.door_states.contains_key(&DoorIDs::LeftOfPod) { - *self.door_states.get_mut(&DoorIDs::LeftOfPod).unwrap() = + self.door_states.get_mut(&DoorIDs::LeftOfPod).unwrap().0 = self.doors[id].toggle_open(); } else { self.door_states - .insert(DoorIDs::LeftOfPod, self.doors[id].toggle_open()); + .insert(DoorIDs::LeftOfPod, (self.doors[id].toggle_open(), true)); } } Room::MainHallFrontOfPod => { if self.door_states.contains_key(&DoorIDs::LeftOfPod) { - *self.door_states.get_mut(&DoorIDs::LeftOfPod).unwrap() = + self.door_states.get_mut(&DoorIDs::LeftOfPod).unwrap().0 = self.doors[id].toggle_open(); } else { self.door_states - .insert(DoorIDs::LeftOfPod, self.doors[id].toggle_open()); + .insert(DoorIDs::LeftOfPod, (self.doors[id].toggle_open(), true)); } } Room::WindowRightHall => (), + Room::LeftHall => (), } self.door_sfx.play()?; } + InteractableType::LockedDoor(id, unlocked) => match self.room { + Room::StasisPod | Room::LeftOfPod | Room::WindowRightHall => (), + Room::MainHallFrontOfPod => { + if unlocked { + if self.door_states.contains_key(&DoorIDs::LeftOfPod) { + self.door_states.get_mut(&DoorIDs::LeftOfPod).unwrap().0 = + self.doors[id].toggle_open(); + } else { + self.door_states + .insert(DoorIDs::LeftOfPod, (self.doors[id].toggle_open(), true)); + } + self.door_sfx.play()?; + } else { + self.error_sfx.play()?; + } + } + Room::LeftHall => { + if unlocked { + if self.door_states.contains_key(&DoorIDs::LeftHall) { + self.door_states.get_mut(&DoorIDs::LeftHall).unwrap().0 = + self.doors[id].toggle_open(); + } else { + self.door_states + .insert(DoorIDs::LeftHall, (self.doors[id].toggle_open(), true)); + } + self.door_sfx.play()?; + } else { + self.error_sfx.play()?; + } + } + }, } Ok(()) } @@ -362,6 +438,7 @@ impl MainScene { DrawParam::new().dest([800f32 / 5f32, 600f32 / 5f32]), )?; } + Room::LeftHall => {} } for door in &self.doors { door.draw(ctx, &self.door_image)?; @@ -430,43 +507,35 @@ impl EventHandler for MainScene { self.init_room(); } } - State::Investigate => { - match self.walking_state { - WalkingState::Standing => { + State::Investigate => match self.walking_state { + WalkingState::Standing => { + self.player.borrow_mut().set_walking(false); + } + WalkingState::Left => { + self.player.borrow_mut().x -= dt * PLAYER_MOVEMENT_SPEED; + if self.player.borrow().x <= 0f32 { + self.player.borrow_mut().x = 0f32; + self.walking_state = WalkingState::Standing; self.player.borrow_mut().set_walking(false); - } - WalkingState::Left => { - self.player.borrow_mut().x -= dt * PLAYER_MOVEMENT_SPEED; - if self.player.borrow().x <= 0f32 { - self.player.borrow_mut().x = 0f32; - self.walking_state = WalkingState::Standing; - self.player.borrow_mut().set_walking(false); - self.check_exit_left(); - } else { - self.player.borrow_mut().set_walking(true); - self.player.borrow_mut().set_xflip(true); - } - } - WalkingState::Right => { - self.player.borrow_mut().x += dt * PLAYER_MOVEMENT_SPEED; - if self.player.borrow().x + 64f32 >= 800f32 { - self.player.borrow_mut().x = 800f32 - 64f32; - self.walking_state = WalkingState::Standing; - self.player.borrow_mut().set_walking(false); - self.check_exit_right(); - } else { - self.player.borrow_mut().set_walking(true); - self.player.borrow_mut().set_xflip(false); - } + self.check_exit_left(); + } else { + self.player.borrow_mut().set_walking(true); + self.player.borrow_mut().set_xflip(true); } } - match self.room { - Room::StasisPod => (), - Room::LeftOfPod => (), - Room::MainHallFrontOfPod => (), - Room::WindowRightHall => (), + WalkingState::Right => { + self.player.borrow_mut().x += dt * PLAYER_MOVEMENT_SPEED; + if self.player.borrow().x + 64f32 >= 800f32 { + self.player.borrow_mut().x = 800f32 - 64f32; + self.walking_state = WalkingState::Standing; + self.player.borrow_mut().set_walking(false); + self.check_exit_right(); + } else { + self.player.borrow_mut().set_walking(true); + self.player.borrow_mut().set_xflip(false); + } } - } + }, State::EnterDoor(room) => { self.timer -= dt; if self.timer <= 0f32 { @@ -578,6 +647,7 @@ impl EventHandler for MainScene { Room::LeftOfPod => {} Room::MainHallFrontOfPod => {} Room::WindowRightHall => (), + Room::LeftHall => (), } for interactable in &self.interactables { -- 2.49.0