コード例 #1
0
ファイル: Strategy.cpp プロジェクト: xinderuila1/speed-dream
void SimpleStrategy::updateFuelStrategy(tCarElt* car, tSituation *s)
{
    double requiredfuel;

    /* Required additional fuel for the rest of the race. +1 because
       the computation happens right after crossing the start line. */

    //requiredfuel = ((car->_remainingLaps + 1) - ceil(car->_fuel/fuelPerLap))*fuelPerLap;
    requiredfuel = ((car->_remainingLaps + 1) *fuelPerLap) - ceil(car->_fuel);

    if (!m_checkFuel && requiredfuel <= 0.0f && car->_remainingLaps <= 5)
    {
        // We have enough fuel to end the race, no further stop required.
        GfOut("%s No Pitstop required > carFuel:%.2f, remLap:%d\n", car->_name,car->_fuel, car->_remainingLaps);
        m_checkFuel = true;
        return;
    }

    // We don't have enough fuel to end the race need at least one stop.
    if (!m_checkFuel && requiredfuel > 0.0f && car->_fuel < fuelPerLap * 3.0)
    {
        GfOut("%s Pitstop needed to refuel >> reqFuel: %.2f, carFuel: %.2f, remLap: %d\n",
              car->_name, requiredfuel, car->_fuel, car->_remainingLaps);
        m_checkFuel = true;
    }

    return;
}
コード例 #2
0
ファイル: grsound.cpp プロジェクト: fre13131b/TORCAR
void 
grShutdownSound(int ncars)
{
    GfOut("-- grShutdownSound\n");

	if (sound_mode == DISABLED) {
		return;
	}

	int i;
	for (i = 0; i < ncars; i++) {
		delete car_sound_data[i];
	}
	
	delete [] car_sound_data;
	
    if (!soundInitialized) {
		return;
    }
    soundInitialized = 0;

	delete sound_interface;

    if (__slPendingError) {
		GfOut("!!! error ignored: %s\n", __slPendingError);
		__slPendingError = 0;	/* ARG!!! ugly ugly bad thing... but should not occur anymore now */
    }
}
コード例 #3
0
ファイル: OsgScenery.cpp プロジェクト: rongzhou/speed-dreams
bool SDScenery::LoadTrack(std::string strTrack)
{
    char buf[256];
    GfOut("Chemin Track : %s\n", strTrack.c_str());
    osgLoader loader;
    GfOut("Chemin Textures : %s\n", _strTexturePath.c_str());
    loader.AddSearchPath(_strTexturePath);

    std::string strTPath = GetDataDir();
    snprintf(buf, 256, "data/textures/");
    strTPath += buf;
    loader.AddSearchPath(strTPath);

    osg::Node *pTrack = loader.Load3dFile(strTrack, false);

    if (pTrack)
    {
        pTrack->getOrCreateStateSet()->setRenderBinDetails(TRACKBIN,"RenderBin");
        _scenery->addChild(pTrack);
#if 0
        std::string Tpath = GetLocalDir();
        Tpath = Tpath+"/track.osg";
        osgDB::writeNodeFile( *pTrack, Tpath);
#endif
    }
    else
        return false;

    return true;
}
コード例 #4
0
//==========================================================================*
// Is pit available?
//--------------------------------------------------------------------------*
bool TBaseStrategy::IsPitFree()
{
    bool IsFree = RtTeamIsPitFree(oDriver->oTeamIndex);
	if (IsFree)
		GfOut("#%s pit is free (%d)\n",oDriver->GetBotName(),oDriver->oTeamIndex);
	else
		GfOut("#%s pit is locked (%d)\n",oDriver->GetBotName(),oDriver->oTeamIndex);
    return IsFree;
}
コード例 #5
0
ファイル: grmain.cpp プロジェクト: fre13131b/TORCAR
void
shutdownCars(void)
{
	int i;

	GfOut("-- shutdownCars\n");
	grShutdownSound(grNbCars);
	if (grNbCars) {
		grShutdownBoardCar();
		grShutdownSkidmarks();
		grShutdownSmoke();
		grShudownCarlight();
		/* Delete ssg objects */
		CarsAnchor->removeAllKids();
		ShadowAnchor->removeAllKids();
		for (i = 0; i < grNbCars; i++) {
			ssgDeRefDelete(grCarInfo[i].envSelector);
			ssgDeRefDelete(grCarInfo[i].shadowBase);
			ssgDeRefDelete(grCarInfo[i].wheelTexture);
			if (grCarInfo[i].driverSelectorinsg == false) {
				delete grCarInfo[i].driverSelector;
			}
		}

		PitsAnchor->removeAllKids();
		ThePits = 0;
		free(grCarInfo);
	}

	GfParmReleaseHandle(grHandle);

	for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
		grScreens[i]->setCurrentCar(NULL);
	}
}
コード例 #6
0
ファイル: windowsspec.cpp プロジェクト: COHRINT/cuTORCS
/*
* Function
*	windowsModUnloadList
*
* Description
*	Unload the modules of a list
*
* Parameters
*	modlist	list of modules to unload
*
* Return
*	0	Ok
*	-1	Error
*
* Remarks
*	
*/
static int windowsModUnloadList(tModList **modlist)
{
	tModList	*curMod;
	tModList	*nextMod;
    
	curMod = *modlist;
	if (curMod == 0) {
		return 0;
	}
	nextMod = curMod->next;
	do {
		curMod = nextMod;
		nextMod = curMod->next;
		GfOut("<<< %s unloaded <<<\n", curMod->sopath);
		FreeLibrary(curMod->handle);

		int i;
		for (i = 0; i < MAX_MOD_ITF; i++) {
			if (curMod->modInfo[i].name) {
				free(curMod->modInfo[i].name);
				free(curMod->modInfo[i].desc);
			}
		}

		free(curMod->sopath);
		free(curMod);
	} while (curMod != *modlist);
    
	*modlist = (tModList *)NULL;
	return 0;
}
コード例 #7
0
ファイル: grsmoke.cpp プロジェクト: chagge/gym_torcs
/** remove the smoke information for a car */
void grShutdownSmoke ()
{
    tgrSmoke *tmp, *tmp2;

    GfOut("-- grShutdownSmoke\n");

    if (!grSmokeMaxNumber) {
		return;
    }

    SmokeAnchor->removeAllKids();
    if (smokeManager) {
		tmp = smokeManager->smokeList;
		while( tmp!=NULL)
			{
				tmp2 = tmp->next;
				/* SmokeAnchor->removeKid(tmp->smoke); */
				free(tmp);
				tmp = tmp2;
			}
		smokeManager->smokeList = NULL;
		free(timeSmoke);
		free(timeFire);
		free(smokeManager);
		smokeManager = 0;
		smokeManager = NULL;
		timeSmoke = NULL;
		timeFire=NULL;
    }
}
コード例 #8
0
ファイル: engine.cpp プロジェクト: rongzhou/speed-dreams
void
SimEngineShutdown(tCar *car)
{
    free(car->engine.curve.data);
    //GfOut("#Total Time CalculateTorque  used: %g sec\n",SimTicks/1000.0);
    GfOut("#Total Time CalculateTorque2 used: %g sec\n",SimTicks2/1000.0);  // Profiling test
}
コード例 #9
0
void ClothoidPath::OptimiseLine( const CarModel& cm, int idx, int step,	double hLimit, PathPt* l3, const PathPt* l2, const PathPt* l4 )
{
	LinearRegression	l;

	const int NSEG = m_pTrack->GetSize();

	int i = (idx + NSEG - step) % NSEG;
	while( m_pPath[i].h > hLimit )
	{
		l.Sample( m_pPath[i].pt.GetXY() );
		i = (i + NSEG - step) % NSEG;
	}

	l.Sample( m_pPath[i].pt.GetXY() );

	i = idx;
	while( m_pPath[i].h > hLimit )
	{
		l.Sample( m_pPath[i].pt.GetXY() );
		i = (i + step) % NSEG;
	}

	l.Sample( m_pPath[i].pt.GetXY() );

    GfOut( "%4d  ", idx );
	Vec2d	p, v;
	l.CalcLine( p, v );

	double	t;
	Utils::LineCrossesLine( l3->Pt().GetXY(), l3->Norm().GetXY(), p, v, t );

	SetOffset( cm, 0, t, l3, l2, l4 );
}
コード例 #10
0
ファイル: telemetry.cpp プロジェクト: COHRINT/cuTORCS
void 
TlmStartMonitoring(const char *filename)
{
    const int BUFSIZE = 1024;
	char	buf[BUFSIZE];
    FILE	*fout;
    FILE	*fcmd;
    tChannel	*curChan;
    int		i;
    
    GfOut("Telemetry: start monitoring\n");

    snprintf(buf, BUFSIZE, "telemetry/%s.cmd", filename);
    fcmd = fopen(buf, "w");
    if (fcmd == NULL) {
	return;
    }
    fprintf(fcmd, "#!/bin/sh\n");
    fprintf(fcmd, "gnuplot -persist > telemetry/%s.png <<!!\n", filename);
    fprintf(fcmd, "#    set yrange [%f:%f]\n", TlmData.ymin, TlmData.ymax);
    fprintf(fcmd, "    set grid\n");
    fprintf(fcmd, "    set size 2.5,1.5\n");
    fprintf(fcmd, "    set terminal png color\n");
    fprintf(fcmd, "    set data style lines\n");
    curChan = TlmData.chanList;
    if (curChan != NULL) {
	i = 2;
	do {
	    curChan = curChan->next;
	    if (i == 2) {
		fprintf(fcmd, "plot 'telemetry/%s.dat' using %d title '%s'", filename, i, curChan->name);
	    } else {
		fprintf(fcmd, ", '' using %d title '%s'", i, curChan->name);
	    }
	    i++;
	} while (curChan != TlmData.chanList);
	fprintf(fcmd, "\n");
    }
    fprintf(fcmd, "!!\n");
    fclose(fcmd);
    
    TlmData.cmdfile = strdup(buf);
    
    snprintf(buf, BUFSIZE, "telemetry/%s.dat", filename);
    fout = TlmData.file = fopen(buf, "w");
    if (fout == NULL) {
	return;
    }
    curChan = TlmData.chanList;
    fprintf(fout, "time");
    if (curChan != NULL) {
	do {
	    curChan = curChan->next;
	    fprintf(fout, "	%s", curChan->name);
	} while (curChan != TlmData.chanList);
	fprintf(fout, "\n");
    }
    
    TlmData.state = 1;
}
コード例 #11
0
ファイル: human.cpp プロジェクト: COHRINT/cuTORCS
/*
 * Function
 *
 *
 * Description
 *	search under drivers/human/tracks/<trackname>/car-<model>-<index>.xml
 *		     drivers/human/car-<model>-<index>.xml
 *		     drivers/human/tracks/<trackname>/car-<model>.xml
 *		     drivers/human/car-<model>.xml
 *
 * Parameters
 *
 *
 * Return
 *
 *
 * Remarks
 *
 */
