bool nobBaseMilitary::CallDefender(nofAttacker* attacker) { // Ist noch ein Verteidiger draußen (der z.B. grad wieder reingeht? if(defender_) { // Dann nehmen wir den, müssen ihm nur den neuen Angreifer mitteilen defender_->NewAttacker(attacker); // Leute, die aus diesem Gebäude zum Angriff/aggressiver Verteidigung rauskommen wollen, // blocken CancelJobs(); return true; } // ansonsten einen neuen aus dem Gebäude holen else if((defender_ = ProvideDefender(attacker))) { // Leute, die aus diesem Gebäude zum Angriff/aggressiver Verteidigung rauskommen wollen, // blocken CancelJobs(); // Soldat muss noch rauskommen AddLeavingFigure(defender_); return true; } else { // Gebäude ist leer, dann kann es erobert werden return false; } }
nofDefender* nobMilitary::ProvideDefender(nofAttacker* const attacker) { // Überhaupos Soldaten da? if(troops.empty()) { /// Soldaten, die noch auf Mission gehen wollen, canceln und für die Verteidigung mit einziehen CancelJobs(); // Nochmal versuchen if(troops.empty()) return NULL; } nofPassiveSoldier* soldier = ChooseSoldier(); // neuen Verteidiger erzeugen nofDefender* defender = new nofDefender(soldier, attacker); // aus der Liste entfernen troops.erase(soldier); soldier->LeftBuilding(); // und vernichten soldier->Destroy(); delete soldier; return defender; }
bool CAnimationSpooler::Render() { if( !m_bIsAnimating ) return false; if( !m_bIsInitialized ) return false; // Get render target HRESULT Hr; LPDIRECT3DSURFACE9 p3DTargetSurface; Hr = m_p3DDevice->GetRenderTarget(0, &p3DTargetSurface); if( FAILED(Hr) ) return false; CSafeRelease<IDirect3DSurface9> RefTargetSurface = p3DTargetSurface; // Copy backdrop Hr = m_p3DDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L); Hr = m_p3DDevice->UpdateSurface(m_p3DBackSurface, NULL, p3DTargetSurface, NULL); // Here begins the rendering loop. Hr = m_p3DDevice->BeginScene(); if( FAILED(Hr) ) return false; int nAnimated = 0; DWORD dwTick = ::timeGetTime(); for( int i = 0; i < m_aJobs.GetSize(); i++ ) { const CDxAnimationUI* pJob = static_cast<CDxAnimationUI*>(m_aJobs[i]); if( dwTick < pJob->dwStartTick ) continue; DWORD dwTickNow = MIN(dwTick, pJob->dwStartTick + pJob->dwDuration); switch( pJob->AnimType ) { case UIANIMTYPE_FLAT: RenderJob_Flat(pJob, p3DTargetSurface, dwTickNow); break; } if( dwTick < pJob->dwStartTick + pJob->dwDuration ) nAnimated++; } m_p3DDevice->EndScene(); m_p3DDevice->Present(NULL, NULL, NULL, NULL); // No more frames to animate? if( nAnimated == 0 ) CancelJobs(); return true; }
void CMarkWatchedQueue::OnJobComplete(unsigned int jobID, bool success, CJob *job) { if (success) { if (QueueEmpty()) { CUtil::DeleteVideoDatabaseDirectoryCache(); CGUIMessage msg(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_UPDATE); g_windowManager.SendThreadMessage(msg); } return CJobQueue::OnJobComplete(jobID, success, job); } CancelJobs(); }
CJobQueue::~CJobQueue() { CancelJobs(); }
CAnimationSpooler::~CAnimationSpooler() { CancelJobs(); }