diff options
| author | Dustin Mierau <dustin@mierau.me> | 2025-11-08 19:51:48 -0800 |
|---|---|---|
| committer | Dustin Mierau <dustin@mierau.me> | 2025-11-08 19:51:48 -0800 |
| commit | 2caf86e633c1a121c8e23d068ac817ed8e80f6a7 (patch) | |
| tree | 4c3d9cb30d9df501a4befd15bb798f7964c8caad /Hotline/Managers | |
| parent | 206e4bbdaba85062a38b32c16a9937ab42cddb47 (diff) | |
Moved SoundEffects to Managers. Updated connect form in ServerView. Changed some icons in context menus for bookmarks.
Diffstat (limited to 'Hotline/Managers')
| -rw-r--r-- | Hotline/Managers/SoundEffects.swift | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Hotline/Managers/SoundEffects.swift b/Hotline/Managers/SoundEffects.swift new file mode 100644 index 0000000..85a1c0e --- /dev/null +++ b/Hotline/Managers/SoundEffects.swift @@ -0,0 +1,40 @@ +import Foundation +import AppKit + +enum SoundEffect: String { + case loggedIn = "logged-in" + case chatMessage = "chat-message" + case transferComplete = "transfer-complete" + case userLogin = "user-login" + case userLogout = "user-logout" + case newNews = "new-news" + case serverMessage = "server-message" + case error = "error" + + static var all: [SoundEffect] = [.loggedIn, .chatMessage, .transferComplete, .userLogin, .userLogout, .newNews, .serverMessage, .error] +} + +class SoundEffects { + static let shared = SoundEffects() + + static func play(_ name: SoundEffect) { + Self.shared.play(name) + } + + private var preloadedSounds: [SoundEffect: NSSound] = [:] + + private init() { + // Preload sound effects + for effect in SoundEffect.all { + if let soundFileURL = Bundle.main.url(forResource: effect.rawValue, withExtension: "aiff"), + let sound = NSSound(contentsOf: soundFileURL, byReference: true) { + sound.volume = 0.75 + self.preloadedSounds[effect] = sound + } + } + } + + func play(_ name: SoundEffect) { + self.preloadedSounds[name]?.play() + } +} |