-
Автор темы
- #1
C++:
void Resolver::ResolveStand( AimPlayer* data, LagRecord* record ) {
// get predicted away angle for the player.
float away = GetAwayAngle( record );
// pointer for easy access.
LagRecord* move = &data->m_walk_record;
if( move->m_sim_time > 0.f ) {
vec3_t delta = move->m_origin - record->m_origin;
// check if moving record is close.
if( delta.length( ) <= 128.f ) {
// indicate that we are using the moving lby.
data->m_moved = true;
}
}
float diff = math::NormalizedAngle( record->m_body - move->m_body );
float delta = record->m_anim_time - move->m_anim_time;
// Check if delta is within a valid range
if ( delta >= 0.22f && delta <= 0.3f ) {
// Check if record's animation time is greater than or equal to the body update time
if ( record->m_anim_time >= data->m_body_update ) {
// Check if body index is less than or equal to 3
if ( data->m_body_index <= 3 ) {
record->m_eye_angles.y = record->m_body;
data->m_body_update = record->m_anim_time + 1.1f;
record->m_mode = Modes::RESOLVE_BODY;
}
else {
record->m_mode = Modes::RESOLVE_STAND1;
C_AnimationLayer* curr = &record->m_layers[ 3 ];
int act = data->m_player->GetSequenceActivity( curr->m_sequence );
record->m_eye_angles.y = move->m_body;
// Check if stand index is divisible by 3 with no remainder
if ( !( data->m_stand_index % 3 ) ) {
record->m_eye_angles.y += g_csgo.RandomFloat( -35.f, 35.f );
}
// Check if stand index is greater than 6 and act is not equal to 980
if ( data->m_stand_index > 6 && act != 980 ) {
record->m_eye_angles.y = move->m_body + 180.f;
}
else if ( data->m_stand_index > 4 && act != 980 ) {
record->m_eye_angles.y = away + 180.f;
}
}
}
else {
record->m_eye_angles.y = move->m_body;
record->m_mode = Modes::RESOLVE_STOPPED_MOVING;
}
}
// stand2 -> no known last move.
record->m_mode = Modes::RESOLVE_STAND2;
// Calculate the `m_eye_angles.y` value based on the `data->m_stand_index2 % 6` value
switch ( data->m_stand_index2 % 6 ) {
case 0:
record->m_eye_angles.y = away + 180.f; // The angle 180 degrees away from `away`
break;
case 1:
record->m_eye_angles.y = record->m_body; // The current body angle
break;
case 2:
record->m_eye_angles.y = record->m_body + 180.f; // The current body angle plus 180 degrees
break;
case 3:
record->m_eye_angles.y = record->m_body + 110.f; // The current body angle plus 110 degrees
break;
case 4:
record->m_eye_angles.y = record->m_body - 110.f; // The current body angle minus 110 degrees
break;
case 5:
record->m_eye_angles.y = away; // The `away` angle
break;
default:
break;
}
}