コード例 #1
0
ファイル: co_crew.c プロジェクト: DexterWard/comanche
int get_current_virtual_cockpit_camera (crew_roles role)
{
	int
		current_virtual_cockpit_camera;

	if (get_local_entity_int_value (get_gunship_entity (), INT_TYPE_EJECTED))
	{
		if (role == CREW_ROLE_PILOT)
		{
			ASSERT (get_number_of_3d_object_cameras (virtual_cockpit_inst3d, OBJECT_3D_CAMERA_VIEW_STATIC_PILOT_EJECT) > 0);

			current_virtual_cockpit_camera = 0;
		}
		else
		{
			ASSERT (get_number_of_3d_object_cameras (virtual_cockpit_inst3d, OBJECT_3D_CAMERA_VIEW_STATIC_WSO_EJECT) > 0);

			current_virtual_cockpit_camera = 0;
		}
	}
	else
	{
		if (role == CREW_ROLE_PILOT)
		{
			current_virtual_cockpit_camera = current_pilot_virtual_cockpit_camera;
		}
		else
		{
			current_virtual_cockpit_camera = current_co_pilot_virtual_cockpit_camera;
		}
	}

	return (current_virtual_cockpit_camera);
}
コード例 #2
0
ファイル: cm_recog.c プロジェクト: Comanche93/eech
static int recognition_guide_camera_valid (camera *raw, object_3d_camera_index_numbers index)
{
	object_3d_instance
		*inst3d;

	ASSERT (raw);

	ASSERT (raw->external_view_entity);

	inst3d = (object_3d_instance *) get_local_entity_ptr_value (raw->external_view_entity, PTR_TYPE_INSTANCE_3D_OBJECT);

	ASSERT (inst3d);

	return (get_number_of_3d_object_cameras (inst3d, index) > 0);
}
コード例 #3
0
ファイル: cm_cine.c プロジェクト: DexterWard/comanche
void reset_cinematic_camera (camera *raw)
{
	entity
		*en;

	object_3d_instance
		*inst3d;

	int
		num_moving_cameras,
		num_static_cameras,
		attempts;

	//
	// pre-amble
	//

	ASSERT (raw);

	ASSERT (raw->external_view_entity);

	en = raw->external_view_entity;

	inst3d = get_local_entity_ptr_value (en, PTR_TYPE_INSTANCE_3D_OBJECT);

	//
	// select 3D camera
	//

	raw->cinematic_camera_index = OBJECT_3D_INVALID_CAMERA_INDEX;

	if (inst3d)
	{
		num_moving_cameras = get_number_of_3d_object_cameras (inst3d, OBJECT_3D_CAMERA_SCENIC_MOVING);

		num_static_cameras = get_number_of_3d_object_cameras (inst3d, OBJECT_3D_CAMERA_SCENIC_STATIC);

		if ((num_moving_cameras > 0) && (num_static_cameras > 0))
		{
			if (frand1 () < 0.333)
			{
				raw->cinematic_camera_index = OBJECT_3D_CAMERA_SCENIC_MOVING;
			}
			else
			{
				raw->cinematic_camera_index = OBJECT_3D_CAMERA_SCENIC_STATIC;
			}
		}
		else if (num_moving_cameras > 0)
		{
			raw->cinematic_camera_index = OBJECT_3D_CAMERA_SCENIC_MOVING;
		}
		else if (num_static_cameras > 0)
		{
			raw->cinematic_camera_index = OBJECT_3D_CAMERA_SCENIC_STATIC;
		}
	}

	switch (raw->cinematic_camera_index)
	{
		////////////////////////////////////////
		case OBJECT_3D_INVALID_CAMERA_INDEX:
		////////////////////////////////////////
		{
			raw->cinematic_camera_depth = 0;

			raw->cinematic_camera_lifetime = (frand1 () * 2.0) + 2.0;

			raw->cinematic_camera_heading = rad (45.0) * ((float) (rand16 () % 8));

			raw->cinematic_camera_pitch = rad (-45.0) * ((float) (rand16 () % 2));

			#if DEBUG_MODULE

			debug_log
			(
				"CINEMATIC CAMERA is INVALID (object = %s, moving cameras = %d, static cameras = %d, depth = %d, lifetime = %.2f, heading = %.2f, pitch = %.2f)",
				get_local_entity_string (en, STRING_TYPE_FULL_NAME),
				num_moving_cameras,
				num_static_cameras,
		  		raw->cinematic_camera_depth,
				raw->cinematic_camera_lifetime,
				deg (raw->cinematic_camera_heading),
				deg (raw->cinematic_camera_pitch)
			);

			#endif

			break;
		}
		////////////////////////////////////////
		case OBJECT_3D_CAMERA_SCENIC_MOVING:
		////////////////////////////////////////
		{
			//
			// try and prevent using the same moving camera twice in succession
			//

			if (num_moving_cameras > 1)
			{
				attempts = 10;

				while (attempts--)
				{
					raw->cinematic_camera_depth = rand16 () % num_moving_cameras;

					if (raw->cinematic_camera_depth != raw->cinematic_camera_previous_moving_depth)
					{
						break;
					}
				}
			}
			else
			{
				raw->cinematic_camera_depth = 0;
			}

			raw->cinematic_camera_previous_moving_depth = raw->cinematic_camera_depth;

			raw->cinematic_camera_lifetime = get_object_3d_camera_lifetime (inst3d, raw->cinematic_camera_index, raw->cinematic_camera_depth);

			#if DEBUG_MODULE

			debug_log
			(
				"CINEMATIC CAMERA is MOVING (object = %s, moving cameras = %d, static cameras = %d, depth = %d, lifetime = %.2f)",
				get_local_entity_string (en, STRING_TYPE_FULL_NAME),
				num_moving_cameras,
				num_static_cameras,
		  		raw->cinematic_camera_depth,
				raw->cinematic_camera_lifetime
			);

			#endif

			ASSERT (raw->cinematic_camera_lifetime > 0.0);

			break;
		}
		////////////////////////////////////////
		case OBJECT_3D_CAMERA_SCENIC_STATIC:
		////////////////////////////////////////
		{
			//
			// try and prevent using the same static camera twice in succession
			//

			if (num_static_cameras > 1)
			{
				attempts = 10;

				while (attempts--)
				{
					raw->cinematic_camera_depth = rand16 () % num_static_cameras;

					if (raw->cinematic_camera_depth != raw->cinematic_camera_previous_static_depth)
					{
						break;
					}
				}
			}
			else
			{
				raw->cinematic_camera_depth = 0;
			}

			raw->cinematic_camera_previous_static_depth = raw->cinematic_camera_depth;

			raw->cinematic_camera_lifetime = (frand1 () * 2.0) + 2.0;

			#if DEBUG_MODULE

			debug_log
			(
				"CINEMATIC CAMERA is STATIC (object = %s, moving cameras = %d, static cameras = %d, depth = %d, lifetime = %.2f)",
				get_local_entity_string (en, STRING_TYPE_FULL_NAME),
				num_moving_cameras,
				num_static_cameras,
		  		raw->cinematic_camera_depth,
				raw->cinematic_camera_lifetime
			);

			#endif
		}
	}

	raw->cinematic_camera_timer = 0.0;

	//
	// motion vector
	//

	get_local_entity_vec3d (en, VEC3D_TYPE_MOTION_VECTOR, &raw->motion_vector);
}
コード例 #4
0
ファイル: co_crew.c プロジェクト: DexterWard/comanche
void initialise_common_virtual_cockpit_cameras (void)
{
	#if DEBUG_MODULE_CREW_CAMERAS

	debug_colour_watch (DEBUG_COLOUR_AMBER, "pilot_crew_camera_index = %d", MT_INT, &pilot_crew_camera_index);
	debug_colour_watch (DEBUG_COLOUR_AMBER, "num_pilot_virtual_cockpit_cameras = %d", MT_INT, &num_pilot_virtual_cockpit_cameras);
	debug_colour_watch (DEBUG_COLOUR_AMBER, "current_pilot_virtual_cockpit_camera = %d", MT_INT, &current_pilot_virtual_cockpit_camera);

	debug_colour_watch (DEBUG_COLOUR_MAGENTA, "co_pilot_crew_camera_index = %d", MT_INT, &co_pilot_crew_camera_index);
	debug_colour_watch (DEBUG_COLOUR_MAGENTA, "num_co_pilot_virtual_cockpit_cameras = %d", MT_INT, &num_co_pilot_virtual_cockpit_cameras);
	debug_colour_watch (DEBUG_COLOUR_MAGENTA, "current_co_pilot_virtual_cockpit_camera = %d", MT_INT, &current_co_pilot_virtual_cockpit_camera);

	#endif

	////////////////////////////////////////
	//
	// pilot
	//
	////////////////////////////////////////

	if (virtual_cockpit_inst3d)
	{
		num_pilot_virtual_cockpit_cameras = get_number_of_3d_object_cameras (virtual_cockpit_inst3d, OBJECT_3D_CAMERA_VIEW_STATIC_PILOT);
	}
	else
	{
		num_pilot_virtual_cockpit_cameras = 0;
	}

	if (num_pilot_virtual_cockpit_cameras > 0)
	{
		current_pilot_virtual_cockpit_camera = 0;

		pilot_crew_camera_index = OBJECT_3D_CAMERA_VIEW_STATIC_PILOT;
	}
	else
	{
		current_pilot_virtual_cockpit_camera = INVALID_VIRTUAL_COCKPIT_CAMERA;

		pilot_crew_camera_index = OBJECT_3D_INVALID_CAMERA_INDEX;
	}

	////////////////////////////////////////
	//
	// co-pilot
	//
	////////////////////////////////////////

	if (virtual_cockpit_inst3d)
	{
		num_co_pilot_virtual_cockpit_cameras = get_number_of_3d_object_cameras (virtual_cockpit_inst3d, OBJECT_3D_CAMERA_VIEW_STATIC_WSO);
	}
	else
	{
		num_co_pilot_virtual_cockpit_cameras = 0;
	}

	if (num_co_pilot_virtual_cockpit_cameras > 0)
	{
		current_co_pilot_virtual_cockpit_camera = 0;

		co_pilot_crew_camera_index = OBJECT_3D_CAMERA_VIEW_STATIC_WSO;
	}
	else
	{
		current_co_pilot_virtual_cockpit_camera = INVALID_VIRTUAL_COCKPIT_CAMERA;

		co_pilot_crew_camera_index = OBJECT_3D_INVALID_CAMERA_INDEX;
	}
}
コード例 #5
0
ファイル: cm_cine.c プロジェクト: DexterWard/comanche
void update_cinematic_camera (camera *raw)
{
	//
	// pre-amble
	//

	ASSERT (raw);

	ASSERT (raw->external_view_entity);

	////////////////////////////////////////
	//
	// This code has been added to protect against cases where an object
	// and its destroyed version have a different number of cameras.
	//

	switch (raw->cinematic_camera_index)
	{
		case OBJECT_3D_CAMERA_SCENIC_MOVING:
		case OBJECT_3D_CAMERA_SCENIC_STATIC:
		{
			object_3d_instance
				*inst3d;

			inst3d = get_local_entity_ptr_value (raw->external_view_entity, PTR_TYPE_INSTANCE_3D_OBJECT);

			if (raw->cinematic_camera_depth >= get_number_of_3d_object_cameras (inst3d, raw->cinematic_camera_index))
			{
				#if DEBUG_MODULE

				debug_colour_log (DEBUG_COLOUR_RED, "CINEMATIC CAMERA ERROR - forced reset!!!");

				#endif

				reset_cinematic_camera (raw);
			}

			break;
		}
	}

	//
	////////////////////////////////////////

	//
	// update timer
	//

	raw->cinematic_camera_timer += get_delta_time ();

	if (raw->cinematic_camera_timer > raw->cinematic_camera_lifetime)
	{
		if (raw->auto_edit)
		{
			switch_auto_edit_entity (raw);

			if (switch_auto_edit_camera_mode (raw))
			{
				//
				// switched to a different camera
				//

				return;
			}
		}

		reset_cinematic_camera (raw);
	}

	//
	// continue update
	//

	update_cinematic_camera_continued (raw);
}