tsound_cocoa.m - vaccinewars - be a doctor and try to vaccinate the world
HTML git clone git://src.adamsgaard.dk/vaccinewars
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tsound_cocoa.m (2648B)
---
1 /************************************************************************
2 * sound_cocoa.m Implementation of dopewars sound system (Cocoa driver)*
3 * Copyright (C) 1998-2021 Ben Webb *
4 * Email: benwebb@users.sf.net *
5 * WWW: https://dopewars.sourceforge.io/ *
6 * *
7 * This program is free software; you can redistribute it and/or *
8 * modify it under the terms of the GNU General Public License *
9 * as published by the Free Software Foundation; either version 2 *
10 * of the License, or (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the Free Software *
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, *
20 * MA 02111-1307, USA. *
21 ************************************************************************/
22
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #ifdef HAVE_COCOA
28 #include <glib.h>
29 #include "../sound.h"
30
31 #import <Foundation/Foundation.h>
32 #import <AppKit/AppKit.h>
33
34 /* Cache player by name of sound file */
35 NSMutableDictionary *play_by_name;
36
37 static gboolean SoundOpen_Cocoa(void)
38 {
39 play_by_name = [[NSMutableDictionary alloc] init];
40 return TRUE;
41 }
42
43 static void SoundClose_Cocoa(void)
44 {
45 [play_by_name release];
46 }
47
48 static void SoundPlay_Cocoa(const gchar *snd)
49 {
50 NSString *sound = [[NSString alloc] initWithUTF8String:snd];
51 NSSound *p;
52 p = [play_by_name objectForKey:sound];
53 if (!p) {
54 p = [[NSSound alloc] initWithContentsOfFile:sound byReference:YES];
55 /* If the sound file doesn't exist, do nothing */
56 if (!p) return;
57 [play_by_name setObject:p forKey:sound];
58 }
59 /* First, stop any currently playing sound */
60 [p stop];
61 [p play];
62 }
63
64 SoundDriver *sound_cocoa_init(void)
65 {
66 static SoundDriver driver;
67
68 driver.name = "cocoa";
69 driver.open = SoundOpen_Cocoa;
70 driver.close = SoundClose_Cocoa;
71 driver.play = SoundPlay_Cocoa;
72 return &driver;
73 }
74 #endif