static void initTrack(int index, tTrack* track, void *carHandle, void **carParmHandle, tSituation *s)
{
	const char *carname;
	const int BUFSIZE = 1024;
	char buf[BUFSIZE];
	char sstring[BUFSIZE];
	tdble fuel;
	int idx = index - 1;

	curTrack = track;

	snprintf(sstring, BUFSIZE, "Robots/index/%d", index);
	snprintf(buf, BUFSIZE, "%sdrivers/human/human.xml", GetLocalDir());
	void *DrvInfo = GfParmReadFile(buf, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);
	carname = "";
	if (DrvInfo != NULL) {
		carname = GfParmGetStr(DrvInfo, sstring, "car name", "");
	}

	*carParmHandle = NULL;
	// If session type is "race" and we have a race setup use it
	if (s->_raceType == RM_TYPE_RACE) {
		*carParmHandle = RtParmReadSetup(RACE, "human", index, track->internalname, carname);
	}

	// If session type is "qualifying" and we have a qualifying setup use it, use qualifying setup as 
	// fallback if not race setup is available
	if (s->_raceType == RM_TYPE_QUALIF || (*carParmHandle == NULL && s->_raceType == RM_TYPE_RACE)) {
		*carParmHandle = RtParmReadSetup(QUALIFYING, "human", index, track->internalname, carname);
	}

	// If we have not yet loaded a setup we have not found a fitting one or want to use the practice setup,
	// so try to load this
	if (*carParmHandle == NULL) {
		*carParmHandle = RtParmReadSetup(PRACTICE, "human", index, track->internalname, carname);
	}

	// Absolute fallback, nothing found
	if (*carParmHandle == NULL) {
		snprintf(sstring, BUFSIZE, "%sdrivers/human/car.xml", GetLocalDir ());
		*carParmHandle = GfParmReadFile(sstring, GFPARM_RMODE_REREAD);
	}


	if (curTrack->pits.type != TR_PIT_NONE) {
		snprintf(sstring, BUFSIZE, "%s/%s/%d", HM_SECT_PREF, HM_LIST_DRV, index);
		HCtx[idx]->NbPitStopProg = (int)GfParmGetNum(PrefHdle, sstring, HM_ATT_NBPITS, (char*)NULL, 0);
		GfOut("Player: index %d , Pits stops %d\n", index, HCtx[idx]->NbPitStopProg);
	} else {
		HCtx[idx]->NbPitStopProg = 0;
	}
	fuel = 0.0008 * curTrack->length * (s->_totLaps + 1) / (1.0 + ((tdble)HCtx[idx]->NbPitStopProg)) + 20.0;
	if (*carParmHandle) {
		GfParmSetNum(*carParmHandle, SECT_CAR, PRM_FUEL, (char*)NULL, fuel);
	}
	Vtarget = curTrack->pits.speedLimit;
	if (DrvInfo != NULL) {
		GfParmReleaseHandle(DrvInfo);
	}
}
コード例 #12
0
ファイル: loadingscreen.cpp プロジェクト: chagge/gym_torcs
/** 
    @ingroup	racemantools
    @param	text	Text to display.
    @return	None.
*/
void
RmLoadingScreenSetText(char *text)
{
    int		i, j;
    
    GfOut("%s\n", text);
    
    if (menuHandle) {
	if (rmTextLines[rmCurText]) {
	    free(rmTextLines[rmCurText]);
	}
	if (text) {
	    rmTextLines[rmCurText] = strdup(text);
	    rmCurText = (rmCurText + 1) % TEXTLINES;
	}
	
	i = rmCurText;
	j = 0;
	do {
	    if (rmTextLines[i]) {
		GfuiLabelSetText(menuHandle, rmTextId[j], rmTextLines[i]);
	    }
	    j++;
	    i = (i + 1) % TEXTLINES;
	} while (i != rmCurText);
	
	GfuiDisplay();
    }
}
コード例 #13
0
ファイル: grutil.cpp プロジェクト: hkeeble/torcs-adaptive
ssgState * grSsgEnvTexState(const char *img)
{
	const int BUFSIZE = 1024;
	char buf[BUFSIZE];
	const char *s;
	grManagedState *st;

	// remove the directory
	s = strrchr(img, '/');
	if (s == NULL) {
		s = img;
	} else {
		s++;
    }

	if (!grGetFilename(s, grFilePath, buf, BUFSIZE)) {
		GfOut("grSsgLoadTexState: File %s not found\n", s);
		return NULL;
    }

	/*st = grGetState(buf);
	if (st != NULL) {
		return (ssgState*)st;
	}*/

	st = new grMultiTexState();
	grSetupState(st, buf);
	st->setTexture(buf);

	return (ssgState*)st;
}
コード例 #14
0
ファイル: grutil.cpp プロジェクト: chagge/gym_torcs
ssgState *
grSsgLoadTexStateEx(char *img, char *filepath, int wrap, int mipmap)
{
	char buf[256];
	char *s;
	grManagedState *st; 

	// remove the directory
	s = strrchr(img, '/');
	if (s == NULL) {
		s = img;
	} else {
		s++;
	}

	if (!grGetFilename(s, filepath, buf)) {
		GfOut("File %s not found\n", s);
		return NULL;
	}

	st = grGetState(buf);
	if (st != NULL) {
		return (ssgState*)st;
	}

	st = grStateFactory();
	grSetupState(st, buf);
	st->setTexture(buf, wrap, wrap, mipmap);

	return (ssgState*)st;
}
コード例 #15
0
/*
 * Function
 *	GfModTerminate
 *
 * Description
 *	Terminate the module with given handle and library file path
 *
 * Parameters
 *	soHandle (in)	handle of the loaded shared library
 *	soPath   (in)	path of the loaded shared library
 *
 * Return
 *	0	if termination succeeded
 *	-1	if any error occured
 *
 * Remarks
 *	
 */
