Example #1
0
// util func2
auto time_taken_ms(int N)
{
   auto vec = make_random_vector(N);
   auto ret = execute(mysort, vec);
   auto ns = std::chrono::duration_cast<std::chrono::milliseconds>(ret.second);
   return ns.count();
}
void get_top_component(int M,int N,double *comp,double *data,int num_iterations=30) {
    make_random_vector(M,comp);
    for (int ii=0; ii<num_iterations; ii++) {
        process_gui_events_if_needed();
        XXT_vector_mult(M,N,data,comp);
        normalize_vector(M,comp);
    }
}
Example #3
0
//	-----------------------------------------------------------------------------
//do whatever this thing does in a frame
void do_controlcen_frame(object *obj)
{
	int			best_gun_num;

	//	If a boss level, then Control_center_present will be 0.
	if (!Control_center_present)
		return;

#ifndef NDEBUG
	if (!Robot_firing_enabled || (Game_suspended & SUSP_ROBOTS))
		return;
#else
	if (!Robot_firing_enabled)
		return;
#endif

	if (!(Control_center_been_hit || Control_center_player_been_seen)) {
		if (!(FrameCount % 8)) {		//	Do every so often...
			vms_vector	vec_to_player;
			fix			dist_to_player;
			int			i;
			segment		*segp = &Segments[obj->segnum];

			// This is a hack.  Since the control center is not processed by
			// ai_do_frame, it doesn't know to deal with cloaked dudes.  It
			// seems to work in single-player mode because it is actually using
			// the value of Believed_player_position that was set by the last
			// person to go through ai_do_frame.  But since a no-robots game
			// never goes through ai_do_frame, I'm making it so the control
			// center can spot cloaked dudes.  

			if (Game_mode & GM_MULTI)
				Believed_player_pos = Objects[Players[Player_num].objnum].pos;

			//	Hack for special control centers which are isolated and not reachable because the
			//	real control center is inside the boss.
			for (i=0; i<MAX_SIDES_PER_SEGMENT; i++)
				if (segp->children[i] != -1)
					break;
			if (i == MAX_SIDES_PER_SEGMENT)
				return;

			vm_vec_sub(&vec_to_player, &ConsoleObject->pos, &obj->pos);
			dist_to_player = vm_vec_normalize_quick(&vec_to_player);
			if (dist_to_player < F1_0*200) {
				Control_center_player_been_seen = player_is_visible_from_object(obj, &obj->pos, 0, &vec_to_player, 0);
				Control_center_next_fire_time = 0;
			}
		}			

		return;
	}

	if ((Control_center_next_fire_time < 0) && !(Player_is_dead && (GameTime > Player_time_of_death+F1_0*2))) {
		if (Players[Player_num].flags & PLAYER_FLAGS_CLOAKED)
			best_gun_num = calc_best_gun(N_controlcen_guns, Gun_pos, Gun_dir, &Believed_player_pos);
		else
			best_gun_num = calc_best_gun(N_controlcen_guns, Gun_pos, Gun_dir, &ConsoleObject->pos);

		if (best_gun_num != -1) {
			vms_vector	vec_to_goal;
			fix			dist_to_player;
			fix			delta_fire_time;

			if (Players[Player_num].flags & PLAYER_FLAGS_CLOAKED) {
				vm_vec_sub(&vec_to_goal, &Believed_player_pos, &Gun_pos[best_gun_num]);
				dist_to_player = vm_vec_normalize_quick(&vec_to_goal);
			} else {
				vm_vec_sub(&vec_to_goal, &ConsoleObject->pos, &Gun_pos[best_gun_num]);
				dist_to_player = vm_vec_normalize_quick(&vec_to_goal);
			}

			if (dist_to_player > F1_0*300)
			{
				Control_center_been_hit = 0;
				Control_center_player_been_seen = 0;
				return;
			}
	
			#ifdef NETWORK
			if (Game_mode & GM_MULTI)
				multi_send_controlcen_fire(&vec_to_goal, best_gun_num, obj-Objects);	
			#endif
			Laser_create_new_easy( &vec_to_goal, &Gun_pos[best_gun_num], obj-Objects, CONTROLCEN_WEAPON_NUM, 1);

			//	1/4 of time, fire another thing, not directly at player, so it might hit him if he's constantly moving.
			if (rand() < 32767/4) {
				vms_vector	randvec;

				make_random_vector(&randvec);
				vm_vec_scale_add2(&vec_to_goal, &randvec, F1_0/4);
				vm_vec_normalize_quick(&vec_to_goal);
				#ifdef NETWORK
				if (Game_mode & GM_MULTI)
					multi_send_controlcen_fire(&vec_to_goal, best_gun_num, obj-Objects);
				#endif
				Laser_create_new_easy( &vec_to_goal, &Gun_pos[best_gun_num], obj-Objects, CONTROLCEN_WEAPON_NUM, 1);
			}

			delta_fire_time = (NDL - Difficulty_level) * F1_0/4;
			if (Game_mode & GM_MULTI) // slow down rate of fire in multi player
				delta_fire_time *= 2;

			Control_center_next_fire_time = delta_fire_time;

		}
	} else
		Control_center_next_fire_time -= FrameTime;

}
Example #4
0
//	-----------------------------------------------------------------------------
//do whatever this thing does in a frame
void DoReactorFrame (object *objP)
{
	int			best_gun_num;

	//	If a boss level, then gameData.reactor.bPresent will be 0.
	if (!gameData.reactor.bPresent)
		return;

#ifndef NDEBUG
	if (!gameStates.app.cheats.bRobotsFiring || (gameStates.app.bGameSuspended & SUSP_ROBOTS))
		return;
#else
	if (!gameStates.app.cheats.bRobotsFiring)
		return;
#endif

	if (! (gameData.reactor.bHit || gameData.reactor.bSeenPlayer)) {
		if (! (gameData.app.nFrameCount % 8)) {		//	Do every so often...
			vms_vector	vec_to_player;
			fix			dist_to_player;
			int			i;
			segment		*segp = &gameData.segs.segments[objP->segnum];

			// This is a hack.  Since the control center is not processed by
			// ai_do_frame, it doesn't know to deal with cloaked dudes.  It
			// seems to work in single-player mode because it is actually using
			// the value of Believed_player_position that was set by the last
			// person to go through ai_do_frame.  But since a no-robots game
			// never goes through ai_do_frame, I'm making it so the control
			// center can spot cloaked dudes.

			if (gameData.app.nGameMode & GM_MULTI)
				gameData.ai.vBelievedPlayerPos = gameData.objs.objects[gameData.multi.players[gameData.multi.nLocalPlayer].objnum].pos;

			//	Hack for special control centers which are isolated and not reachable because the
			//	real control center is inside the boss.
			for (i=0; i<MAX_SIDES_PER_SEGMENT; i++)
				if (IS_CHILD (segp->children[i]))
					break;
			if (i == MAX_SIDES_PER_SEGMENT)
				return;

			VmVecSub (&vec_to_player, &gameData.objs.console->pos, &objP->pos);
			dist_to_player = VmVecNormalizeQuick (&vec_to_player);
			if (dist_to_player < F1_0*200) {
				gameData.reactor.bSeenPlayer = ObjectCanSeePlayer (objP, &objP->pos, 0, &vec_to_player);
				gameData.reactor.nNextFireTime = 0;
			}
		}			

		return;
	}

	//	Periodically, make the reactor fall asleep if player not visible.
	if (gameData.reactor.bHit || gameData.reactor.bSeenPlayer) {
		if ((Last_time_cc_vis_check + F1_0*5 < gameData.app.xGameTime) || (Last_time_cc_vis_check > gameData.app.xGameTime)) {
			vms_vector	vec_to_player;
			fix			dist_to_player;

			VmVecSub (&vec_to_player, &gameData.objs.console->pos, &objP->pos);
			dist_to_player = VmVecNormalizeQuick (&vec_to_player);
			Last_time_cc_vis_check = gameData.app.xGameTime;
			if (dist_to_player < F1_0*120) {
				gameData.reactor.bSeenPlayer = ObjectCanSeePlayer (objP, &objP->pos, 0, &vec_to_player);
				if (!gameData.reactor.bSeenPlayer)
					gameData.reactor.bHit = 0;
			}
		}

	}

	if ((gameData.reactor.nNextFireTime < 0) && ! (gameStates.app.bPlayerIsDead && (gameData.app.xGameTime > gameStates.app.nPlayerTimeOfDeath+F1_0*2))) {
		if (gameData.multi.players[gameData.multi.nLocalPlayer].flags & PLAYER_FLAGS_CLOAKED)
			best_gun_num = CalcBestReactorGun (N_controlcen_guns, Gun_pos, Gun_dir, &gameData.ai.vBelievedPlayerPos);
		else
			best_gun_num = CalcBestReactorGun (N_controlcen_guns, Gun_pos, Gun_dir, &gameData.objs.console->pos);

		if (best_gun_num != -1) {
			int			rand_prob, count;
			vms_vector	vec_to_goal;
			fix			dist_to_player;
			fix			delta_fire_time;

			if (gameData.multi.players[gameData.multi.nLocalPlayer].flags & PLAYER_FLAGS_CLOAKED) {
				VmVecSub (&vec_to_goal, &gameData.ai.vBelievedPlayerPos, &Gun_pos[best_gun_num]);
				dist_to_player = VmVecNormalizeQuick (&vec_to_goal);
			} else {
				VmVecSub (&vec_to_goal, &gameData.objs.console->pos, &Gun_pos[best_gun_num]);
				dist_to_player = VmVecNormalizeQuick (&vec_to_goal);
			}

			if (dist_to_player > F1_0*300)
			{
				gameData.reactor.bHit = 0;
				gameData.reactor.bSeenPlayer = 0;
				return;
			}
	
			#ifdef NETWORK
			if (gameData.app.nGameMode & GM_MULTI)
				MultiSendCtrlcenFire (&vec_to_goal, best_gun_num, OBJ_IDX (objP));	
			#endif
			CreateNewLaserEasy (&vec_to_goal, &Gun_pos[best_gun_num], OBJ_IDX (objP), CONTROLCEN_WEAPON_NUM, 1);

			//	some of time, based on level, fire another thing, not directly at player, so it might hit him if he's constantly moving.
			rand_prob = F1_0/ (abs (gameData.missions.nCurrentLevel)/4+2);
			count = 0;
			while ((d_rand () > rand_prob) && (count < 4)) {
				vms_vector	randvec;

				make_random_vector (&randvec);
				VmVecScaleInc (&vec_to_goal, &randvec, F1_0/6);
				VmVecNormalizeQuick (&vec_to_goal);
				#ifdef NETWORK
				if (gameData.app.nGameMode & GM_MULTI)
					MultiSendCtrlcenFire (&vec_to_goal, best_gun_num, OBJ_IDX (objP));
				#endif
				CreateNewLaserEasy (&vec_to_goal, &Gun_pos[best_gun_num], OBJ_IDX (objP), CONTROLCEN_WEAPON_NUM, 0);
				count++;
			}

			delta_fire_time = (NDL - gameStates.app.nDifficultyLevel) * F1_0/4;
			if (gameStates.app.nDifficultyLevel == 0)
				delta_fire_time += F1_0/2;

			if (gameData.app.nGameMode & GM_MULTI) // slow down rate of fire in multi player
				delta_fire_time *= 2;

			gameData.reactor.nNextFireTime = delta_fire_time;

		}
	} else
		gameData.reactor.nNextFireTime -= gameData.app.xFrameTime;

}