28 procedure ProcessBot; |
28 procedure ProcessBot; |
29 procedure FreeActionsList; |
29 procedure FreeActionsList; |
30 |
30 |
31 implementation |
31 implementation |
32 uses uConsts, SDLh, uAIMisc, uAIAmmoTests, uAIActions, |
32 uses uConsts, SDLh, uAIMisc, uAIAmmoTests, uAIActions, |
33 uAmmos, SysUtils{$IFDEF UNIX}{$IFNDEF ANDROID}, cthreads{$ENDIF}{$ENDIF}, uTypes, |
33 uAmmos, SysUtils{$IFNDEF USE_SDLTHREADS} {$IFDEF UNIX}, cthreads{$ENDIF} {$ENDIF}, uTypes, |
34 uVariables, uCommands, uUtils, uDebug; |
34 uVariables, uCommands, uUtils, uDebug; |
35 |
35 |
36 var BestActions: TActions; |
36 var BestActions: TActions; |
37 CanUseAmmo: array [TAmmoType] of boolean; |
37 CanUseAmmo: array [TAmmoType] of boolean; |
38 StopThinking: boolean; |
38 StopThinking: boolean; |
|
39 {$IFDEF USE_SDL_THREADS} |
39 ThinkThread: PSDL_Thread = nil; |
40 ThinkThread: PSDL_Thread = nil; |
|
41 {$ELSE} |
|
42 ThinkThread: TThreadID; |
|
43 {$ENDIF} |
40 hasThread: LongInt; |
44 hasThread: LongInt; |
41 |
45 |
42 procedure FreeActionsList; |
46 procedure FreeActionsList; |
43 begin |
47 begin |
44 AddFileLog('FreeActionsList called'); |
48 AddFileLog('FreeActionsList called'); |
115 if (Targets.ar[i].Score >= 0) and (not StopThinking) then |
119 if (Targets.ar[i].Score >= 0) and (not StopThinking) then |
116 begin |
120 begin |
117 with CurrentHedgehog^ do |
121 with CurrentHedgehog^ do |
118 a:= CurAmmoType; |
122 a:= CurAmmoType; |
119 aa:= a; |
123 aa:= a; |
|
124 {$IFDEF USE_SDLTHREADS} |
120 SDL_delay(0); //ThreadSwitch was only a hint |
125 SDL_delay(0); //ThreadSwitch was only a hint |
121 |
126 {$ELSE} |
|
127 ThreadSwitch(); |
|
128 {$ENDIF} |
122 repeat |
129 repeat |
123 if (CanUseAmmo[a]) and |
130 if (CanUseAmmo[a]) and |
124 ((not isMoved) or ((AmmoTests[a].flags and amtest_OnTurn) = 0)) then |
131 ((not isMoved) or ((AmmoTests[a].flags and amtest_OnTurn) = 0)) then |
125 begin |
132 begin |
126 {$HINTS OFF} |
133 {$HINTS OFF} |
363 exit |
370 exit |
364 end; |
371 end; |
365 |
372 |
366 FillBonuses((Me^.State and gstAttacked) <> 0); |
373 FillBonuses((Me^.State and gstAttacked) <> 0); |
367 AddFileLog('Enter Think Thread'); |
374 AddFileLog('Enter Think Thread'); |
368 {$IFDEF IPHONEOS} |
375 {$IFDEF USE_SDLTHREADS} |
369 //TODO: sdl_thread works on device but crashes in simulator, most likely because of outdated toolchain |
376 ThinkThread := SDL_CreateThread(@Think{$IFDEF SDL13}, nil{$ENDIF}, Me); |
|
377 {$ELSE} |
370 BeginThread(@Think, Me, ThinkThread); |
378 BeginThread(@Think, Me, ThinkThread); |
371 {$ELSE} |
|
372 ThinkThread := SDL_CreateThread(@Think{$IFDEF SDL13}, nil{$ENDIF}, Me); |
|
373 {$ENDIF} |
379 {$ENDIF} |
374 AddFileLog('Thread started'); |
380 AddFileLog('Thread started'); |
375 end; |
381 end; |
376 |
382 |
377 procedure ProcessBot; |
383 procedure ProcessBot; |