MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / UpdateTarget

Method UpdateTarget

engine/Poseidon/AI/AICenterImplPreview.cpp:756–884  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

754}
755
756void AICenter::UpdateTarget(Target& target)
757{
758 int index = FindTargetIndex(target.idExact);
759 if (index >= 0)
760 {
761 AITargetInfo& item = _targets[index];
762 AI_ERROR(item._idExact == target.idExact);
763 float oldAccuracyType = item.FadingTypeAccuracy();
764 float oldAccuracySide = item.FadingSideAccuracy();
765 float newAccuracyType = target.FadingAccuracy();
766 float newAccuracySide = target.FadingSideAccuracy();
767 TargetSide newSide;
768
769 bool change = false;
770 if (newAccuracySide >= floatMin(oldAccuracySide, 2.1))
771 {
772 newSide = target.side;
773 item._timeSide = Glob.time;
774 item._accuracySide = newAccuracySide;
775 change = true;
776 }
777 else
778 {
779 newSide = item._side;
780 }
781 const VehicleType* newType;
782 if (newAccuracyType > oldAccuracyType)
783 {
784 newType = target.type;
785 item._timeType = Glob.time;
786 item._accuracyType = newAccuracyType;
787 change = true;
788 }
789 else
790 {
791 newType = item._type;
792 }
793
794 float errSize2 = target.posError.SquareSize();
795 if (target.lastSeen > item._time && errSize2 <= item._precisionPos)
796 { // change only if target information is more recent
797 item._time = target.lastSeen;
798 item._realPos = target.AimingPosition();
799 item._precisionPos = target.posError.SquareSize();
800 change = true;
801 }
802
803 bool forceUpdate = false;
804 if (errSize2 <= Square(2)) // we see it very precisely
805 {
806 Vector3Val dir = target.idExact->GetEyeDirection();
807 // limitDist = 2 * sin(alfa/2)
808 // for alfa = 45 deg limitDist = 0.76536686473
809 const float limitDist = 0.76;
810 if (dir.Distance2(item._dir) > Square(limitDist))
811 {
812 item._dir = dir;
813 change = true;

Callers

nothing calls this directly

Calls 15

floatMinFunction · 0.85
IsEnemyFunction · 0.85
FadingTypeAccuracyMethod · 0.80
FadingAccuracyMethod · 0.80
AddChangeMethod · 0.80
SquareFunction · 0.50
FadingSideAccuracyMethod · 0.45
SquareSizeMethod · 0.45
AimingPositionMethod · 0.45
GetEyeDirectionMethod · 0.45
Distance2Method · 0.45
XMethod · 0.45

Tested by

no test coverage detected