summaryrefslogtreecommitdiff
path: root/src/audio/music.c
diff options
context:
space:
mode:
authororoborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-06-28 16:38:35 +0000
committeroroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-06-28 16:38:35 +0000
commit2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch)
tree7cf274897bf540d5332d446f583ffd066e4e2e1d /src/audio/music.c
parentb877ae23ac5d380ab3aa48d7724045cf4883b186 (diff)
- prekopanie adresarovej struktury, prva cast
git-svn-id: http://opensvn.csie.org/tuxanci_ng@77 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/audio/music.c')
-rw-r--r--src/audio/music.c210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/audio/music.c b/src/audio/music.c
new file mode 100644
index 0000000..90bc5a0
--- /dev/null
+++ b/src/audio/music.c
@@ -0,0 +1,210 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/storage.h"
+
+#include "client/interface.h"
+
+#include "audio/audio.h"
+#include "audio/music.h"
+
+static list_t *listStorage;
+
+static bool_t isMusicInit = FALSE;
+static bool_t var_isMusicActive = TRUE;
+static Mix_Music *currentMusic;
+
+bool_t isMusicInicialized()
+{
+ return isMusicInit;
+}
+
+void initMusic()
+{
+ if( isAudioInicialized() == FALSE )
+ {
+ isMusicInit = FALSE;
+ return;
+ }
+
+ listStorage = newStorage();
+ currentMusic = NULL;
+
+ isMusicInit = TRUE;
+ var_isMusicActive = TRUE;
+
+ if( isParamFlag("--nomusic") )
+ {
+ setMusicActive(FALSE);
+ }
+
+ if( isParamFlag("--music") )
+ {
+ setMusicActive(TRUE);
+ }
+
+ printf("init music..\n");
+}
+
+static Mix_Music* loadMixMusic(char *file)
+{
+ Mix_Music *new;
+ char str[STR_PATH_SIZE];
+
+
+ printf("load music %s..\n", file);
+ sprintf(str, PATH_MUSIC "%s", file);
+
+ accessExistFile(str);
+
+ new = Mix_LoadMUS(str);
+
+ if( new == NULL )
+ {
+ fprintf(stderr, "Nepodarilo sa nacitat hudbu %s\n", file);
+ return NULL;
+ }
+
+ return new;
+}
+
+static void playMixMusic()
+{
+ if( currentMusic != NULL )
+ {
+ Mix_PlayMusic(currentMusic, 1000);
+ }
+}
+
+static void destroyMusic(void *p)
+{
+ Mix_FreeMusic((Mix_Music *)p);
+}
+
+void addMusic(char *file, char *name, char *group)
+{
+ Mix_Music *new;
+
+ if( isMusicInit == FALSE )
+ {
+ return;
+ }
+
+ assert( file != NULL );
+ assert( name != NULL );
+ assert( group != NULL );
+
+ new = loadMixMusic(file);
+
+ addItemToStorage(listStorage, group, name, new );
+}
+
+void stopMusic()
+{
+ if( isMusicInit == FALSE ||
+ var_isMusicActive == FALSE )
+ {
+ return;
+ }
+
+ if( currentMusic != NULL )
+ {
+ printf("stop music..\n");
+ Mix_HaltMusic();
+ currentMusic = NULL;
+ }
+}
+
+void playMusic(char *name, char *group)
+{
+ static char currentMusic_group[STR_SIZE];
+ static char currentMusic_name[STR_SIZE];
+ static int isStrInit = 0;
+
+ if( isStrInit == 0 )
+ {
+ strcpy(currentMusic_group, "none");
+ strcpy(currentMusic_name, "none");
+ isStrInit = 1;
+ }
+
+ if( isMusicInit == FALSE ||
+ var_isMusicActive == FALSE )
+ {
+ return;
+ }
+
+ if( currentMusic != NULL &&
+ strcmp(currentMusic_group, group) == 0 &&
+ strcmp(currentMusic_name, name) == 0 )
+ {
+ return;
+ }
+
+ if( currentMusic != NULL )
+ {
+ stopMusic();
+ }
+
+ currentMusic = getItemFromStorage(listStorage, group, name);
+ strcpy(currentMusic_group, group);
+ strcpy(currentMusic_name, name);
+
+ if( currentMusic != NULL )
+ {
+ printf("play music %s\n", name);
+ playMixMusic();
+ }
+}
+
+void setMusicActive(bool_t n)
+{
+ static Mix_Music *music = NULL;
+
+ if( n == FALSE )
+ {
+ music = currentMusic;
+ stopMusic();
+ }
+
+ if( n == TRUE )
+ {
+ currentMusic = music;
+ playMixMusic();
+ }
+
+ var_isMusicActive = n;
+}
+
+bool_t isMusicActive()
+{
+ return var_isMusicActive;
+}
+
+char* getCurrentMusic()
+{
+ return "unknown";
+}
+
+void delAllMusicInGroup(char *group)
+{
+ delAllItemFromStorage(listStorage, group, destroyMusic);
+}
+
+void quitMusic()
+{
+ if( isMusicInit == FALSE )
+ {
+ return;
+ }
+
+ stopMusic();
+ destroyStorage(listStorage, destroyMusic);
+ isMusicInit = FALSE;
+
+ printf("quit music..\n");
+}