diff -r fe1c62875a19 -r 42257fee61ae hedgewars/uAI.pas --- a/hedgewars/uAI.pas Mon Jul 03 17:46:58 2006 +0000 +++ b/hedgewars/uAI.pas Sat Jul 08 21:40:03 2006 +0000 @@ -115,7 +115,7 @@ Actions.Pos:= 0; BestActions.Count:= 0; if (Me.State and gstAttacked) = 0 then maxsteps:= (TurnTimeLeft - 4000) div cHHStepTicks - else maxsteps:= 3000; + else maxsteps:= TurnTimeLeft div cHHStepTicks; BackMe:= Me^; if (Me.State and gstAttacked) = 0 then TestAmmos(Actions, Me); BestRate:= RatePlace(Me); @@ -135,7 +135,7 @@ begin BestActions:= Actions; BestRate:= Rate; - Me.State:= Me.State or gstAttacked // we have better place, go to it and don't use ammo + Me.State:= Me.State or gstAttacked // we have better place, go there and don't use ammo end else if Rate < BestRate then if BestRate > 0 then exit @@ -149,20 +149,34 @@ end; procedure Think(Me: PGear); cdecl; -var BackMe: TGear; +var BackMe, WalkMe: TGear; StartTicks: Longword; begin StartTicks:= GameTicks; +BestActions.Count:= 0; +BestActions.Pos:= 0; BestActions.Score:= Low(integer); -if Targets.Count > 0 then - begin - BackMe:= Me^; - Walk(@BackMe); - end; -if ((Me.State and gstAttacked) = 0) - and (StartTicks > GameTicks - 1000) then SDL_Delay(1000); - -if BestActions.Count > 0 then Me.State:= Me.State and not gstHHThinking; +BackMe:= Me^; +WalkMe:= BackMe; +if (Me.State and gstAttacked) = 0 then + if Targets.Count > 0 then + begin + Walk(@WalkMe); + if (StartTicks > GameTicks - 1500) then SDL_Delay(2000); + end else OutError('AI: no targets!?') +else begin + Walk(@WalkMe); + while (not StopThinking) and (BestActions.Count = 0) do + begin + SDL_Delay(100); + FillBonuses(true); + WalkMe:= BackMe; + Walk(@WalkMe) + end; + AwareOfExplosion(0, 0, 0) + end; + +Me.State:= Me.State and not gstHHThinking; ThinkThread:= nil end;