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_surface_set_clip(lua_State *L) { THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L); THClipRect rcClip; rcClip.x = static_cast<THClipRect::xy_t>(luaL_checkinteger(L, 2)); rcClip.y = static_cast<THClipRect::xy_t>(luaL_checkinteger(L, 3)); rcClip.w = static_cast<THClipRect::wh_t>(luaL_checkinteger(L, 4)); rcClip.h = static_cast<THClipRect::wh_t>(luaL_checkinteger(L, 5)); if(lua_toboolean(L, 6) != 0) { THClipRect rcExistingClip; pCanvas->getClipRect(&rcExistingClip); IntersectTHClipRect(rcClip, rcExistingClip); } pCanvas->setClipRect(&rcClip); lua_settop(L, 1); return 1; }