Skip to content

Commit

Permalink
feat: support play listener in swiftly extension
Browse files Browse the repository at this point in the history
  • Loading branch information
samyycX committed Jan 25, 2025
1 parent 3c2c563 commit 03f7ba8
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
20 changes: 20 additions & 0 deletions swext/src/api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
bool g_Initialized = false;
std::vector<luabridge::LuaRef> g_PlayStartListeners;
std::vector<luabridge::LuaRef> g_PlayEndListeners;
std::vector<luabridge::LuaRef> g_PlayListeners;

void Audio::SetPlayerHearing(int slot, bool hearing)
{
Expand Down Expand Up @@ -72,6 +73,18 @@ void Audio::UnregisterPlayEndListener(luabridge::LuaRef handler)
m_PlayEndListeners.erase(std::remove(m_PlayEndListeners.begin(), m_PlayEndListeners.end(), handler), m_PlayEndListeners.end());
g_PlayEndListeners.erase(std::remove(g_PlayEndListeners.begin(), g_PlayEndListeners.end(), handler), g_PlayEndListeners.end());
}
void Audio::RegisterPlayListener(luabridge::LuaRef handler)
{
m_PlayListeners.push_back(handler);
g_PlayListeners.push_back(handler);
}

void Audio::UnregisterPlayListener(luabridge::LuaRef handler)
{
m_PlayListeners.erase(std::remove(m_PlayListeners.begin(), m_PlayListeners.end(), handler), m_PlayListeners.end());
g_PlayListeners.erase(std::remove(g_PlayListeners.begin(), g_PlayListeners.end(), handler), g_PlayListeners.end());
}

void Audio::SetPlayer(int slot)
{
m_pAudio->SetPlayer(slot);
Expand Down Expand Up @@ -109,3 +122,10 @@ void Audio::OnPlayEnd(int slot)
listener(slot);
}
}
void Audio::OnPlay(int slot, int progress)
{
for (auto &listener : g_PlayListeners)
{
listener(slot, progress);
}
}
6 changes: 6 additions & 0 deletions swext/src/api.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
extern bool g_Initialized;
extern std::vector<luabridge::LuaRef> g_PlayStartListeners;
extern std::vector<luabridge::LuaRef> g_PlayEndListeners;
extern std::vector<luabridge::LuaRef> g_PlayListeners;

class Audio
{
Expand All @@ -26,6 +27,7 @@ class Audio
{
m_pAudio->RegisterPlayStartListener(&Audio::OnPlayStart);
m_pAudio->RegisterPlayEndListener(&Audio::OnPlayEnd);
m_pAudio->RegisterPlayListener(&Audio::OnPlay);
g_Initialized = true;
}
}
Expand All @@ -47,17 +49,21 @@ class Audio
void UnregisterPlayStartListener(luabridge::LuaRef handler);
void RegisterPlayEndListener(luabridge::LuaRef handler);
void UnregisterPlayEndListener(luabridge::LuaRef handler);
void RegisterPlayListener(luabridge::LuaRef handler);
void UnregisterPlayListener(luabridge::LuaRef handler);
void SetPlayer(int slot);
void Unload();

protected:
static void OnPlayStart(int slot);
static void OnPlayEnd(int slot);
static void OnPlay(int slot, int progress);

private:
IAudio *m_pAudio;
std::vector<luabridge::LuaRef> m_PlayStartListeners;
std::vector<luabridge::LuaRef> m_PlayEndListeners;
std::vector<luabridge::LuaRef> m_PlayListeners;
};

#endif
2 changes: 2 additions & 0 deletions swext/src/entrypoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ bool AudioExtension::OnPluginLoad(std::string pluginName, void *pluginState, Plu
.addFunction("UnregisterPlayStartListener", &Audio::UnregisterPlayStartListener)
.addFunction("RegisterPlayEndListener", &Audio::RegisterPlayEndListener)
.addFunction("UnregisterPlayEndListener", &Audio::UnregisterPlayEndListener)
.addFunction("RegisterPlayListener", &Audio::RegisterPlayListener)
.addFunction("UnregisterPlayListener", &Audio::UnregisterPlayListener)
.addFunction("SetPlayer", &Audio::SetPlayer)
.addFunction("Unload", &Audio::Unload)
.endClass();
Expand Down

0 comments on commit 03f7ba8

Please sign in to comment.