void update_site_radar( entity *en ) { site_updatable *raw; // // updates the radar rotation ( regardless of whether the site is drawn or not ) // ASSERT( en ); raw = get_local_entity_data( en ); update_entity_simple_keyframed_value( en, &raw->radar_rotation_state, 0.16666 ); }
void update_person_animation (entity *en) { person *raw; int wrapped, state; float frequency, remainder; ASSERT( en ); raw = (person *) get_local_entity_data (en); //update character animation get_keyframed_animation_state (raw->person_animation_state, &state, &remainder); if (get_local_entity_int_value (en, INT_TYPE_ALIVE)) { if (state != PERSON_ANIM_NONE) { frequency = 1.0 / person_animation_database[state].duration; wrapped = update_entity_simple_keyframed_value (en, &remainder, frequency); if ( (wrapped) && (!person_animation_database[state].repeat) ) { int state_selector; // set new animation that isn't same as previous state_selector = rand16 () % 4; switch ( state_selector ) { case 0: state = ( state == PERSON_ANIM_STAND1 ) ? PERSON_ANIM_STAND2 : PERSON_ANIM_STAND1; break; case 1: state = ( state == PERSON_ANIM_STAND2 ) ? PERSON_ANIM_STAND3 : PERSON_ANIM_STAND2; break; case 2: state = ( state == PERSON_ANIM_STAND3 ) ? PERSON_ANIM_STAND4 : PERSON_ANIM_STAND3; break; case 3: state = ( state == PERSON_ANIM_STAND4 ) ? PERSON_ANIM_STAND1 : PERSON_ANIM_STAND4; break; } remainder = 0.0; raw->person_animation_state = state + remainder; ASSERT ( raw->person_animation_state < NUM_PERSON_ANIMS ); } else { raw->person_animation_state = state + remainder; ASSERT ( raw->person_animation_state < NUM_PERSON_ANIMS ); } } } else { raw->person_animation_state += 1.4 * get_entity_movement_delta_time (); if (raw->person_animation_state >= 1.0) { raw->person_animation_state = 1.0; } } }