void GraphicsEngine::Render()
{
	while (DoCycle() && PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
    {
		TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
    
	if (DoCycle())
	{
		// Clear the backbuffer to a black color
		m_pDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0 );
		m_pDevice->Clear( 0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0 );

		// Begin the scene
		if( SUCCEEDED( m_pDevice->BeginScene() ) )
		{
			m_scene.Update();
			m_scene.Render();

			// End the scene
			m_pDevice->EndScene();
		}

		// Present the backbuffer contents to the display
		m_pDevice->Present( NULL, NULL, NULL, NULL );
	}
}
void MissileLauncher::StopCycle(bool abort)
{
	// Do one last cycle:
	DoCycle();

	Notify_OnGodmaShipEffect shipEff;
	shipEff.itemID = m_Item->itemID();
	shipEff.effectID = effectMissileLaunching;
	shipEff.when = Win32TimeNow();
	shipEff.start = 0;
	shipEff.active = 0;

	PyList* env = new PyList;
	env->AddItem(new PyInt(shipEff.itemID));
	env->AddItem(new PyInt(m_Ship->ownerID()));
	env->AddItem(new PyInt(m_Ship->itemID()));
	env->AddItem(new PyInt(m_targetID));
	env->AddItem(new PyNone);
	env->AddItem(new PyNone);
	env->AddItem(new PyInt(shipEff.effectID));

	shipEff.environment = env;
	shipEff.startTime = shipEff.when;
	shipEff.duration = 1.0;		//m_ActiveModuleProc->GetRemainingCycleTimeMS();		// At least, I'm assuming this is the remaining time left in the cycle
	shipEff.repeat = new PyInt(0);
	shipEff.randomSeed = new PyNone;
	shipEff.error = new PyNone;

	PyList* events = new PyList;
	events->AddItem(shipEff.Encode());

	Notify_OnMultiEvent multi;
	multi.events = events;

	PyTuple* tmp = multi.Encode();

	m_Ship->GetOperator()->SendDogmaNotification("OnMultiEvent", "clientID", &tmp);

	// Create Special Effect:
	m_Ship->GetOperator()->GetDestiny()->SendSpecialEffect
	(
		m_Ship,
		m_Item->itemID(),
		m_Item->typeID(),
		m_targetID,
		m_chargeRef->itemID(),
		"effects.MissileDeployment",
		1,
		0,
		0,
		1.0,
		0
	);

	m_ActiveModuleProc->DeactivateCycle();
}
Beispiel #3
0
double sdgEngine::DoOptimize()
{
    float dist_pace = sdg_params::SDG_DIST_TEMP;
    float vol_pace = sdg_params::SDG_VOL_TEMP;

    if (_nDist == 0)
    {
        return 0;
    }
    unsigned int i, j;

    double score;
    double *d = new double[_distances.size()];
    double *v = new double[_volumes.size()];
    for (i = 0; i < _distances.size(); ++i)
    {
        d[i] = _distances[i].Measure();
    }

    for (i = 0; i < _volumes.size(); ++i)
    {
        v[i] = _volumes[i].Measure();
    }

    for (int i = 0; i < sdg_params::SDG_NCYCLES; ++i)
    {
        DoCycle(dist_pace, vol_pace);
        score = 0;
        for (j = 0; j < _distances.size(); ++j)
        {
            d[j] = _distances[j].Measure();
            score += _distances[j].Score();
        }
        for (j = 0; j < _volumes.size(); ++j)
        {
            v[j] = _volumes[j].Measure();
        }
        dist_pace -= sdg_params::SDG_ANNEAL_DIST;
        vol_pace -= sdg_params::SDG_ANNEAL_VOL;
    }
    delete[] d;
    delete[] v;
    return score;
}