Пример #1
0
void draw_default_virtual_cockpit_wiper (viewpoint *vp)
{
	float
		state;

	ASSERT (vp);

	//
	// rotate wiper
	//

	state = (wiper_position - MIN_WIPER_POSITION) * (1.0 / (MAX_WIPER_POSITION - MIN_WIPER_POSITION));

	state = bound (state, 0.0, 1.0);

	animate_keyframed_sub_object_type (virtual_cockpit_wiper_inst3d, OBJECT_3D_SUB_OBJECT_WIPER, state);

	//
	// draw wiper
	//

	memcpy (&virtual_cockpit_wiper_inst3d->vp, vp, sizeof (viewpoint));

	insert_relative_object_into_3d_scene (OBJECT_3D_DRAW_TYPE_ZBUFFERED_OBJECT, &virtual_cockpit_wiper_inst3d->vp.position, virtual_cockpit_wiper_inst3d);
}
Пример #2
0
void animate_default_external_wipers (object_3d_instance *inst3d)
{
	float
		state;

	state = (wiper_position - MIN_WIPER_POSITION) * (1.0 / (MAX_WIPER_POSITION - MIN_WIPER_POSITION));

	state = bound (state, 0.0, 1.0);

	animate_keyframed_sub_object_type (inst3d, OBJECT_3D_SUB_OBJECT_WIPER, state);
}
Пример #3
0
void animate_hokum_virtual_cockpit_canopy_doors (void)
{
	int
		ejected;

	float
		aiming_state;

	object_3d_instance
		*inst3d;

	object_3d_sub_object_search_data
		search;

	ASSERT (virtual_cockpit_inst3d);

	if (canopy_door_state == CANOPY_DOOR_STATE_UNINITIALISED)
	{
		canopy_door_state = get_canopy_doors_aiming_state ();
	}

	aiming_state = get_canopy_doors_aiming_state ();

	if (aiming_state > canopy_door_state)
	{
		canopy_door_state += get_delta_time () * 0.5;

		if (canopy_door_state > CANOPY_DOOR_STATE_OPEN)
		{
			canopy_door_state = CANOPY_DOOR_STATE_OPEN;
		}
	}
	else if (aiming_state < canopy_door_state)
	{
		canopy_door_state -= get_delta_time () * 0.5;

		if (canopy_door_state < CANOPY_DOOR_STATE_CLOSED)
		{
			canopy_door_state = CANOPY_DOOR_STATE_CLOSED;
		}
	}

	animate_keyframed_sub_object_type (virtual_cockpit_inst3d, OBJECT_3D_SUB_OBJECT_CANOPY_DOORS, canopy_door_state);

	//
	// keep external 3D model in sync
	//

	inst3d = get_local_entity_ptr_value (get_gunship_entity (), PTR_TYPE_INSTANCE_3D_OBJECT);

	ASSERT (inst3d);

	animate_keyframed_sub_object_type (inst3d, OBJECT_3D_SUB_OBJECT_CANOPY_DOORS, canopy_door_state);

	//
	// ejected
	//

	ejected = get_local_entity_int_value (get_gunship_entity (), INT_TYPE_EJECTED);

	search.search_depth = 0;
	search.search_object = virtual_cockpit_inst3d;
	search.sub_object_index = OBJECT_3D_SUB_OBJECT_CANOPY_DOORS;

	if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
	{
		search.result_sub_object->visible_object = !ejected;
	}

	search.search_depth = 1;
	search.search_object = virtual_cockpit_inst3d;
	search.sub_object_index = OBJECT_3D_SUB_OBJECT_CANOPY_DOORS;

	if (find_object_3d_sub_object (&search) == SUB_OBJECT_SEARCH_RESULT_OBJECT_FOUND)
	{
		search.result_sub_object->visible_object = !ejected;
	}
}