예제 #1
0
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;
    }
}
예제 #2
0
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;
}
예제 #3
0
	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;
	}
예제 #4
0
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();
}
예제 #5
0
CJobQueue::~CJobQueue()
{
  CancelJobs();
}
예제 #6
0
	CAnimationSpooler::~CAnimationSpooler()
	{
		CancelJobs();
	}