int GfModTerminate(tSOHandle soHandle, const char *soPath)
{
    tfModInfoTerminate fModInfoTerm;	/* Termination function of the module */
    int			termSts = 0;	/* Returned status */
    
    /* Get the module termination function if any :
       1) Try the new sheme (fixed name) */
    if ((fModInfoTerm = (tfModInfoTerminate)dlsym(SOHandle(soHandle), GfModInfoTerminateFuncName)) == 0)
    {
		/* 2) Backward compatibility (dll name + "Shut") */
		char soName[256];
		const char* lastSlash = strrchr(soPath, '/');
		if (lastSlash)
			strcpy(soName, lastSlash+1);
		else
			strcpy(soName, soPath);
		strcpy(&soName[strlen(soName) - SOFileExtLen], "Shut"); /* cut so file ext */
		fModInfoTerm = (tfModInfoTerminate)dlsym(SOHandle(soHandle), soName);
    }

    /* Call the module termination function if any */
    if (fModInfoTerm)
		termSts = fModInfoTerm();
    
    GfOut("Terminated module %s\n", soPath);

    return termSts;
}
コード例 #16
0
/** remove the skidmarks information for a car */
void grShutdownSkidmarks (void)
{
	int i;
	int z;

	GfOut("-- grShutdownSkidmarks\n");

	if (!grSkidMaxStripByWheel) {
		return;
	}

	SkidAnchor->removeAllKids();
	for (z = 0; z < grNbCars; z++) {
		for (i = 0; i<4; i++) {
			free(grCarInfo[z].skidmarks->strips[i].vtx);
			free(grCarInfo[z].skidmarks->strips[i].vta);
			free(grCarInfo[z].skidmarks->strips[i].tex);
			free(grCarInfo[z].skidmarks->strips[i].state);
			free(grCarInfo[z].skidmarks->strips[i].size);
			free(grCarInfo[z].skidmarks->strips[i].clr);
		}
		free(grCarInfo[z].skidmarks);
		grCarInfo[z].skidmarks = NULL;
	}
	skidState = NULL;
}
コード例 #17
0
ファイル: grutil.cpp プロジェクト: chagge/gym_torcs
ssgState * grSsgEnvTexState(char *img)
{
	char buf[256];
	char *s;
	grMultiTexState *st;

	// remove the directory
	s = strrchr(img, '/');
	if (s == NULL) {
		s = img;
	} else {
		s++;
    }

	if (!grGetFilename(s, grFilePath, buf)) {
		GfOut("grSsgLoadTexState: File %s not found\n", s);
		return NULL;
    }

	st = new grMultiTexState;
	grSetupState(st, buf);
	st->setTexture(buf);

	return (ssgState*)st;
}
コード例 #18
0
ファイル: racemain.cpp プロジェクト: hkeeble/torcs-adaptive
int
RePostRace(void)
{
	int curRaceIdx;
	void *results = ReInfo->results;
	void *params = ReInfo->params;

	//ReUpdateStandings();

	curRaceIdx = (int)GfParmGetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_RACE, NULL, 1);
	if (curRaceIdx < GfParmGetEltNb(params, RM_SECT_RACES)) {
		curRaceIdx++;
		GfOut("Race Nb %d\n", curRaceIdx);
		GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_RACE, NULL, curRaceIdx);
		ReUpdateStandings();
		return RM_SYNC | RM_NEXT_RACE;
	}

	ReUpdateStandings();
	GfParmSetNum(results, RE_SECT_CURRENT, RE_ATTR_CUR_RACE, NULL, 1);

	taManager->RaceEnd(); // End of race for TA Manager

	return RM_SYNC | RM_NEXT_STEP;
}
コード例 #19
0
ファイル: telemetry.cpp プロジェクト: rongzhou/speed-dreams
void 
TlmStopMonitoring(void)
{
    char	buf[256];
    
    if (TlmData.state == 1) {
	fclose(TlmData.file);
    }
    TlmData.file = (FILE*)NULL;
    TlmData.state = 0;
    GfOut("Telemetry: stop monitoring\n");

    sprintf(buf, "sh %s", TlmData.cmdfile);
    if(system(buf) < 0)
        GfOut("Telemetry: calling shell script failed");
    free(TlmData.cmdfile);
}
コード例 #20
0
static void
reSelectLoadFile(char *filename)
{
    sprintf(buf, "%sresults/%s/%s", GetLocalDir(), ReInfo->_reFilename, filename);
    GfOut("Loading Saved File %s...\n", buf);
    ReInfo->results = GfParmReadFile(buf, GFPARM_RMODE_STD | GFPARM_RMODE_CREAT);
    ReInfo->_reRaceName = ReInfo->_reName;
    RmShowStandings(ReInfo->_reGameScreen, ReInfo);
}
コード例 #21
0
static void
rmNetworkClientDisconnect(void * /* dummy */)
{
	GfOut("Disconnecting from server\n");
	if (NetGetClient())
		NetGetClient()->Disconnect();

	GfuiScreenActivate(RmRaceSelectMenuHandle);
}
コード例 #22
0
ファイル: strategy.cpp プロジェクト: rongzhou/speed-dreams
bool SimpleStrategy::isPitFree(tCarElt* car)
{
#ifdef SPEED_DREAMS
    bool IsFree = RtTeamIsPitFree(teamIndex);
    if (IsFree)
        GfOut("#%s pit is free (%d)\n",car->_name,teamIndex);
    else
        GfOut("#%s pit is locked (%d)\n",car->_name,teamIndex);
    return IsFree;
#else
    if (car->_pit != NULL) {
        if (car->_pit->pitCarIndex == TR_PIT_STATE_FREE) {
            return true;
        }
    }
    return false;
#endif
}
コード例 #23
0
/* Race Engine Initialization */
void
ReInit(void)
{
	char *dllname;
	char key[256];
	tRmMovieCapture *capture;

	ReShutdown();

	ReInfo = (tRmInfo *)calloc(1, sizeof(tRmInfo));
	ReInfo->s = (tSituation *)calloc(1, sizeof(tSituation));
	ReInfo->modList = &ReRaceModList;

	char buf[1024];
	snprintf(buf, 1024, "%s%s", GetLocalDir(), RACE_ENG_CFG);

	ReInfo->_reParam = GfParmReadFile(buf, GFPARM_RMODE_REREAD | GFPARM_RMODE_CREAT);

	GfOut("Loading Track Loader...\n");
	dllname = GfParmGetStr(ReInfo->_reParam, "Modules", "track", "");
	sprintf(key, "%smodules/track/%s.%s", GetLibDir (), dllname, DLLEXT);
	if (GfModLoad(0, key, &reEventModList)) return;
	reEventModList->modInfo->fctInit(reEventModList->modInfo->index, &ReInfo->_reTrackItf);

	GfOut("Loading Graphic Engine...\n");
	dllname = GfParmGetStr(ReInfo->_reParam, "Modules", "graphic", "");
	sprintf(key, "%smodules/graphic/%s.%s", GetLibDir (), dllname, DLLEXT);
	if (GfModLoad(0, key, &reEventModList)) return;
	reEventModList->modInfo->fctInit(reEventModList->modInfo->index, &ReInfo->_reGraphicItf);

	capture = &(ReInfo->movieCapture);
	if (strcmp(GfParmGetStr(ReInfo->_reParam, RM_SECT_MOVIE_CAPTURE, RM_ATT_CAPTURE_ENABLE, "no"), "no") == 0){
		capture->enabled = 0;
	} else {
		capture->enabled = 1;
		capture->state = 0;
		capture->deltaFrame = 1.0 / GfParmGetNum(ReInfo->_reParam, RM_SECT_MOVIE_CAPTURE, RM_ATT_CAPTURE_FPS, NULL, 1.0);
		capture->outputBase = GfParmGetStr(ReInfo->_reParam, RM_SECT_MOVIE_CAPTURE, RM_ATT_CAPTURE_OUT_DIR, "/tmp");
		capture->deltaSimu = RCM_MAX_DT_SIMU;
	}

	ReInfo->_reGameScreen = ReHookInit();
}
コード例 #24
0
ファイル: grutil.cpp プロジェクト: hkeeble/torcs-adaptive
int grGetFilename(const char *filename, char *filepath, char *buf, const int BUFSIZE)
{
	char *c1, *c2;
	int found = 0;
	int lg;
	int flen = strlen(filename);

	if (filepath) {
		c1 = filepath;
		c2 = c1;
		while ((!found) && (c2 != NULL)) {
			c2 = strchr(c1, ';');
			if (c2 == NULL) {
				snprintf(buf, BUFSIZE, "%s/%s", c1, filename);
			} else {
				lg = c2 - c1;
				if (lg + flen + 2 < BUFSIZE) {
					strncpy(buf, c1, lg);
					buf[lg] = '/';
					strcpy(buf + lg + 1, filename);
				} else {
					buf[0] = '\0';
				}
			}
			if (ulFileExists(buf)) {
				found = 1;
			}
			c1 = c2 + 1;
		}
	} else {
		strncpy(buf, filename, BUFSIZE);
		if (ulFileExists(buf)) {
			found = 1;
		}
	}
	if (!found) {
		GfOut("File %s not found\n", filename);
		GfOut("File Path was %s\n", filepath);
		return 0;
	}

	return 1;
}
コード例 #25
0
ファイル: usr.cpp プロジェクト: 702nADOS/speed-dreams
// Module entry point (new fixed name scheme).
extern "C" int moduleInitialize(tModInfo *modInfo)
{
  GfOut("\n\nusr::moduleInitialize, from %s ...\n", xml_path);
  GfOut("NBBOTS: %d (of %d)\n", NBBOTS, MAXNBBOTS);

  // Clear all structures.
  memset(modInfo, 0, NBBOTS*sizeof(tModInfo));
  int i;

  for (i = 0; i < NBBOTS; ++i)
  {
    modInfo[i].name = &DriverNames[i * DRIVERLEN];
    modInfo[i].desc = &DriverDescs[i * DRIVERLEN];
    modInfo[i].fctInit = InitFuncPt;   // Init function.
    modInfo[i].gfId    = ROB_IDENT;    // Supported framework version.
    modInfo[i].index   = i + indexOffset;  // Indices depend on xml-file
  }

  GfOut("... Initialized %d from %s\n\n\n", i, xml_path);

  return 0;
}
コード例 #26
0
ファイル: windowsspec.cpp プロジェクト: COHRINT/cuTORCS
/*
* Function
*	windowsDirGetListFiltered
*
* Description
*	Get a list of entries in a directory
*
* Parameters
*	directory name
*
* Return
*	list of directory entries
*/
static tFList *windowsDirGetListFiltered(const char *dir, const char *suffix)
{
	tFList	*flist = NULL;
	tFList	*curf;
	int		suffixLg;
	int		fnameLg;

	if ((suffix == NULL) || (strlen(suffix) == 0))
		return windowsDirGetList(dir);

	suffixLg = strlen(suffix);
	
	_finddata_t FData;
	char Dir_name[ 1024 ];
	sprintf( Dir_name, "%s\\*.*", dir );
	GfOut("trying dir %s\n",dir);
	long Dirent = _findfirst( Dir_name, &FData );
	if ( Dirent != -1 ) {
		do {
			fnameLg = strlen(FData.name);
			if ((fnameLg > suffixLg) && (strcmp(FData.name + fnameLg - suffixLg, suffix) == 0)) {
				curf = (tFList*)calloc(1, sizeof(tFList));
				curf->name = strdup(FData.name);
				if (flist == (tFList*)NULL) {
					curf->next = curf;
					curf->prev = curf;
					flist = curf;
				} else {
					/* sort entries... */
					if (_stricmp(curf->name, flist->name) > 0) {
						do {
							flist = flist->next;
						} while ((stricmp(curf->name, flist->name) > 0) && (stricmp(flist->name, flist->prev->name) > 0));
						flist = flist->prev;
					} else {
						do {
							flist = flist->prev;
						} while ((stricmp(curf->name, flist->name) < 0) && (stricmp(flist->name, flist->next->name) < 0));
					}
					curf->next = flist->next;
					flist->next = curf;
					curf->prev = curf->next->prev;
					curf->next->prev = curf;
					flist = curf;
				}
			}
		} while ( _findnext( Dirent, &FData ) != -1 );
	}
    
	return flist;
}
コード例 #27
0
//==========================================================================*
// Refueling
//--------------------------------------------------------------------------*
float TBaseStrategy::PitRefuel()
{
  float FuelConsum;                              // Spritverbrauch kg/m
  float Fuel;                                    // Menge in kg

  GfOut("# Fuel consumption: %0.5f kg/m\n",oFuelPerM);
  if (oFuelPerM == 0.0)                          // Wenn kein Messwert
    FuelConsum = oExpectedFuelPerM;              //   vorliegt, schätzen
  else                                           // ansonsten
    FuelConsum = oFuelPerM;                      //   Messwert nehmen

  GfOut("# Fuel consumption: %0.5f kg/m\n",FuelConsum);
  FuelConsum *= oDriver->oScaleRefuel;           // ggf. ohne Windschatten!
  GfOut("# Fuel consumption: %0.5f kg/m\n",FuelConsum);

  oRemainingDistance =                           // Restliche Strecke des
    oRaceDistance - CarDistanceRaced;            //   Rennens ermitteln
  GfOut("# Remaining distance: %0.5f m\n",oRemainingDistance);

  Fuel =                                         // Bedarf an Treibstoff
    (oRemainingDistance + oReserve) * FuelConsum;// für restliche Strecke
  GfOut("# Fuel         : %0.5f kg\n",Fuel);
  GfOut("# Tank capacity: %0.5f kg\n",oMaxFuel);

  if (Fuel > oMaxFuel)                           // Wenn mehr als eine Tank-
  {                                              //   füllung benötigt wird
    if (Fuel / 2 < oMaxFuel)                     // Bei zwei Tankfüllungen
      Fuel = Fuel / 2;                           //   die Hälfte tanken
    else if (Fuel / 3 < oMaxFuel)                // Bei drei Tankfüllungen.
      Fuel = Fuel / 3;                           //   ein Drittel tanken
    else if (Fuel / 4 < oMaxFuel)                // Bei vier Tankfüllungen.
      Fuel = Fuel / 4;                           //   ein Viertel tanken
    else                                         // Bei fünf Tankfüllungen
      Fuel = Fuel / 5;                           //   ein Fünftel tanken
  }
  GfOut("# Fuel         : %0.5f kg\n",Fuel);

  if (Fuel > oMaxFuel - CarFuel)                 // Menge ggf. auf freien
    Fuel = oMaxFuel - CarFuel;                   // Tankinhalt begrenzen
  else                                           // ansonsten Bedarf
    Fuel = Fuel - CarFuel;                       // abzügl. Tankinhalt

  oLastPitFuel = (float) MAX(Fuel,0.0);          // Wenn genug da ist = 0.0
  GfOut("# Fuel         : %0.5f kg\n",oLastPitFuel);

  return oLastPitFuel;                           // Menge an TORCS melden
};
コード例 #28
0
ファイル: racegl.cpp プロジェクト: andypassion/torcs
static void
reMovieCapture(void * /* dummy */)
{
   tRmMovieCapture	*capture = &(ReInfo->movieCapture);

    if (!capture->enabled || (ReInfo->_displayMode == RM_DISP_MODE_NONE)) {
	GfOut("Video Capture Mode Not Enabled\n");
	return;
    }
    
    capture->state = 1 - capture->state;
    if (capture->state) {
	GfOut("Video Capture Mode On\n");
	capture->currentFrame = 0;
	capture->currentCapture++;
	capture->lastFrame = GfTimeClock() - capture->deltaFrame;
	ReInfo->_displayMode = RM_DISP_MODE_CAPTURE;
    } else {
	GfOut("Video Capture Mode Off\n");
	ReInfo->_displayMode = RM_DISP_MODE_NORMAL;
	ReStart();
    }

}
コード例 #29
0
/** Initialization of a telemetry session.
    @ingroup	telemetry
    @param	ymin	Minimum value for Y.
    @param	ymax	Maximum value for Y.
    @return	None
 */
