| 2504 | } |
| 2505 | |
| 2506 | void AIUpdateAnim(object *obj) { |
| 2507 | ai_frame *ai_info = obj->ai_info; |
| 2508 | polyobj_info *p_info = &obj->rtype.pobj_info; |
| 2509 | int new_anim = ai_info->next_animation_type; |
| 2510 | int ai_movement = ai_info->movement_type; |
| 2511 | |
| 2512 | if (ai_info->anim_sound_handle != 0) |
| 2513 | Sound_system.StopSoundLooping(ai_info->anim_sound_handle); |
| 2514 | |
| 2515 | if (!Object_info[obj->id].anim) |
| 2516 | return; |
| 2517 | |
| 2518 | if ((Demo_flags == DF_PLAYBACK) || ((Game_mode & GM_MULTI) && (Netgame.local_role == LR_CLIENT))) { |
| 2519 | p_info->anim_flags &= ~AIAF_NOTIFY; |
| 2520 | |
| 2521 | if (!(p_info->multi_anim_info.flags & FMA_VALID)) { |
| 2522 | mprintf(0, "Update Anim: Earily bail\n"); |
| 2523 | return; |
| 2524 | } |
| 2525 | |
| 2526 | custom_anim *multi_anim_info = &p_info->multi_anim_info; |
| 2527 | |
| 2528 | multi_anim_info->server_time = Gametime; |
| 2529 | p_info->anim_frame = ((float)multi_anim_info->server_anim_frame) / 256.0f; |
| 2530 | |
| 2531 | p_info->anim_start_frame = multi_anim_info->anim_start_frame; |
| 2532 | p_info->anim_end_frame = multi_anim_info->anim_end_frame; |
| 2533 | p_info->anim_time = multi_anim_info->anim_time; |
| 2534 | p_info->max_speed = multi_anim_info->max_speed; |
| 2535 | |
| 2536 | p_info->anim_flags = 0; |
| 2537 | |
| 2538 | if (multi_anim_info->flags & FMA_LOOPING) |
| 2539 | p_info->anim_flags |= AIAF_LOOPING; |
| 2540 | |
| 2541 | // Make sure we mark it as current and |
| 2542 | p_info->multi_anim_info.flags |= FMA_CURRENT; |
| 2543 | |
| 2544 | if (multi_anim_info->anim_sound_index >= 0) { |
| 2545 | Sound_system.StopSoundLooping(ai_info->anim_sound_handle); |
| 2546 | ai_info->anim_sound_handle = Sound_system.Play3dSound(multi_anim_info->anim_sound_index, SND_PRIORITY_LOW, obj); |
| 2547 | } |
| 2548 | |
| 2549 | return; |
| 2550 | } |
| 2551 | |
| 2552 | if (new_anim == AS_FLINCH) { |
| 2553 | float delta_time = 1.0f + obj->shields / 10.0f; |
| 2554 | if (delta_time > 4.3) { |
| 2555 | delta_time = 4.3f; |
| 2556 | } |
| 2557 | |
| 2558 | ai_info->next_flinch_time = Gametime + delta_time; |
| 2559 | } |
| 2560 | // mprintf(0, "D %d to %d\n", ai_info->animation_type, ai_info->next_animation_type); |
| 2561 | |
| 2562 | // Update the physics and movement class info |
| 2563 | switch (ai_info->animation_type) { |
no test coverage detected