class Room(QWidget): """ General room class """ def __init__(self, room_name, bg_image=""): super().__init__() self.title = room_name self.bg_image = bg_image self.left = 0 self.top = 0 self.width = 1080 self.height = 860 self.image_height = 810 # room button properties self.button_width = 100 self.button_height = 50 # interaction button properties self.bw = 25 self.bh = 25 self.obj_window = None self.page_window = None self.black_window = None self.initUI() def initUI(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) self.setBackgroundImage() self.setToolbarBackground() self.setToolbar() def setToolbarBackground(self): # Add paint widget and paint self.m = PaintWidget(self) self.m.move(0, 0) self.m.resize(self.width, self.height) def setBackgroundImage(self): label = QLabel(self) if len(self.bg_image) > 1: pixmap = QPixmap( f'../images/rooms/{self.title.lower()}_{self.bg_image}.png') label.setPixmap(pixmap) else: if config.game_time.isDay(): pixmap = QPixmap( f'../images/rooms/{self.title.lower()}_day.png') label.setPixmap(pixmap) else: pixmap = QPixmap( f'../images/rooms/{self.title.lower()}_night.png') label.setPixmap(pixmap) def setToolbar(self): spacing = 105 self.inventory_window = None self.inventoryButton = QPushButton("Inventory", self) self.inventoryButton.setGeometry(5 + spacing * 0, self.image_height, self.button_width, self.button_height) self.inventoryButton.clicked.connect(self.toInventory) self.notes_window = None self.notesButton = QPushButton("Notes", self) self.notesButton.setGeometry(5 + spacing * 1, self.image_height, self.button_width, self.button_height) self.notesButton.clicked.connect(self.toNotes) self.tasks_window = None self.tasksButton = QPushButton("Task List", self) self.tasksButton.setGeometry(5 + spacing * 2, self.image_height, self.button_width, self.button_height) self.tasksButton.clicked.connect(self.toTasks) self.phone_window = None self.phoneButton = QPushButton("Phone", self) self.phoneButton.setGeometry(5 + spacing * 3, self.image_height, self.button_width, self.button_height) self.phoneButton.clicked.connect(self.toPhone) self.save_window = None self.saveButton = QPushButton("Save", self) self.saveButton.setGeometry( self.width - 5 - self.button_width - spacing * 1, self.image_height, self.button_width, self.button_height) self.saveButton.clicked.connect(self.toSave) self.exitButton = QPushButton("Exit", self) self.exitButton.setGeometry( self.width - 5 - self.button_width - spacing * 0, self.image_height, self.button_width, self.button_height) self.exitButton.clicked.connect(self.toExit) def toInventory(self, checked): if self.inventory_window is None: self.inventory_window = Inventory() self.inventory_window.show() else: self.inventory_window.close() self.inventory_window = None def toNotes(self, checked): if self.notes_window is None: self.notes_window = Notes() self.notes_window.show() else: self.notes_window.close() self.notes_window = None def toTasks(self, checked): if self.tasks_window is None: self.tasks_window = Tasks() self.tasks_window.show() else: self.tasks_window.close() self.tasks_window = None def toPhone(self, checked): if self.phone_window is None: self.phone_window = Phone() self.phone_window.show() else: self.phone_window.close() self.phone_window = None def toSave(self, checked): """ Saves current data """ fname = self.getText() # progress as csv save_dict = { "progress": config.progress.data.to_dict(), "inventory": config.nancy.inventory, "notes": config.progress.notes } try: with open(f"../data/save_files/{fname}.json", "w") as f: data = json.dump(save_dict, f) save_status_text = "Save Successful!" except Exception as inst: print("Error -", inst) save_status_text = "Save Unsuccessful" saveStatus = QMessageBox.information(self, 'Save Game', save_status_text, QMessageBox.Ok, QMessageBox.Ok) def toExit(self, checked): """ Exits game """ checkExit = QMessageBox.question(self, 'Exit Game', "Are you sure?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if checkExit == QMessageBox.Yes: sys.exit(0) else: pass def getText(self): text, okPressed = QInputDialog.getText(self, "Save Game", "File Name:", QLineEdit.Normal, "") if okPressed and text != '': return text def toNugget(self, checked): config.progress.nugget_clicks += 1 num = randint(0, 1) if num == 0: self.playAudio("cat_meow") else: self.playAudio("cat_meow_low") def toUnused(self, checked): self.playAudio("hmm", nancy=True) def toLocked(self, checked): self.playAudio("locked", nancy=True) def toNoSleep(self, checked): self.playAudio("no_sleep", nancy=True) def toDuct(self, checked): config.progress.duct_checked += 1 self.playAudio("cat_meow") def toLightsOff(self, checked): if config.game_time.isDay() == False: # only works if at night config.progress.lights_switched += 1 if self.black_window is None: self.black_window = Black() self.black_window.show() else: self.black_window.close() self.black_window = None else: self.playAudio("hmm", nancy=True) def grabObject( self, item, ): if "bag" in config.nancy.inventory or item == "bag": if item in config.nancy.inventory: self.playAudio("have_that", nancy=True) else: if self.obj_window is None: config.nancy.inventory.append(item) self.obj_window = Object(item) self.obj_window.show() self.playAudio("got_it", nancy=True) else: self.obj_window.close() self.obj_window = None else: self.playAudio("put_that", nancy=True) def readPage(self, page_name): if self.page_window is None: self.page_window = Page(page_name, 1) self.page_window.show() else: self.page_window.close() self.page_window = None def lookAtObject(self, item): if self.obj_window is None: self.obj_window = Object(item) self.obj_window.show() else: self.obj_window.close() self.obj_window = None def playAudio(self, fname, wait=True, nancy=False): """ Plays audio file """ if nancy: filename = f"../audio/nancy/{fname}.wav" else: filename = f"../audio/{fname}.wav" data, fs = sf.read(filename, dtype='float32') sd.play(data, fs) if wait: status = sd.wait()