Ejemplo n.º 1
0
/**
 * Resets the simulation to the initial conditions.
 * This especially involves the PhysicalSimulationAlgorithm and updating
 * the CollisionManager.
 *
 * @return true if successful.
 */
bool PhysicsManager::resetSimulation() {
	TRACE("PhysicsManager::resetSimulation");
	
	if(mDisablePhysics->get()) {
		//keep simulation time
		
		//reset current time
		mCurrentRealTime->set(0.0);
		return true;
	}

	bool measurePerformance = Core::getInstance()->isPerformanceMeasuringEnabled();

	QTime time;

	if(measurePerformance) {
		time.start();
	}

	bool resetOk = true;
	if(mPhysicalSimulationAlgorithm == 0) {
		Core::log("PhyiscsManager: PhysicalSimulationAlgorithm is NULL.");
		return false;
	}

	QMutexLocker resetMutexLocker(&mResetMutex);

	clearPhysics();

	mResetSettingsEvent->trigger();
	mResetSettingsTerminatedEvent->trigger();

	mPhysicalSimulationAlgorithm->resetPhysics();
	for(int i = 0; i < mSimObjects.size(); i++) {
		mSimObjects.at(i)->setup();
	}

	if(mPhysicalSimulationAlgorithm->finalizeSetup() == false) {
		Core::log("PhysicsManager: Problems finalizing setup in physical"
			" simulation algorithm.");
		resetOk = false;
	}

	Physics::getCollisionManager()->updateCollisionModel();

	if(resetOk) {
		mInitialResetDone = true;
	}

	if(measurePerformance) {
		mResetDuration->set(time.elapsed());
		mCurrentRealTime->set(0.0);
	}
	mCurrentSimulationTime->set(0.0);

	mStopwatch.start();

	return resetOk;
}
Ejemplo n.º 2
0
Map::~Map ()
{
	Commands.removeCommand(CMD_MAP_DEBUG);
	Commands.removeCommand(CMD_MAP_PAUSE);
	Commands.removeCommand(CMD_MAP_RESTART);
	Commands.removeCommand(CMD_KILL);
	Commands.removeCommand(CMD_FINISHMAP);
	clearPhysics();
}
Ejemplo n.º 3
0
int calc_schizo( Uint32 steps )
{
	//Finish?
	if ( spGetInput()->button[SP_BUTTON_START] )
		return 1;

	//Ingame controls
	if (do_control_stuff()) //result is non zero => level change
		levelFade = -FADE_TIME;
		
	if ( levelFade > 0 ) //Fade in
	{
		levelFade -= steps;
		if (levelFade < 0)
			levelFade = 0;
		else
			return 0;
	}

	if ( levelFade < 0 ) //Fade out
	{
		levelFade += steps;
		if (levelFade > 0)
		{
			levelFade = FADE_TIME;
			clearPhysics();
			deleteLevel((*levelPointer));		
			(*levelPointer) = loadLevel(get_saved_level());
			createPhysicsFromLevel((*levelPointer));
		}
		else
			return 0;
	}
	
	//Physics
	int i;
	for (i = 0; i < steps; i++)
		doPhysics(*levelPointer);

	//Visualization stuff
	rotation+=steps*16;
	updateLevelObjects();
	updateLevelSprites((*levelPointer),steps);
	calcCamera((*levelPointer),steps);
	return 0;
}
Ejemplo n.º 4
0
void Map::resetCurrentMap ()
{
	_timeManager.reset();
	if (!_name.empty()) {
		GameEvent.closeMap();
		info(LOG_MAP, "reset map: " + _name);
	}
	_pointCount = 0;
	_traceCount = 0;
	_gamePoints = 0;
	_finishPoints = 0;
	_referenceTime = 0;
	_warmupPhase = 0;
	_restartDue = 0;
	_pause = false;
	_transferedPackages = 0;
	_transferedPackageLimit = 0;
	_nextFriendlyNPCSpawn = 0;
	_spawnFlyingNPCTime = 0;
	_activateflyingNPC = false;
	_spawnFishNPCTime = 0;
	_initialGeyserDelay = 0;
	_activateFishNPC = false;
	_mapRunning = false;
	_wind = 0.0f;
	_width = 0;
	_height = 0;
	_gravity = 0.0f;
	_time = 0;
	_physicsTime = 0;
	_waterHeight = 0.0f;
	_waterChangeSpeed = 0.0f;
	_waterRisingDelay = 0;
	_waterFallingDelay = 0;
	_allPlayers = 0;
	_entityRemovalAllowed = true;
	clearPhysics();
	if (!_name.empty())
		info(LOG_MAP, "done with resetting: " + _name);
	_name.clear();
}
Ejemplo n.º 5
0
int main( int argc, char **argv )
{
	//sparrow3D Init
	spInitCore();
	
	//spSetDefaultWindowSize(800,480);

	//Setup
	#if (defined ZOOMUP || defined ZOOMDOWN) && !(defined ZOOMUP && defined ZOOMDOWN)
		real_screen = spCreateDefaultWindow();
		resize( real_screen->w, real_screen->h );
	#else
		screen = spCreateDefaultWindow();
		resize( screen->w, screen->h );
	#endif

	//Setting the first level
	levelPointer = getLevelOverPointer();
	if (argc < 2)
		sprintf(get_saved_level(),"./level/tile_test.tmx");
	else
		sprintf(get_saved_level(),"%s",argv[1]);
	levelFade = FADE_TIME;
	(*levelPointer) = loadLevel(get_saved_level());
	createPhysicsFromLevel((*levelPointer));
	
	//All glory the main loop
	spLoop( draw_schizo, calc_schizo, 10, resize, NULL );

	//Winter Wrap up, Winter Wrap up …
	clearPhysics();
	deleteLevel((*levelPointer));
	spFontDelete( font );
	spDeleteSurface(screen);
	spQuitCore();
	return 0;
}