hedgewars/uAI.pas
changeset 6460 e3cc8ec51cd3
parent 6416 850b8dd3e6df
child 6462 0758fbec9b9f
equal deleted inserted replaced
6458:eadb2db1ae83 6460:e3cc8ec51cd3
    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;