コード例 #1
0
void CGameGraphBuilder::generate_edges		(const u32 &game_vertex_id)
{
	graph_type::CVertex		*vertex = graph().vertex(game_vertex_id);

	xr_vector<u32>::const_iterator	I = m_current_fringe.begin();
	xr_vector<u32>::const_iterator	E = m_current_fringe.end();
	for ( ; I != E; ++I) {
		VERIFY				(!vertex->edge(*I));
		float				distance = path_distance(game_vertex_id,*I);
		graph().add_edge	(game_vertex_id,*I,distance);
	}
}
コード例 #2
0
ファイル: no_waste.c プロジェクト: mrLite/C-ohjelmointi
int main(int argc, char* argv[]) {
	if(argc > 1) {
		FILE* fptr = fopen(argv[1], "r");
		assert(fptr != NULL);
		
		int city_c = count_cities(fptr);
		printf("City count: %d\n", city_c);
		
		city* cities[city_c];
		
		read_cities(fptr, cities, city_c);
		print_cities(cities, city_c);
		printf("Distance between Helsinki and Espoo: %f km\n", distance(cities[1], cities[4]));
		printf("Path distance: %f km\n", path_distance(cities, city_c));
		
		free_cities(cities, city_c);
		fclose(fptr);
	}
	return EXIT_SUCCESS;
}
コード例 #3
0
ファイル: chat.c プロジェクト: AurigaProject/root
/*==========================================
 * 既存チャットルームに参加
 *------------------------------------------
 */
void chat_joinchat(struct map_session_data *sd, int chatid, const char* pass)
{
	struct chat_data *cd;

	nullpo_retv(sd);

	if((cd = map_id2cd(chatid)) == NULL)
		return;

	if(cd->bl.m != sd->bl.m || sd->state.store || sd->state.joinchat || path_distance(cd->bl.x,cd->bl.y,sd->bl.x,sd->bl.y) > AREA_SIZE) {
		clif_joinchatfail(sd,3);
		return;
	}
	if(cd->limit <= cd->users || cd->users >= sizeof(cd->usersd)/sizeof(cd->usersd[0])) {
		clif_joinchatfail(sd,0);
		return;
	}
	if(cd->pub == 0 && strncmp(pass,cd->pass,8)) {
		clif_joinchatfail(sd,1);
		return;
	}
	if(linkdb_exists(&cd->ban_list, INT2PTR(sd->status.char_id))) {
		clif_joinchatfail(sd,2);
		return;
	}
	if(cd->zeny > sd->status.zeny) {
		clif_joinchatfail(sd,4);
		return;
	}
	if(cd->lowlv > sd->status.base_level) {
		clif_joinchatfail(sd,5);
		return;
	}
	if(cd->highlv < sd->status.base_level) {
		clif_joinchatfail(sd,6);
		return;
	}
	if((pc_get_job_bit(sd->s_class.job) & cd->job) == 0) {
		clif_joinchatfail(sd,7);
		return;
	}
	if(cd->upper) {
		if(((1<<sd->s_class.upper)&cd->upper) == 0) {
			clif_joinchatfail(sd,7);
			return;
		}
	}

	cd->usersd[cd->users] = sd;
	cd->users++;

	sd->chatID         = cd->bl.id;
	sd->state.joinchat = 1;

	clif_joinchatok(sd,cd);	// 新たに参加した人には全員のリスト
	clif_addchat(cd,sd);	// 既に中に居た人には追加した人の報告
	clif_dispchat(cd,-1);	// 周囲の人には人数変化報告

	chat_triggerevent(cd);	// イベント

	return;
}