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); }
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); }
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; } }