MCPcopy Create free account
hub / github.com/Panzerschrek/Chasm-Reverse / RotateToTarget

Method RotateToTarget

PanzerChasm/server/monster.cpp:752–783  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

750}
751
752void Monster::RotateToTarget( float time_delta_s )
753{
754 if( !target_.have_position )
755 return;
756
757 const m_Vec2 vec_to_target= target_.position.xy() - pos_.xy();
758 if( vec_to_target.SquareLength() == 0.0f )
759 return;
760
761 const float target_angle= NormalizeAngle( std::atan2( vec_to_target.y, vec_to_target.x ) );
762 float target_angle_delta= target_angle - angle_;
763 if( target_angle_delta > +Constants::pi )
764 target_angle_delta-= Constants::two_pi;
765 if( target_angle_delta < -Constants::pi )
766 target_angle_delta+= Constants::two_pi;
767
768 if( target_angle_delta != 0.0f )
769 {
770 const GameResources::MonsterDescription& monster_description= game_resources_->monsters_description[ monster_id_ ];
771
772 const float abs_target_angle_delta= std::abs(target_angle_delta);
773 const float angle_delta= time_delta_s * float(monster_description.rotation_speed);
774
775 if( angle_delta >= abs_target_angle_delta )
776 angle_= target_angle;
777 else
778 {
779 const float turn_direction= target_angle_delta > 0.0f ? 1.0f : -1.0f;
780 angle_= NormalizeAngle( angle_ + turn_direction * angle_delta );
781 }
782 }
783}
784
785bool Monster::SelectTarget( const Map& map )
786{

Callers

nothing calls this directly

Calls 1

NormalizeAngleFunction · 0.85

Tested by

no test coverage detected