コード例 #1
0
ファイル: su_anim.c プロジェクト: DexterWard/comanche
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 );
}
コード例 #2
0
ファイル: ps_anim.c プロジェクト: Comanche93/eech
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;
		}
	}
}