static int l_soundfx_play(lua_State *L) { THSoundEffects *pEffects = luaT_testuserdata<THSoundEffects>(L); lua_settop(L, 5); lua_getfenv(L, 1); lua_pushliteral(L, "archive"); lua_rawget(L, 6); THSoundArchive *pArchive = (THSoundArchive*)lua_touserdata(L, 7); if(pArchive == NULL) { return 0; } // l_soundarc_checkidx requires the archive at the bottom of the stack lua_replace(L, 1); size_t iIndex = l_soundarc_checkidx(L, 2, pArchive); if(iIndex == pArchive->getSoundCount()) return 2; if(lua_isnil(L, 4)) { pEffects->playSound(iIndex, luaL_checknumber(L, 3)); } else { pEffects->playSoundAt(iIndex, luaL_checknumber(L, 3), luaL_checkint(L, 4), luaL_checkint(L, 5)); } lua_pushboolean(L, 1); return 1; }
void THAnimation::drawMorph(THRenderTarget* pCanvas, int iDestX, int iDestY) { if(AreFlagsSet(m_iFlags, THDF_Alpha50 | THDF_Alpha75)) return; if(!m_pManager) return; iDestX += m_iX; iDestY += m_iY; if(m_iSoundToPlay) { THSoundEffects *pSounds = THSoundEffects::getSingleton(); if(pSounds) pSounds->playSoundAt(m_iSoundToPlay, iDestX, iDestY); m_iSoundToPlay = 0; } THClipRect oClipRect; pCanvas->getClipRect(&oClipRect); THClipRect oMorphRect; CalculateMorphRect(oClipRect, oMorphRect, iDestY + m_pMorphTarget->m_iX, iDestY + m_pMorphTarget->m_iY + 1); pCanvas->setClipRect(&oMorphRect); m_pManager->drawFrame(pCanvas, m_iFrame, m_oLayers, iDestX, iDestY, m_iFlags); CalculateMorphRect(oClipRect, oMorphRect, iDestY + m_pMorphTarget->m_iY, iDestY + m_pMorphTarget->m_iSpeedX); pCanvas->setClipRect(&oMorphRect); m_pManager->drawFrame(pCanvas, m_pMorphTarget->m_iFrame, m_pMorphTarget->m_oLayers, iDestX, iDestY, m_pMorphTarget->m_iFlags); pCanvas->setClipRect(&oClipRect); }
void THAnimation::draw(THRenderTarget* pCanvas, int iDestX, int iDestY) { if(AreFlagsSet(m_iFlags, THDF_Alpha50 | THDF_Alpha75)) return; iDestX += m_iX; iDestY += m_iY; if(m_iSoundToPlay) { THSoundEffects *pSounds = THSoundEffects::getSingleton(); if(pSounds) pSounds->playSoundAt(m_iSoundToPlay, iDestX, iDestY); m_iSoundToPlay = 0; } if(m_pManager) { if(m_iFlags & THDF_Crop) { THClipRect rcOld, rcNew; pCanvas->getClipRect(&rcOld); rcNew.y = rcOld.y; rcNew.h = rcOld.h; rcNew.x = iDestX + (m_iCropColumn - 1) * 32; rcNew.w = 64; IntersectTHClipRect(rcNew, rcOld); pCanvas->setClipRect(&rcNew); m_pManager->drawFrame(pCanvas, m_iFrame, m_oLayers, iDestX, iDestY, m_iFlags); pCanvas->setClipRect(&rcOld); } else m_pManager->drawFrame(pCanvas, m_iFrame, m_oLayers, iDestX, iDestY, m_iFlags); } }
static int l_soundfx_play(lua_State *L) { THSoundEffects *pEffects = luaT_testuserdata<THSoundEffects>(L); lua_settop(L, 7); lua_getfenv(L, 1); lua_pushliteral(L, "archive"); lua_rawget(L,8); THSoundArchive *pArchive = (THSoundArchive*)lua_touserdata(L, 9); if(pArchive == nullptr) { return 0; } // l_soundarc_checkidx requires the archive at the bottom of the stack lua_replace(L, 1); size_t iIndex = l_soundarc_checkidx(L, 2, pArchive); if(iIndex == pArchive->getSoundCount()) return 2; if(lua_isnil(L, 4)) { pEffects->playSound(iIndex, luaL_checknumber(L, 3)); } else { pEffects->playSoundAt(iIndex, luaL_checknumber(L, 3), static_cast<int>(luaL_checkinteger(L, 4)), static_cast<int>(luaL_checkinteger(L, 5))); } //SDL SOUND_OVER Callback Timer: //6: unusedPlayedCallbackID if(!lua_isnil(L, 6)) { //7: Callback delay int iPlayedCallbackDelay = 0; //ms if(!lua_isnil(L, 7)) iPlayedCallbackDelay = static_cast<int>(luaL_checknumber(L, 7)); if(m_iPlayedSoundCallbackIDsPointer == sizeof(m_a_iPlayedSoundCallbackIDs)) m_iPlayedSoundCallbackIDsPointer = 0; m_a_iPlayedSoundCallbackIDs[m_iPlayedSoundCallbackIDsPointer] = static_cast<int>(luaL_checkinteger(L, 6)); size_t interval = pArchive->getSoundDuration(iIndex) + iPlayedCallbackDelay; SDL_TimerID timersID = SDL_AddTimer(static_cast<Uint32>(interval), played_sound_callback, &(m_a_iPlayedSoundCallbackIDs[m_iPlayedSoundCallbackIDsPointer])); m_mapSoundTimers.insert(std::pair<int, SDL_TimerID>(m_a_iPlayedSoundCallbackIDs[m_iPlayedSoundCallbackIDsPointer], timersID)); m_iPlayedSoundCallbackIDsPointer++; } lua_pushboolean(L, 1); return 1; }
void THAnimation::drawChild(THRenderTarget* pCanvas, int iDestX, int iDestY) { if(AreFlagsSet(m_iFlags, THDF_Alpha50 | THDF_Alpha75)) return; if(AreFlagsSet(m_pParent->m_iFlags, THDF_Alpha50 | THDF_Alpha75)) return; int iX = 0, iY = 0; m_pParent->getMarker(&iX, &iY); iX += m_iX + iDestX; iY += m_iY + iDestY; if(m_iSoundToPlay) { THSoundEffects *pSounds = THSoundEffects::getSingleton(); if(pSounds) pSounds->playSoundAt(m_iSoundToPlay, iX, iY); m_iSoundToPlay = 0; } if(m_pManager) m_pManager->drawFrame(pCanvas, m_iFrame, m_oLayers, iX, iY, m_iFlags); }