From b356262ac25db4f28b85caaf6d928631f7d281b3 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Sun, 4 Oct 2020 13:25:51 +0900 Subject: [PATCH] Preserve door states, add door sfx --- resources/door.ogg | Bin 0 -> 7415 bytes src/scenes/mainscene.rs | 39 ++++++++++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 resources/door.ogg diff --git a/resources/door.ogg b/resources/door.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0c47ab1312614e35cf78693d54aa9bf4fae72e4c GIT binary patch literal 7415 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, @@ -65,19 +71,24 @@ pub struct MainScene { interact_text: Text, doors: Vec, door_text: Text, + door_sfx: Source, + door_states: HashMap, } impl MainScene { pub fn new(ctx: &mut Context, font: Font, player: Rc>) -> Self { let mut music = Source::new(ctx, "/music00.ogg").unwrap(); music.set_repeat(true); - // music.play().unwrap(); 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"); interact_text.set_font(font, Scale::uniform(20f32)); let mut door_text = Text::new("[W] or Right Click to enter door"); door_text.set_font(font, Scale::uniform(20f32)); + + let door_states = HashMap::new(); + // door_states.insert(DoorIDs::LeftOfPod, false); + Self { font, player, @@ -102,6 +113,8 @@ impl MainScene { interact_text, doors: Vec::new(), door_text, + door_sfx: Source::new(ctx, "/door.ogg").unwrap(), + door_states, } } @@ -131,6 +144,9 @@ 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) { + self.doors[0].set_open(true); + } } } } @@ -189,12 +205,25 @@ impl MainScene { } } - fn use_interactable(&mut self, itype: InteractableType) { + fn use_interactable(&mut self, itype: InteractableType) -> GameResult<()> { match itype { InteractableType::Door(id) => { - self.doors[id].toggle_open(); + match self.room { + Room::StasisPod => (), + Room::LeftOfPod => { + if self.door_states.contains_key(&DoorIDs::LeftOfPod) { + *self.door_states.get_mut(&DoorIDs::LeftOfPod).unwrap() = + self.doors[id].toggle_open(); + } else { + self.door_states + .insert(DoorIDs::LeftOfPod, self.doors[id].toggle_open()); + } + } + } + self.door_sfx.play()?; } } + Ok(()) } } @@ -449,7 +478,7 @@ impl EventHandler for MainScene { } } if let Some(it) = itype { - self.use_interactable(it); + self.use_interactable(it).unwrap(); } else if self.player.borrow().x > x { self.walking_state = WalkingState::Left; } else if self.player.borrow().x + 64f32 < x { @@ -513,7 +542,7 @@ impl EventHandler for MainScene { } } if let Some(it) = itype { - self.use_interactable(it); + self.use_interactable(it).unwrap(); } } } -- 2.49.0