コード例 #1
0
ファイル: ai_cmd.c プロジェクト: ioid3-games/ioid3-rtcw
/*
=======================================================================================================================================
BotNearestVisibleItem
=======================================================================================================================================
*/
float BotNearestVisibleItem(bot_state_t *bs, char *itemname, bot_goal_t *goal) {
	int i;
	char name[64];
	bot_goal_t tmpgoal;
	float dist, bestdist;
	vec3_t dir;
	bsp_trace_t trace;

	bestdist = 999999;
	i = -1;

	do {
		i = trap_BotGetLevelItemGoal(i, itemname, &tmpgoal);
		trap_BotGoalName(tmpgoal.number, name, sizeof(name));

		if (Q_stricmp(itemname, name) != 0) {
			continue;
		}

		VectorSubtract(tmpgoal.origin, bs->origin, dir);
		dist = VectorLength(dir);

		if (dist < bestdist) {
			// trace from start to end
			BotAI_Trace(&trace, bs->eye, NULL, NULL, tmpgoal.origin, bs->client, CONTENTS_SOLID|CONTENTS_PLAYERCLIP);

			if (trace.fraction >= 1.0) {
				bestdist = dist;
				memcpy(goal, &tmpgoal, sizeof(bot_goal_t));
			}
		}
	} while (i > 0);
	return bestdist;
}
コード例 #2
0
ファイル: ai_cmd.c プロジェクト: JackalFrost/RTCW-WSGF
/*
==================
BotGetItemTeamGoal

FIXME: add stuff like "upper rocket launcher"
"the rl near the railgun", "lower grenade launcher" etc.
==================
*/
int BotGetItemTeamGoal( char *goalname, bot_goal_t *goal ) {
	int i;

	if ( !strlen( goalname ) ) {
		return qfalse;
	}
	i = -1;
	do {
		i = trap_BotGetLevelItemGoal( i, goalname, goal );
		if ( i > 0 ) { // && !AvoidGoalTime(&bs->gs, goal.number))
			return qtrue;
		}
	} while ( i > 0 );
	return qfalse;
}
コード例 #3
0
ファイル: ai_cmd.c プロジェクト: AHPlankton/Quake-III-Arena
/*
==================
BotGetItemTeamGoal

FIXME: add stuff like "upper rocket launcher"
"the rl near the railgun", "lower grenade launcher" etc.
==================
*/
int BotGetItemTeamGoal(char *goalname, bot_goal_t *goal) {
	int i;

	if (!strlen(goalname)) return qfalse;
	i = -1;
	do {
		i = trap_BotGetLevelItemGoal(i, goalname, goal);
		if (i > 0) {
			//do NOT defend dropped items
			if (goal->flags & GFL_DROPPED)
				continue;
			return qtrue;
		}
	} while(i > 0);
	return qfalse;
}