diff --git a/src/framework/CMakeLists.txt b/src/framework/CMakeLists.txt index 9ec136c3..71a78e9e 100644 --- a/src/framework/CMakeLists.txt +++ b/src/framework/CMakeLists.txt @@ -22,7 +22,7 @@ ENDIF() SET(Boost_USE_MULTITHREADED ON) SET(Boost_USE_STATIC_LIBS ON) -FIND_PACKAGE(Boost COMPONENTS system thread REQUIRED) +FIND_PACKAGE(Boost COMPONENTS system REQUIRED) IF(USE_OPENGL_ES2) FIND_PACKAGE(OpenGLES2 REQUIRED) diff --git a/src/framework/application.cpp b/src/framework/application.cpp index 30a05b07..ef97321c 100644 --- a/src/framework/application.cpp +++ b/src/framework/application.cpp @@ -209,6 +209,8 @@ void Application::exit() void Application::poll() { + g_sounds.poll(); + // poll input events g_window.poll(); //g_particleManager.update(); diff --git a/src/framework/sound/soundmanager.cpp b/src/framework/sound/soundmanager.cpp index b0bbdb34..bdeb8fbe 100644 --- a/src/framework/sound/soundmanager.cpp +++ b/src/framework/sound/soundmanager.cpp @@ -33,8 +33,6 @@ SoundManager g_sounds; void SoundManager::init() { - m_run = false; - m_device = alcOpenDevice(NULL); if(!m_device) { logError("unable to open audio device"); @@ -46,27 +44,20 @@ void SoundManager::init() logError("unable to create audio context: ", alcGetString(m_device, alcGetError(m_device))); return; } - alcMakeContextCurrent(m_context); - m_thread = std::thread(std::bind(&SoundManager::audioThread, &g_sounds)); - while(!m_run) - g_clock.sleep(1); m_musicEnabled = true; m_soundEnabled = true; /* g_eventDispatcher.scheduleEvent([this] { - play("/test.ogg"); + play("/1.ogg"); }, 10); */ } void SoundManager::terminate() { - m_run = false; - m_thread.join(); - m_sources.clear(); m_buffers.clear(); m_musicSource = nullptr; @@ -88,25 +79,14 @@ void SoundManager::terminate() } } -void SoundManager::audioThread() -{ - m_run = true; - while(m_run) { - //TODO: use condition variable - g_clock.sleep(30); - update(); - } -} - -void SoundManager::update() +void SoundManager::poll() { - std::lock_guard lock(m_mutex); - static ticks_t lastUpdate = 0; - ticks_t now = g_clock.asyncTicks(); + ticks_t now = g_clock.ticks(); - if(now - lastUpdate < 300) + if(now - lastUpdate < POLL_DELAY) return; + lastUpdate = now; for(auto it = m_sources.begin(); it != m_sources.end();) { @@ -133,8 +113,6 @@ void SoundManager::update() void SoundManager::preload(const std::string& filename) { - std::lock_guard lock(m_mutex); - auto it = m_buffers.find(filename); if(it != m_buffers.end()) return; @@ -152,16 +130,12 @@ void SoundManager::preload(const std::string& filename) void SoundManager::enableSound(bool enable) { - std::lock_guard lock(m_mutex); - if(!isAudioEnabled()) return; } void SoundManager::play(const std::string& filename) { - std::lock_guard lock(m_mutex); - if(!m_soundEnabled) return; @@ -179,8 +153,6 @@ void SoundManager::play(const std::string& filename) void SoundManager::enableMusic(bool enable) { - std::lock_guard lock(m_mutex); - if(!isAudioEnabled()) return; @@ -194,8 +166,6 @@ void SoundManager::enableMusic(bool enable) void SoundManager::playMusic(const std::string& filename, bool fade) { - std::lock_guard lock(m_mutex); - if(m_currentMusic == filename && m_musicSource) return; m_currentMusic = filename; @@ -211,7 +181,7 @@ void SoundManager::playMusic(const std::string& filename, bool fade) void SoundManager::stopMusic(float fadetime) { - std::lock_guard lock(m_mutex); + } SoundSourcePtr SoundManager::createSoundSource(const std::string& filename) diff --git a/src/framework/sound/soundmanager.h b/src/framework/sound/soundmanager.h index 3d47f838..5e449076 100644 --- a/src/framework/sound/soundmanager.h +++ b/src/framework/sound/soundmanager.h @@ -28,16 +28,15 @@ class SoundManager { enum { - MAX_CACHE_SIZE = 10000000 + MAX_CACHE_SIZE = 100000, + POLL_DELAY = 300 }; public: void init(); void terminate(); - void audioThread(); - - void update(); + void poll(); void preload(const std::string& filename); @@ -62,9 +61,6 @@ private: StreamSoundSourcePtr m_musicSource; ALCdevice *m_device; ALCcontext *m_context; - std::thread m_thread; - std::atomic m_run; - std::recursive_mutex m_mutex; Boolean m_musicEnabled; Boolean m_soundEnabled; std::string m_currentMusic; diff --git a/tools/pkgs/makeotc b/tools/pkgs/makeotc index eaf9543e..6c7bdc21 100755 --- a/tools/pkgs/makeotc +++ b/tools/pkgs/makeotc @@ -1,12 +1,23 @@ #!/bin/bash -# generates a otclient zip package for win32 +# generates otclient zip package for win32 # by edubart :) -protocol=860 +# TODO: the following options +# --gitroot - clone a different url, the default is git://github.com/edubart/otclient.git +# --platform - compile for i486-mingw32, i586-msvc-mingw32 or linux +# --branch - use sources from a specific branch, the default is master +# --name - change .exe and folder name, the default is otclient +# --protocol - game protocol, the default is 860 +# --suffix - override suffix, the default is the date +# --copy-tibiafiles - copy Tibia.spr and Tibia.dat from folder +# --github-upload - upload the zip to github +# --scp-upload - upload the zip to a shell via scp + gitroot="git://github.com/edubart/otclient.git" -gitname="otclient" -mingw32="i486-mingw32" -spr_folder="$HOME/projects/otclient/modules/game_tibiafiles" +name="otclient" +protocol=860 +platform="i486-mingw32" +tibiafiles_folder="$HOME/projects/otclient/modules/game_tibiafiles" upload_to="root@myserver.com:/var/www/downloads/" pkg_suffix="-snapshot-`date +%Y%m%d`-protocol${protocol}-win32" use_spr=false @@ -14,12 +25,12 @@ upload=false make_jobs=8 srcdir=`pwd` -if [ -d $gitname ]; then - cd $gitname +if [ -d $name ]; then + cd $name git pull || exit else - git clone $gitroot || exit - cd $gitname + git clone $gitroot $name || exit + cd $name fi gitdir=`pwd` @@ -32,17 +43,17 @@ else mkdir -p build cd build - cmake -DCMAKE_TOOLCHAIN_FILE=$gitdir/src/framework/cmake/${mingw32}_toolchain.cmake \ + cmake -DCMAKE_TOOLCHAIN_FILE=$gitdir/src/framework/cmake/${platform}_toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_REVISION=$revision \ -DPROTOCOL=$protocol \ .. || exit fi -make -j${make_jobs} || exit +make "-j${make_jobs}" || exit -pkgdir="$gitname$pkg_suffix" +pkgdir="$name$pkg_suffix" pkgzip="$pkgdir.zip" cd $srcdir @@ -51,8 +62,8 @@ mkdir $pkgdir cd $pkgdir cp -R $gitdir/modules . -cp $gitdir/build/$gitname.exe $gitname.exe -cp $gitdir/build/$gitname.map $gitname.map +cp $gitdir/build/*.exe . +cp $gitdir/build/*.map . cp $gitdir/LICENSE . cp $gitdir/README.rdoc .