void RtTelemInit(tdble ymin, tdble ymax)
{
#ifdef later
    char	buf[256];
    tModInfoNC	*curModInfo;

    memset(&tlm, 0, sizeof(tTelemItf));
    sprintf(buf, "%smodules/telemetry/%s.%s", "telemetry", GfLibDir (), DLLEXT);
    if (GfModLoad(TLM_IDENT, buf, &modlist)) return;
    GfOut("--- %s loaded ---\n", modlist->modInfo->name);
    curModInfo = modlist->modInfo;
    curModInfo->fctInit(curModInfo->index, &tlm);

    tlm.init(ymin, ymax);
#endif
}
コード例 #30
0
ファイル: grutil.cpp プロジェクト: chagge/gym_torcs
static void grSetupState(grManagedState *st, char *buf)
{
	st->ref();			// cannot be removed
	st->enable(GL_LIGHTING);
	st->enable(GL_TEXTURE_2D);
	st->enable(GL_BLEND);
	st->setColourMaterial(GL_AMBIENT_AND_DIFFUSE);	

	stlist *curr = (stlist*)calloc(sizeof(stlist), 1);
	curr->next = stateList;
	stateList = curr;
	curr->state = st;
	curr->name = strdup(buf);

	GfOut("Loading %s\n", buf);
}