hedgewars/uAIAmmoTests.pas
changeset 7348 2a69f2ed9273
parent 7274 a07777b818f1
child 7375 16ae2e1c9005
equal deleted inserted replaced
7345:f253e225da15 7348:2a69f2ed9273
   692 end;
   692 end;
   693 
   693 
   694 
   694 
   695 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   695 function TestBaseballBat(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   696 var valueResult, a, v1, v2: LongInt;
   696 var valueResult, a, v1, v2: LongInt;
   697     x, y: LongInt;
   697     x, y, trackFall: LongInt;
   698     dx, dy: real;
   698     dx, dy: real;
   699 begin
   699 begin
       
   700     if Me^.Hedgehog^.BotLevel < 3 then trackFall:= afTrackFall
       
   701     else trackFall:= 0;
   700     Level:= Level; // avoid compiler hint
   702     Level:= Level; // avoid compiler hint
   701     ap.ExplR:= 0;
   703     ap.ExplR:= 0;
   702     ap.Time:= 0;
   704     ap.Time:= 0;
   703     ap.Power:= 1;
   705     ap.Power:= 1;
   704     x:= hwRound(Me^.X);
   706     x:= hwRound(Me^.X);
   712         dx:= sin(a / cMaxAngle * pi) * 0.5;
   714         dx:= sin(a / cMaxAngle * pi) * 0.5;
   713         dy:= cos(a / cMaxAngle * pi) * 0.5;
   715         dy:= cos(a / cMaxAngle * pi) * 0.5;
   714 
   716 
   715         v1:= RateShove(Me, x - 10, y
   717         v1:= RateShove(Me, x - 10, y
   716                 , 33, 30, 115
   718                 , 33, 30, 115
   717                 , -dx, -dy, afTrackFall);
   719                 , -dx, -dy, trackFall);
   718         v2:= RateShove(Me, x + 10, y
   720         v2:= RateShove(Me, x + 10, y
   719                 , 33, 30, 115
   721                 , 33, 30, 115
   720                 , dx, -dy, afTrackFall);
   722                 , dx, -dy, trackFall);
   721         if (v1 > valueResult) or (v2 > valueResult) then
   723         if (v1 > valueResult) or (v2 > valueResult) then
   722             if (v2 > v1) 
   724             if (v2 > v1) 
   723                 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
   725                 or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
   724                 begin
   726                 begin
   725                 ap.Angle:= a;
   727                 ap.Angle:= a;
   740     TestBaseballBat:= valueResult;
   742     TestBaseballBat:= valueResult;
   741 end;
   743 end;
   742 
   744 
   743 function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   745 function TestFirePunch(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   744 var valueResult, v1, v2, i: LongInt;
   746 var valueResult, v1, v2, i: LongInt;
   745     x, y: LongInt;
   747     x, y, trackFall: LongInt;
   746 begin
   748 begin
       
   749     if Me^.Hedgehog^.BotLevel = 1 then trackFall:= afTrackFall
       
   750     else trackFall:= 0;
   747     Level:= Level; // avoid compiler hint
   751     Level:= Level; // avoid compiler hint
   748     ap.ExplR:= 0;
   752     ap.ExplR:= 0;
   749     ap.Time:= 0;
   753     ap.Time:= 0;
   750     ap.Power:= 1;
   754     ap.Power:= 1;
   751     x:= hwRound(Me^.X);
   755     x:= hwRound(Me^.X);
   754     v1:= 0;
   758     v1:= 0;
   755     for i:= 0 to 8 do
   759     for i:= 0 to 8 do
   756         begin
   760         begin
   757         v1:= v1 + RateShove(Me, x - 10, y - 10 * i
   761         v1:= v1 + RateShove(Me, x - 10, y - 10 * i
   758                 , 18, 30, 40
   762                 , 18, 30, 40
   759                 , -0.45, -0.9, afTrackFall or afSetSkip);
   763                 , -0.45, -0.9, trackFall or afSetSkip);
   760         end;
   764         end;
   761     v1:= v1 + RateShove(Me, x - 10, y - 90
   765     v1:= v1 + RateShove(Me, x - 10, y - 90
   762             , 18, 30, 40
   766             , 18, 30, 40
   763             , -0.45, -0.9, afTrackFall);
   767             , -0.45, -0.9, trackFall);
   764 
   768 
   765 
   769 
   766     // now try opposite direction
   770     // now try opposite direction
   767     v2:= 0;
   771     v2:= 0;
   768     for i:= 0 to 8 do
   772     for i:= 0 to 8 do
   769         begin
   773         begin
   770         v2:= v2 + RateShove(Me, x + 10, y - 10 * i
   774         v2:= v2 + RateShove(Me, x + 10, y - 10 * i
   771                 , 18, 30, 40
   775                 , 18, 30, 40
   772                 , 0.45, -0.9, afTrackFall or afSetSkip);
   776                 , 0.45, -0.9, trackFall or afSetSkip);
   773         end;
   777         end;
   774     v2:= v2 + RateShove(Me, x + 10, y - 90
   778     v2:= v2 + RateShove(Me, x + 10, y - 90
   775             , 18, 30, 40
   779             , 18, 30, 40
   776             , 0.45, -0.9, afTrackFall);
   780             , 0.45, -0.9, trackFall);
   777 
   781 
   778     if (v2 > v1) 
   782     if (v2 > v1) 
   779         or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
   783         or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
   780         begin
   784         begin
   781         ap.Angle:= 1;
   785         ap.Angle:= 1;
   794 end;
   798 end;
   795 
   799 
   796 
   800 
   797 function TestWhip(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   801 function TestWhip(Me: PGear; Targ: TPoint; Level: LongInt; var ap: TAttackParams): LongInt;
   798 var valueResult, v1, v2: LongInt;
   802 var valueResult, v1, v2: LongInt;
   799     x, y: LongInt;
   803     x, y, trackFall: LongInt;
   800 begin
   804 begin
       
   805     if Me^.Hedgehog^.BotLevel = 1 then trackFall:= afTrackFall
       
   806     else trackFall:= 0;
   801     Level:= Level; // avoid compiler hint
   807     Level:= Level; // avoid compiler hint
   802     ap.ExplR:= 0;
   808     ap.ExplR:= 0;
   803     ap.Time:= 0;
   809     ap.Time:= 0;
   804     ap.Power:= 1;
   810     ap.Power:= 1;
   805     x:= hwRound(Me^.X);
   811     x:= hwRound(Me^.X);
   809     {first RateShove checks farthermost of two whip's AmmoShove attacks 
   815     {first RateShove checks farthermost of two whip's AmmoShove attacks 
   810     to encourage distant attacks (damaged hog is excluded from view of second 
   816     to encourage distant attacks (damaged hog is excluded from view of second 
   811     RateShove call)}
   817     RateShove call)}
   812     v1:= RateShove(Me, x - 15, y
   818     v1:= RateShove(Me, x - 15, y
   813             , 30, 30, 25
   819             , 30, 30, 25
   814             , -1, -0.8, afTrackFall or afSetSkip);
   820             , -1, -0.8, trackFall or afSetSkip);
   815     v1:= v1 +
   821     v1:= v1 +
   816         RateShove(Me, x, y
   822         RateShove(Me, x, y
   817             , 30, 30, 25
   823             , 30, 30, 25
   818             , -1, -0.8, afTrackFall);
   824             , -1, -0.8, trackFall);
   819     // now try opposite direction
   825     // now try opposite direction
   820     v2:= RateShove(Me, x + 15, y
   826     v2:= RateShove(Me, x + 15, y
   821             , 30, 30, 25
   827             , 30, 30, 25
   822             , 1, -0.8, afTrackFall or afSetSkip);
   828             , 1, -0.8, trackFall or afSetSkip);
   823     v2:= v2 +
   829     v2:= v2 +
   824         RateShove(Me, x, y
   830         RateShove(Me, x, y
   825             , 30, 30, 25
   831             , 30, 30, 25
   826             , 1, -0.8, afTrackFall);
   832             , 1, -0.8, trackFall);
   827 
   833 
   828     if (v2 > v1) 
   834     if (v2 > v1) 
   829         or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
   835         or {don't encourage turning for no gain}((v2 = v1) and (not Me^.dX.isNegative)) then
   830         begin
   836         begin
   831         ap.Angle:= 1;
   837         ap.Angle:= 1;