Changeset 23


Ignore:
Timestamp:
Sep 28, 2011, 8:34:06 PM (13 years ago)
Author:
george
Message:
  • Added: Introduced player pool for selection of players for new game.
  • Fixed: Deadlock on program exit during threads termination.
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/UMainForm.lfm

    r21 r23  
    55  Width = 514
    66  Caption = 'Tunneler'
    7   ClientHeight = 389
     7  ClientHeight = 385
    88  ClientWidth = 514
    99  Menu = MainMenu1
     
    1818  object StatusBar1: TStatusBar
    1919    Left = 0
    20     Height = 17
    21     Top = 372
     20    Height = 21
     21    Top = 364
    2222    Width = 514
    2323    Panels = <   
     
    4747  object Image1: TImage
    4848    Left = 0
    49     Height = 372
     49    Height = 364
    5050    Top = 0
    5151    Width = 514
  • trunk/Forms/UMainForm.pas

    r22 r23  
    4343    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    4444    procedure FormCreate(Sender: TObject);
     45    procedure FormDestroy(Sender: TObject);
    4546    procedure FormDeactivate(Sender: TObject);
    46     procedure FormDestroy(Sender: TObject);
    4747    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    4848    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
     
    6060  public
    6161    PersistentForm: TPersistentForm;
     62    Engine: TEngine;
    6263  end;
    6364
     
    8586    try
    8687      Engine.Lock.Acquire;
    87       StatusBar1.Panels[1].Text := IntToStr(TPlayer(Engine.Players[0]).Position.X) + ', ' +
    88         IntToStr(TPlayer(Engine.Players[0]).Position.Y) + ' ' +
    89         IntToStr(TPlayer(Engine.Players[0]).Direction);
     88      //StatusBar1.Panels[1].Text := IntToStr(TPlayer(Engine.Players[0]).Position.X) + ', ' +
     89      //  IntToStr(TPlayer(Engine.Players[0]).Position.Y) + ' ' +
     90      //  IntToStr(TPlayer(Engine.Players[0]).Direction);
    9091      StatusBar1.Panels[2].Text := FloatToStr(RoundTo(DrawDuration / OneMillisecond, -2));
    91       StatusBar1.Panels[3].Text := IntToStr(TPlayer(Engine.Players[0]).Bullets.Count);
     92      //StatusBar1.Panels[3].Text := IntToStr(TPlayer(Engine.Players[0]).Bullets.Count);
    9293    finally
    9394      Engine.Lock.Release;
     
    111112  Randomize;
    112113  DoubleBuffered := True;
     114  Engine := TEngine.Create;
    113115  Engine.Bitmap := Image1.Picture.Bitmap;
    114   with Engine do begin
    115     PlayerCount := 4;
    116     with TPlayer(Players[0]) do begin
    117       Name := 'Player 1';
    118       Keys.Left := 65;
    119       Keys.Down := 83;
    120       Keys.Right := 68;
    121       Keys.Up := 87;
    122       Keys.Shoot := 69;
    123     end;
    124     with TPlayer(Players[1]) do begin
    125       Name := 'Player 2';
    126       Keys.Left := 37;
    127       Keys.Down := 40;
    128       Keys.Right := 39;
    129       Keys.Up := 38;
    130       Keys.Shoot := 17;
    131     end;
    132     with TPlayer(Players[2]) do begin
    133       Name := 'Player 3';
    134       Keys.Left := 76;
    135       Keys.Down := 186;
    136       Keys.Right := 222;
    137       Keys.Up := 80;
    138       Keys.Shoot := 191;
    139     end;
    140     with TPlayer(Players[3]) do begin
    141       Name := 'Player 4';
    142       Keys.Left := 100;
    143       Keys.Down := 98;
    144       Keys.Right := 102;
    145       Keys.Up := 104;
    146       Keys.Shoot := 105;
    147     end;
    148   end;
    149116  Engine.NewGame;
    150117  Engine.Active := True;
     
    160127begin
    161128  PersistentForm.Free;
     129  Engine.Free;
    162130end;
    163131
  • trunk/Forms/UNewGameForm.lfm

    r22 r23  
    77  ClientHeight = 387
    88  ClientWidth = 560
    9   OnCreate = FormCreate
     9  OnShow = FormShow
    1010  LCLVersion = '0.9.31'
    1111  object ButtonStart: TButton
     
    3232  object Label1: TLabel
    3333    Left = 8
    34     Height = 14
     34    Height = 18
    3535    Top = 8
    36     Width = 44
     36    Width = 53
    3737    Caption = 'Players:'
    3838    ParentColor = False
  • trunk/Forms/UNewGameForm.pas

    r22 r23  
    1919    ListView1: TListView;
    2020    procedure ButtonStartClick(Sender: TObject);
    21     procedure FormCreate(Sender: TObject);
     21    procedure FormShow(Sender: TObject);
    2222    procedure ListView1Change(Sender: TObject; Item: TListItem;
    2323      Change: TItemChange);
     
    4040{ TNewGameForm }
    4141
    42 procedure TNewGameForm.FormCreate(Sender: TObject);
    43 var
    44   NewItem: TListItem;
    45   I: Integer;
    46 begin
    47   with ListView1 do try
    48     BeginUpdate;
    49     Clear;
    50     for I := 0 to Engine.Players.Count - 1 do
    51     with TPlayer(Engine.Players[I]) do begin
    52       NewItem := Items.Add;
    53       NewItem.Caption := Name;
    54       NewItem.SubItems.Add(IntToStr(Color));
    55       NewItem.SubItems.Add('');
    56       NewItem.Checked := Enabled;
    57       NewItem.Data := Pointer(Engine.Players[I]);
    58     end;
    59   finally
    60     EndUpdate;
    61   end;
    62 end;
    63 
    6442procedure TNewGameForm.ListView1Change(Sender: TObject; Item: TListItem;
    6543  Change: TItemChange);
     
    7452end;
    7553
     54procedure TNewGameForm.FormShow(Sender: TObject);
     55var
     56  NewItem: TListItem;
     57  I: Integer;
     58begin
     59  with ListView1 do try
     60    BeginUpdate;
     61    Clear;
     62    for I := 0 to Engine.PlayerPool.Count - 1 do
     63    with TPlayer(Engine.PlayerPool[I]) do begin
     64      NewItem := Items.Add;
     65      NewItem.Caption := Name;
     66      NewItem.SubItems.Add(IntToStr(Color));
     67      NewItem.SubItems.Add('');
     68      NewItem.Checked := Enabled;
     69      NewItem.Data := Pointer(Engine.PlayerPool[I]);
     70    end;
     71  finally
     72    EndUpdate;
     73  end;
     74end;
     75
    7676end.
    7777
  • trunk/Languages/tunneler.cs.po

    r22 r23  
    8080msgstr "Ovládání"
    8181
     82#: ucore.splayer
     83msgid "Player"
     84msgstr ""
     85
    8286#: uthreading.scurrentthreadnotfound
    8387msgid "Current thread ID %d not found in virtual thread list."
  • trunk/Languages/tunneler.po

    r22 r23  
    7272msgstr ""
    7373
     74#: ucore.splayer
     75msgid "Player"
     76msgstr ""
     77
    7478#: uthreading.scurrentthreadnotfound
    7579msgid "Current thread ID %d not found in virtual thread list."
  • trunk/UCore.pas

    r22 r23  
    88  Dialogs, Classes, SysUtils, Contnrs, Graphics, SpecializedMatrix, SpecializedList,
    99  IntfGraphics, FPImage, LCLType, SpecializedBitmap, GraphType, Math, URectangle,
    10   Syncobjs, UThreading;
     10  Syncobjs, UThreading, Forms;
    1111
    1212const
     
    173173    IntfImage: TLazIntfImage;
    174174    ClearBackground: Boolean;
    175     function GetPlayerCount: Integer;
    176175    procedure SetActive(const AValue: Boolean);
    177176    procedure SetBitmap(const AValue: TBitmap);
    178     procedure SetPlayerCount(const AValue: Integer);
    179177    procedure Redraw;
    180178    function IsInsideHouses(Pos: TPoint): Boolean;
    181179    procedure DoDrawToBitmap;
     180    procedure InitPlayerPool;
    182181  public
    183182    Keyboard: TKeyboard;
    184183    World: TWorld;
     184    PlayerPool: TListObject; // TListObject<TPlayer>
    185185    Players: TListObject; // TListObject<TPlayer>
    186186    Lock: TCriticalSection;
     
    189189    procedure ResizePlayerFrames;
    190190    procedure Tick;
    191     procedure Draw;
     191    procedure Draw(Thread: TVirtualThread);
    192192    procedure NewGame;
    193     property PlayerCount: Integer read GetPlayerCount write SetPlayerCount;
    194193    property Bitmap: TBitmap read FBitmap write SetBitmap;
    195194    property Active: Boolean read FActive write SetActive;
     
    213212implementation
    214213
     214resourcestring
     215  SPlayer = 'Player';
     216
     217
    215218function SwapBRComponent(Value: Integer): Integer;
    216219begin
     
    236239begin
    237240  repeat
    238     Engine.Draw;
     241    Engine.Draw(Self);
    239242    Sleep(50);
    240243  until Terminated;
     
    589592var
    590593  I: Integer;
     594  P: Integer;
    591595  Pos: TPoint;
    592596  D: Real;
     
    660664          end;
    661665        end else begin
    662           if (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer1TankBody)) or
    663           (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer1TankBody2)) then
    664             with TPlayer(Engine.Players[0]) do begin
    665               Shield := Shield - 1 / ShieldSteps;
    666             end;
    667           if (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer2Tankbody)) or
    668           (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer2TankBody2)) then
    669             with TPlayer(Engine.Players[1]) do begin
    670               Shield := Shield - 1 / ShieldSteps;
    671             end;
    672           if (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer3TankBody)) or
    673           (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer3TankBody2)) then
    674             with TPlayer(Engine.Players[2]) do begin
    675               Shield := Shield - 1 / ShieldSteps;
    676             end;
    677           if (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer4TankBody)) or
    678           (ItemsXY[Pos.X, Pos.Y] = Byte(miPlayer4TankBody2)) then
    679             with TPlayer(Engine.Players[3]) do begin
    680               Shield := Shield - 1 / ShieldSteps;
    681             end;
     666          for P := 0 to Engine.Players.Count - 1 do
     667          with TPlayer(Engine.Players[P]) do
     668          if Enabled and (TMatter(Engine.World.Matter[ItemsXY[Pos.X, Pos.Y]]).Kind = mkTankBody) then
     669            Shield := Shield - 1 / ShieldSteps;
    682670          if StopByDirt then Explosion(LastPos, BulletExplosionRange);
    683671          Bullets.Delete(I);
     
    753741      not (((Y = 0) or (Y = (HouseSize - 1))) and (X > ((HouseSize - DoorSize) div 2)) and
    754742      (X < ((HouseSize - 1 + DoorSize) div 2)))
    755       then Matter := Byte(miPlayer1Cannon) + Id * 4
     743      then Matter := Byte(miPlayer1Home) + Id * 4
    756744        else Matter := Byte(miSpace);
    757745      Engine.World.Surface.ItemsXY[House.Left + X,
     
    965953{ TEngine }
    966954
    967 function TEngine.GetPlayerCount: Integer;
    968 begin
    969   Result := Players.Count;
    970 end;
    971 
    972955procedure TEngine.SetActive(const AValue: Boolean);
    973956begin
     
    986969    FSystemThread.Start;
    987970  end else begin
     971    FDrawThread.Terminate;
     972    Application.ProcessMessages;
    988973    FreeAndNil(FDrawThread);
    989974    FreeAndNil(FSystemThread);
     
    994979begin
    995980  FBitmap := AValue;
    996   ResizePlayerFrames;
    997 end;
    998 
    999 procedure TEngine.SetPlayerCount(const AValue: Integer);
    1000 var
    1001   NewPlayer: TPlayer;
    1002   I: Integer;
    1003 begin
    1004   if Players.Count < AValue then begin
    1005     for I := Players.Count to AValue - 1 do begin
    1006       NewPlayer := TPlayer.Create;
    1007       NewPlayer.Engine := Self;
    1008       NewPlayer.Id := I;
    1009       NewPlayer.Name := 'Player ' + IntToStr(I);
    1010       NewPlayer.InitTanks;
    1011       Players.Add(NewPlayer);
    1012     end;
    1013   end else
    1014   if Players.Count > AValue then begin
    1015     for I := Players.Count - 1 downto AValue do
    1016       Players.Delete(I);
    1017   end;
    1018981  ResizePlayerFrames;
    1019982end;
     
    11251088end;
    11261089
     1090procedure TEngine.InitPlayerPool;
     1091var
     1092  I: Integer;
     1093begin
     1094  PlayerPool.Clear;
     1095  with TPlayer(PlayerPool.AddNew(TPlayer.Create)) do begin
     1096    Keys.Left := 65;
     1097    Keys.Down := 83;
     1098    Keys.Right := 68;
     1099    Keys.Up := 87;
     1100    Keys.Shoot := 69;
     1101    Enabled := True;
     1102  end;
     1103  with TPlayer(PlayerPool.AddNew(TPlayer.Create)) do begin
     1104    Keys.Left := 37;
     1105    Keys.Down := 40;
     1106    Keys.Right := 39;
     1107    Keys.Up := 38;
     1108    Keys.Shoot := 17;
     1109    Enabled := True;
     1110  end;
     1111  with TPlayer(PlayerPool.AddNew(TPlayer.Create)) do begin
     1112    Keys.Left := 76;
     1113    Keys.Down := 186;
     1114    Keys.Right := 222;
     1115    Keys.Up := 80;
     1116    Keys.Shoot := 191;
     1117  end;
     1118  with TPlayer(PlayerPool.AddNew(TPlayer.Create)) do begin
     1119    Keys.Left := 100;
     1120    Keys.Down := 98;
     1121    Keys.Right := 102;
     1122    Keys.Up := 104;
     1123    Keys.Shoot := 105;
     1124  end;
     1125  for I := 0 to PlayerPool.Count - 1 do
     1126  with TPlayer(PlayerPool[I]) do begin
     1127    Engine := Self;
     1128    Id := I;
     1129    InitTanks;
     1130    Name := SPlayer + ' ' + IntToStr(I + 1);
     1131  end;
     1132end;
     1133
    11271134procedure TEngine.ResizePlayerFrames;
    11281135var
     
    11591166  FBitmapLock := TCriticalSection.Create;
    11601167  IntfImage := TLazIntfImage.Create(1, 1);
     1168  PlayerPool := TListObject.Create;
    11611169  Players := TListObject.Create;
     1170  Players.OwnsObjects := False;
    11621171  Keyboard := TKeyboard.Create;
    11631172  World := TWorld.Create;
    11641173  World.Engine := Self;
     1174  InitPlayerPool;
    11651175  Redraw;
    11661176end;
     
    11721182  FBitmapLock.Free;
    11731183  IntfImage.Free;
     1184  PlayerPool.Free;
    11741185  Players.Free;
    11751186  Keyboard.Free;
     
    11941205end;
    11951206
    1196 procedure TEngine.Draw;
     1207procedure TEngine.Draw(Thread: TVirtualThread);
    11971208var
    11981209  I: Integer;
     
    12101221      Lock.Release;
    12111222    end;
    1212     Synchronize(DoDrawToBitmap);
     1223    if not Thread.Terminated then Thread.Synchronize(DoDrawToBitmap);
    12131224  end;
    12141225end;
     
    12191230  I2: Integer;
    12201231begin
     1232  Players.Clear;
     1233  for I := 0 to PlayerPool.Count - 1 do
     1234  with TPlayer(PlayerPool[I]) do
     1235  if Enabled then
     1236    Players.Add(PlayerPool[I]);
     1237  ResizePlayerFrames;
     1238
    12211239  World.Generate;
    12221240
     
    12271245end;
    12281246
    1229 initialization
    1230 
    1231 Engine := TEngine.Create;
    1232 
    1233 finalization
    1234 
    1235 Engine.Free;
    1236 
    12371247end.
    12381248
  • trunk/tunneler.lpi

    r22 r23  
    4646      </Item4>
    4747    </RequiredPackages>
    48     <Units Count="67">
     48    <Units Count="71">
    4949      <Unit0>
    5050        <Filename Value="tunneler.lpr"/>
    5151        <IsPartOfProject Value="True"/>
    5252        <UnitName Value="tunneler"/>
    53         <EditorIndex Value="5"/>
     53        <EditorIndex Value="7"/>
    5454        <WindowIndex Value="0"/>
    5555        <TopLine Value="1"/>
    5656        <CursorPos X="61" Y="10"/>
    57         <UsageCount Value="103"/>
     57        <UsageCount Value="114"/>
    5858        <Loaded Value="True"/>
    5959      </Unit0>
     
    6666        <TopLine Value="203"/>
    6767        <CursorPos X="68" Y="209"/>
    68         <UsageCount Value="92"/>
     68        <UsageCount Value="91"/>
    6969      </Unit1>
    7070      <Unit2>
     
    7575        <EditorIndex Value="0"/>
    7676        <WindowIndex Value="0"/>
    77         <TopLine Value="208"/>
    78         <CursorPos X="3" Y="68"/>
    79         <UsageCount Value="103"/>
     77        <TopLine Value="954"/>
     78        <CursorPos X="9" Y="970"/>
     79        <UsageCount Value="114"/>
    8080        <Loaded Value="True"/>
    8181      </Unit2>
     
    8686        <TopLine Value="35"/>
    8787        <CursorPos X="20" Y="51"/>
    88         <UsageCount Value="6"/>
     88        <UsageCount Value="5"/>
    8989      </Unit3>
    9090      <Unit4>
     
    9494        <TopLine Value="52"/>
    9595        <CursorPos X="18" Y="57"/>
    96         <UsageCount Value="5"/>
     96        <UsageCount Value="4"/>
    9797      </Unit4>
    9898      <Unit5>
     
    102102        <TopLine Value="1"/>
    103103        <CursorPos X="61" Y="11"/>
    104         <UsageCount Value="20"/>
     104        <UsageCount Value="19"/>
    105105      </Unit5>
    106106      <Unit6>
     
    109109        <TopLine Value="19"/>
    110110        <CursorPos X="4" Y="36"/>
    111         <UsageCount Value="12"/>
     111        <UsageCount Value="11"/>
    112112      </Unit6>
    113113      <Unit7>
     
    117117        <TopLine Value="2417"/>
    118118        <CursorPos X="3" Y="2459"/>
    119         <UsageCount Value="8"/>
     119        <UsageCount Value="7"/>
    120120      </Unit7>
    121121      <Unit8>
    122122        <Filename Value="../../../lazarus/lcl/include/rasterimage.inc"/>
    123         <WindowIndex Value="0"/>
    124         <TopLine Value="548"/>
    125         <CursorPos X="22" Y="552"/>
    126         <UsageCount Value="6"/>
     123        <EditorIndex Value="1"/>
     124        <WindowIndex Value="0"/>
     125        <TopLine Value="453"/>
     126        <CursorPos X="1" Y="470"/>
     127        <UsageCount Value="10"/>
     128        <Loaded Value="True"/>
    127129      </Unit8>
    128130      <Unit9>
     
    131133        <TopLine Value="34"/>
    132134        <CursorPos X="1" Y="54"/>
    133         <UsageCount Value="4"/>
     135        <UsageCount Value="3"/>
    134136      </Unit9>
    135137      <Unit10>
     
    139141        <TopLine Value="1314"/>
    140142        <CursorPos X="42" Y="1327"/>
    141         <UsageCount Value="8"/>
     143        <UsageCount Value="7"/>
    142144      </Unit10>
    143145      <Unit11>
    144146        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericMatrix.inc"/>
    145         <EditorIndex Value="10"/>
     147        <EditorIndex Value="16"/>
    146148        <WindowIndex Value="0"/>
    147149        <TopLine Value="154"/>
    148150        <CursorPos X="3" Y="156"/>
    149         <UsageCount Value="43"/>
     151        <UsageCount Value="49"/>
    150152        <Loaded Value="True"/>
    151153      </Unit11>
     
    156158        <TopLine Value="16"/>
    157159        <CursorPos X="22" Y="33"/>
    158         <UsageCount Value="18"/>
     160        <UsageCount Value="17"/>
    159161      </Unit12>
    160162      <Unit13>
     
    163165        <TopLine Value="16"/>
    164166        <CursorPos X="19" Y="32"/>
    165         <UsageCount Value="6"/>
     167        <UsageCount Value="5"/>
    166168      </Unit13>
    167169      <Unit14>
     
    171173        <TopLine Value="54"/>
    172174        <CursorPos X="3" Y="70"/>
    173         <UsageCount Value="9"/>
     175        <UsageCount Value="8"/>
    174176      </Unit14>
    175177      <Unit15>
    176178        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericList.inc"/>
    177         <WindowIndex Value="0"/>
    178         <TopLine Value="10"/>
    179         <CursorPos X="21" Y="13"/>
    180         <UsageCount Value="21"/>
     179        <EditorIndex Value="2"/>
     180        <WindowIndex Value="0"/>
     181        <TopLine Value="115"/>
     182        <CursorPos X="1" Y="132"/>
     183        <UsageCount Value="26"/>
     184        <Loaded Value="True"/>
    181185      </Unit15>
    182186      <Unit16>
     
    185189        <TopLine Value="783"/>
    186190        <CursorPos X="3" Y="785"/>
    187         <UsageCount Value="3"/>
     191        <UsageCount Value="2"/>
    188192      </Unit16>
    189193      <Unit17>
     
    192196        <TopLine Value="498"/>
    193197        <CursorPos X="11" Y="515"/>
    194         <UsageCount Value="7"/>
     198        <UsageCount Value="6"/>
    195199      </Unit17>
    196200      <Unit18>
     
    200204        <TopLine Value="665"/>
    201205        <CursorPos X="27" Y="682"/>
    202         <UsageCount Value="5"/>
     206        <UsageCount Value="4"/>
    203207      </Unit18>
    204208      <Unit19>
     
    207211        <TopLine Value="112"/>
    208212        <CursorPos X="10" Y="114"/>
    209         <UsageCount Value="5"/>
     213        <UsageCount Value="4"/>
    210214      </Unit19>
    211215      <Unit20>
     
    215219        <TopLine Value="1035"/>
    216220        <CursorPos X="15" Y="1052"/>
    217         <UsageCount Value="4"/>
     221        <UsageCount Value="3"/>
    218222      </Unit20>
    219223      <Unit21>
     
    222226        <TopLine Value="3003"/>
    223227        <CursorPos X="3" Y="3010"/>
    224         <UsageCount Value="4"/>
     228        <UsageCount Value="3"/>
    225229      </Unit21>
    226230      <Unit22>
     
    229233        <TopLine Value="392"/>
    230234        <CursorPos X="1" Y="411"/>
    231         <UsageCount Value="4"/>
     235        <UsageCount Value="3"/>
    232236      </Unit22>
    233237      <Unit23>
     
    236240        <TopLine Value="85"/>
    237241        <CursorPos X="10" Y="102"/>
    238         <UsageCount Value="6"/>
     242        <UsageCount Value="5"/>
    239243      </Unit23>
    240244      <Unit24>
     
    243247        <TopLine Value="157"/>
    244248        <CursorPos X="3" Y="159"/>
    245         <UsageCount Value="6"/>
     249        <UsageCount Value="5"/>
    246250      </Unit24>
    247251      <Unit25>
     
    250254        <TopLine Value="4360"/>
    251255        <CursorPos X="19" Y="4365"/>
    252         <UsageCount Value="12"/>
     256        <UsageCount Value="11"/>
    253257      </Unit25>
    254258      <Unit26>
     
    257261        <TopLine Value="4226"/>
    258262        <CursorPos X="1" Y="4254"/>
    259         <UsageCount Value="4"/>
     263        <UsageCount Value="3"/>
    260264      </Unit26>
    261265      <Unit27>
     
    267271        <TopLine Value="15"/>
    268272        <CursorPos X="39" Y="45"/>
    269         <UsageCount Value="71"/>
     273        <UsageCount Value="70"/>
    270274      </Unit27>
    271275      <Unit28>
     
    274278        <TopLine Value="858"/>
    275279        <CursorPos X="1" Y="875"/>
    276         <UsageCount Value="5"/>
     280        <UsageCount Value="4"/>
    277281      </Unit28>
    278282      <Unit29>
     
    281285        <TopLine Value="2102"/>
    282286        <CursorPos X="1" Y="2119"/>
    283         <UsageCount Value="5"/>
     287        <UsageCount Value="4"/>
    284288      </Unit29>
    285289      <Unit30>
     
    288292        <TopLine Value="58"/>
    289293        <CursorPos X="14" Y="75"/>
    290         <UsageCount Value="14"/>
     294        <UsageCount Value="13"/>
    291295      </Unit30>
    292296      <Unit31>
     
    295299        <TopLine Value="1"/>
    296300        <CursorPos X="34" Y="12"/>
    297         <UsageCount Value="10"/>
     301        <UsageCount Value="9"/>
    298302      </Unit31>
    299303      <Unit32>
     
    303307        <TopLine Value="3131"/>
    304308        <CursorPos X="42" Y="3148"/>
    305         <UsageCount Value="15"/>
     309        <UsageCount Value="14"/>
    306310      </Unit32>
    307311      <Unit33>
     
    311315        <TopLine Value="104"/>
    312316        <CursorPos X="3" Y="91"/>
    313         <UsageCount Value="6"/>
     317        <UsageCount Value="5"/>
    314318      </Unit33>
    315319      <Unit34>
     
    318322        <TopLine Value="325"/>
    319323        <CursorPos X="3" Y="327"/>
    320         <UsageCount Value="6"/>
     324        <UsageCount Value="5"/>
    321325      </Unit34>
    322326      <Unit35>
     
    326330        <TopLine Value="173"/>
    327331        <CursorPos X="5" Y="190"/>
    328         <UsageCount Value="7"/>
     332        <UsageCount Value="6"/>
    329333      </Unit35>
    330334      <Unit36>
    331335        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericBitmap.inc"/>
    332         <EditorIndex Value="9"/>
     336        <EditorIndex Value="15"/>
    333337        <WindowIndex Value="0"/>
    334338        <TopLine Value="1"/>
    335339        <CursorPos X="20" Y="26"/>
    336         <UsageCount Value="30"/>
     340        <UsageCount Value="36"/>
    337341        <Loaded Value="True"/>
    338342      </Unit36>
     
    340344        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Specialized/SpecializedBitmap.pas"/>
    341345        <UnitName Value="SpecializedBitmap"/>
    342         <EditorIndex Value="8"/>
     346        <EditorIndex Value="14"/>
    343347        <WindowIndex Value="0"/>
    344348        <TopLine Value="47"/>
    345349        <CursorPos X="22" Y="21"/>
    346         <UsageCount Value="19"/>
     350        <UsageCount Value="25"/>
    347351        <Loaded Value="True"/>
    348352      </Unit37>
     
    353357        <TopLine Value="91"/>
    354358        <CursorPos X="19" Y="107"/>
    355         <UsageCount Value="8"/>
     359        <UsageCount Value="7"/>
    356360      </Unit38>
    357361      <Unit39>
     
    360364        <TopLine Value="1"/>
    361365        <CursorPos X="1" Y="1"/>
    362         <UsageCount Value="7"/>
     366        <UsageCount Value="6"/>
    363367      </Unit39>
    364368      <Unit40>
     
    367371        <TopLine Value="158"/>
    368372        <CursorPos X="23" Y="175"/>
    369         <UsageCount Value="6"/>
     373        <UsageCount Value="5"/>
    370374      </Unit40>
    371375      <Unit41>
     
    375379        <TopLine Value="1"/>
    376380        <CursorPos X="9" Y="69"/>
    377         <UsageCount Value="6"/>
     381        <UsageCount Value="5"/>
    378382      </Unit41>
    379383      <Unit42>
     
    383387        <TopLine Value="1"/>
    384388        <CursorPos X="1" Y="1"/>
    385         <UsageCount Value="6"/>
     389        <UsageCount Value="5"/>
    386390      </Unit42>
    387391      <Unit43>
     
    391395        <TopLine Value="1"/>
    392396        <CursorPos X="14" Y="20"/>
    393         <UsageCount Value="6"/>
     397        <UsageCount Value="5"/>
    394398      </Unit43>
    395399      <Unit44>
     
    397401        <IsPartOfProject Value="True"/>
    398402        <UnitName Value="UPlatform"/>
    399         <UsageCount Value="62"/>
     403        <UsageCount Value="73"/>
    400404      </Unit44>
    401405      <Unit45>
     
    405409        <TopLine Value="929"/>
    406410        <CursorPos X="5" Y="932"/>
    407         <UsageCount Value="11"/>
     411        <UsageCount Value="10"/>
    408412      </Unit45>
    409413      <Unit46>
     
    413417        <TopLine Value="1"/>
    414418        <CursorPos X="50" Y="5"/>
    415         <UsageCount Value="10"/>
     419        <UsageCount Value="9"/>
    416420      </Unit46>
    417421      <Unit47>
     
    421425        <TopLine Value="1"/>
    422426        <CursorPos X="36" Y="15"/>
    423         <UsageCount Value="6"/>
     427        <UsageCount Value="5"/>
    424428      </Unit47>
    425429      <Unit48>
     
    428432        <TopLine Value="330"/>
    429433        <CursorPos X="35" Y="338"/>
    430         <UsageCount Value="15"/>
     434        <UsageCount Value="14"/>
    431435      </Unit48>
    432436      <Unit49>
     
    436440        <TopLine Value="58"/>
    437441        <CursorPos X="5" Y="75"/>
    438         <UsageCount Value="7"/>
     442        <UsageCount Value="6"/>
    439443      </Unit49>
    440444      <Unit50>
     
    442446        <IsPartOfProject Value="True"/>
    443447        <UnitName Value="URectangle"/>
    444         <EditorIndex Value="13"/>
     448        <EditorIndex Value="19"/>
    445449        <WindowIndex Value="0"/>
    446450        <TopLine Value="120"/>
    447451        <CursorPos X="44" Y="150"/>
    448         <UsageCount Value="47"/>
     452        <UsageCount Value="58"/>
    449453        <Loaded Value="True"/>
    450454      </Unit50>
     
    454458        <TopLine Value="147"/>
    455459        <CursorPos X="10" Y="84"/>
    456         <UsageCount Value="10"/>
     460        <UsageCount Value="9"/>
    457461      </Unit51>
    458462      <Unit52>
     
    462466        <TopLine Value="520"/>
    463467        <CursorPos X="35" Y="531"/>
    464         <UsageCount Value="9"/>
     468        <UsageCount Value="8"/>
    465469      </Unit52>
    466470      <Unit53>
     
    468472        <IsPartOfProject Value="True"/>
    469473        <UnitName Value="UPersistentForm"/>
    470         <EditorIndex Value="11"/>
     474        <EditorIndex Value="17"/>
    471475        <WindowIndex Value="0"/>
    472476        <TopLine Value="69"/>
    473477        <CursorPos X="3" Y="90"/>
    474         <UsageCount Value="40"/>
     478        <UsageCount Value="51"/>
    475479        <Loaded Value="True"/>
    476480      </Unit53>
     
    479483        <IsPartOfProject Value="True"/>
    480484        <UnitName Value="UApplicationInfo"/>
    481         <EditorIndex Value="12"/>
     485        <EditorIndex Value="18"/>
    482486        <WindowIndex Value="0"/>
    483487        <TopLine Value="1"/>
    484488        <CursorPos X="70" Y="42"/>
    485         <UsageCount Value="40"/>
     489        <UsageCount Value="51"/>
    486490        <Loaded Value="True"/>
    487491      </Unit54>
     
    490494        <IsPartOfProject Value="True"/>
    491495        <UnitName Value="URegistry"/>
    492         <UsageCount Value="39"/>
     496        <UsageCount Value="50"/>
    493497      </Unit55>
    494498      <Unit56>
     
    497501        <TopLine Value="71"/>
    498502        <CursorPos X="10" Y="84"/>
    499         <UsageCount Value="8"/>
     503        <UsageCount Value="7"/>
    500504      </Unit56>
    501505      <Unit57>
     
    504508        <TopLine Value="167"/>
    505509        <CursorPos X="3" Y="169"/>
    506         <UsageCount Value="8"/>
     510        <UsageCount Value="7"/>
    507511      </Unit57>
    508512      <Unit58>
     
    511515        <TopLine Value="466"/>
    512516        <CursorPos X="17" Y="470"/>
    513         <UsageCount Value="8"/>
     517        <UsageCount Value="7"/>
    514518      </Unit58>
    515519      <Unit59>
     
    517521        <IsPartOfProject Value="True"/>
    518522        <UnitName Value="UThreading"/>
    519         <EditorIndex Value="7"/>
    520         <WindowIndex Value="0"/>
    521         <TopLine Value="79"/>
    522         <CursorPos X="13" Y="95"/>
    523         <UsageCount Value="31"/>
     523        <EditorIndex Value="9"/>
     524        <WindowIndex Value="0"/>
     525        <TopLine Value="34"/>
     526        <CursorPos X="35" Y="51"/>
     527        <UsageCount Value="42"/>
    524528        <Loaded Value="True"/>
    525529      </Unit59>
     
    527531        <Filename Value="/usr/share/fpcsrc/2.4.2/packages/fcl-base/src/contnrs.pp"/>
    528532        <UnitName Value="contnrs"/>
    529         <EditorIndex Value="6"/>
     533        <EditorIndex Value="8"/>
    530534        <WindowIndex Value="0"/>
    531535        <TopLine Value="55"/>
    532536        <CursorPos X="3" Y="72"/>
    533         <UsageCount Value="15"/>
     537        <UsageCount Value="21"/>
    534538        <Loaded Value="True"/>
    535539      </Unit60>
     
    540544        <ResourceBaseClass Value="Form"/>
    541545        <UnitName Value="UNewGameForm"/>
    542         <EditorIndex Value="1"/>
    543         <WindowIndex Value="0"/>
    544         <TopLine Value="43"/>
    545         <CursorPos X="47" Y="68"/>
    546         <UsageCount Value="31"/>
     546        <EditorIndex Value="3"/>
     547        <WindowIndex Value="0"/>
     548        <TopLine Value="41"/>
     549        <CursorPos X="1" Y="74"/>
     550        <UsageCount Value="42"/>
    547551        <Loaded Value="True"/>
    548552        <LoadedDesigner Value="True"/>
     
    555559        <ResourceBaseClass Value="Form"/>
    556560        <UnitName Value="UMainForm"/>
    557         <EditorIndex Value="2"/>
    558         <WindowIndex Value="0"/>
    559         <TopLine Value="112"/>
    560         <CursorPos X="54" Y="140"/>
    561         <UsageCount Value="31"/>
     561        <EditorIndex Value="4"/>
     562        <WindowIndex Value="0"/>
     563        <TopLine Value="29"/>
     564        <CursorPos X="1" Y="46"/>
     565        <UsageCount Value="42"/>
    562566        <Loaded Value="True"/>
    563567        <LoadedDesigner Value="True"/>
     
    570574        <ResourceBaseClass Value="Form"/>
    571575        <UnitName Value="UMapForm"/>
    572         <EditorIndex Value="14"/>
     576        <EditorIndex Value="20"/>
    573577        <WindowIndex Value="0"/>
    574578        <TopLine Value="1"/>
    575579        <CursorPos X="10" Y="5"/>
    576         <UsageCount Value="31"/>
     580        <UsageCount Value="42"/>
    577581        <Loaded Value="True"/>
    578582        <LoadedDesigner Value="True"/>
     
    581585        <Filename Value="../../PascalClassLibrary/CoolTranslator/ULanguages.pas"/>
    582586        <UnitName Value="ULanguages"/>
    583         <EditorIndex Value="4"/>
     587        <EditorIndex Value="6"/>
    584588        <WindowIndex Value="0"/>
    585589        <TopLine Value="3"/>
    586590        <CursorPos X="14" Y="20"/>
    587         <UsageCount Value="15"/>
     591        <UsageCount Value="21"/>
    588592        <Loaded Value="True"/>
    589593      </Unit64>
     
    591595        <Filename Value="../../PascalClassLibrary/CoolTranslator/UCoolTranslator.pas"/>
    592596        <UnitName Value="UCoolTranslator"/>
    593         <EditorIndex Value="3"/>
     597        <EditorIndex Value="5"/>
    594598        <WindowIndex Value="0"/>
    595599        <TopLine Value="31"/>
    596600        <CursorPos X="39" Y="33"/>
    597         <UsageCount Value="15"/>
     601        <UsageCount Value="21"/>
    598602        <Loaded Value="True"/>
    599603      </Unit65>
     
    604608        <TopLine Value="1206"/>
    605609        <CursorPos X="3" Y="1223"/>
    606         <UsageCount Value="9"/>
     610        <UsageCount Value="8"/>
    607611      </Unit66>
     612      <Unit67>
     613        <Filename Value="/usr/share/fpcsrc/2.4.2/rtl/objpas/classes/classesh.inc"/>
     614        <EditorIndex Value="10"/>
     615        <WindowIndex Value="0"/>
     616        <TopLine Value="1508"/>
     617        <CursorPos X="17" Y="1512"/>
     618        <UsageCount Value="10"/>
     619        <Loaded Value="True"/>
     620      </Unit67>
     621      <Unit68>
     622        <Filename Value="/usr/share/fpcsrc/2.4.2/rtl/unix/tthread.inc"/>
     623        <EditorIndex Value="11"/>
     624        <WindowIndex Value="0"/>
     625        <TopLine Value="1"/>
     626        <CursorPos X="33" Y="15"/>
     627        <UsageCount Value="10"/>
     628        <Loaded Value="True"/>
     629      </Unit68>
     630      <Unit69>
     631        <Filename Value="/usr/share/fpcsrc/2.4.2/rtl/inc/threadh.inc"/>
     632        <EditorIndex Value="12"/>
     633        <WindowIndex Value="0"/>
     634        <TopLine Value="50"/>
     635        <CursorPos X="5" Y="67"/>
     636        <UsageCount Value="10"/>
     637        <Loaded Value="True"/>
     638      </Unit69>
     639      <Unit70>
     640        <Filename Value="/usr/share/fpcsrc/2.4.2/rtl/inc/thread.inc"/>
     641        <EditorIndex Value="13"/>
     642        <WindowIndex Value="0"/>
     643        <TopLine Value="164"/>
     644        <CursorPos X="27" Y="167"/>
     645        <UsageCount Value="10"/>
     646        <Loaded Value="True"/>
     647      </Unit70>
    608648    </Units>
    609649    <JumpHistory Count="30" HistoryIndex="29">
    610650      <Position1>
    611         <Filename Value="UCore.pas"/>
    612         <Caret Line="110" Column="74" TopLine="94"/>
     651        <Filename Value="Common/UThreading.pas"/>
     652        <Caret Line="272" Column="11" TopLine="255"/>
    613653      </Position1>
    614654      <Position2>
    615655        <Filename Value="UCore.pas"/>
    616         <Caret Line="311" Column="30" TopLine="295"/>
     656        <Caret Line="241" Column="14" TopLine="238"/>
    617657      </Position2>
    618658      <Position3>
    619659        <Filename Value="UCore.pas"/>
    620         <Caret Line="348" Column="30" TopLine="332"/>
     660        <Caret Line="1221" Column="9" TopLine="1205"/>
    621661      </Position3>
    622662      <Position4>
    623         <Filename Value="UCore.pas"/>
    624         <Caret Line="438" Column="41" TopLine="420"/>
     663        <Filename Value="Common/UThreading.pas"/>
     664        <Caret Line="167" Column="19" TopLine="158"/>
    625665      </Position4>
    626666      <Position5>
    627667        <Filename Value="UCore.pas"/>
    628         <Caret Line="445" Column="39" TopLine="428"/>
     668        <Caret Line="972" Column="57" TopLine="955"/>
    629669      </Position5>
    630670      <Position6>
    631671        <Filename Value="UCore.pas"/>
    632         <Caret Line="475" Column="61" TopLine="455"/>
     672        <Caret Line="16" Column="41" TopLine="1"/>
    633673      </Position6>
    634674      <Position7>
    635         <Filename Value="UCore.pas"/>
    636         <Caret Line="519" Column="64" TopLine="501"/>
     675        <Filename Value="Common/UThreading.pas"/>
     676        <Caret Line="272" Column="5" TopLine="255"/>
    637677      </Position7>
    638678      <Position8>
    639         <Filename Value="UCore.pas"/>
    640         <Caret Line="535" Column="23" TopLine="518"/>
     679        <Filename Value="Common/UThreading.pas"/>
     680        <Caret Line="274" Column="54" TopLine="255"/>
    641681      </Position8>
    642682      <Position9>
    643683        <Filename Value="UCore.pas"/>
    644         <Caret Line="564" Column="18" TopLine="547"/>
     684        <Caret Line="972" Column="31" TopLine="957"/>
    645685      </Position9>
    646686      <Position10>
    647         <Filename Value="UCore.pas"/>
    648         <Caret Line="93" Column="41" TopLine="76"/>
     687        <Filename Value="Common/UThreading.pas"/>
     688        <Caret Line="43" Column="48" TopLine="26"/>
    649689      </Position10>
    650690      <Position11>
    651691        <Filename Value="UCore.pas"/>
    652         <Caret Line="756" Column="45" TopLine="756"/>
     692        <Caret Line="960" Column="29" TopLine="947"/>
    653693      </Position11>
    654694      <Position12>
    655695        <Filename Value="UCore.pas"/>
    656         <Caret Line="71" Column="3" TopLine="52"/>
     696        <Caret Line="241" Column="14" TopLine="238"/>
    657697      </Position12>
    658698      <Position13>
    659         <Filename Value="UCore.pas"/>
    660         <Caret Line="567" Column="55" TopLine="548"/>
     699        <Filename Value="Common/UThreading.pas"/>
     700        <Caret Line="61" Column="31" TopLine="53"/>
    661701      </Position13>
    662702      <Position14>
    663         <Filename Value="UCore.pas"/>
    664         <Caret Line="641" Column="47" TopLine="614"/>
     703        <Filename Value="Common/UThreading.pas"/>
     704        <Caret Line="51" Column="33" TopLine="41"/>
    665705      </Position14>
    666706      <Position15>
    667707        <Filename Value="UCore.pas"/>
    668         <Caret Line="59" Column="75" TopLine="52"/>
     708        <Caret Line="1205" Column="23" TopLine="1205"/>
    669709      </Position15>
    670710      <Position16>
    671711        <Filename Value="UCore.pas"/>
    672         <Caret Line="633" Column="52" TopLine="616"/>
     712        <Caret Line="204" Column="32" TopLine="191"/>
    673713      </Position16>
    674714      <Position17>
    675         <Filename Value="UCore.pas"/>
    676         <Caret Line="691" Column="37" TopLine="675"/>
     715        <Filename Value="Common/UThreading.pas"/>
     716        <Caret Line="61" Column="26" TopLine="43"/>
    677717      </Position17>
    678718      <Position18>
    679         <Filename Value="UCore.pas"/>
    680         <Caret Line="653" Column="48" TopLine="636"/>
     719        <Filename Value="Common/UThreading.pas"/>
     720        <Caret Line="51" Column="35" TopLine="34"/>
    681721      </Position18>
    682722      <Position19>
    683         <Filename Value="UCore.pas"/>
    684         <Caret Line="685" Column="59" TopLine="652"/>
     723        <Filename Value="/usr/share/fpcsrc/2.4.2/rtl/unix/tthread.inc"/>
     724        <Caret Line="6" Column="64" TopLine="1"/>
    685725      </Position19>
    686726      <Position20>
    687727        <Filename Value="UCore.pas"/>
    688         <Caret Line="677" Column="43" TopLine="650"/>
     728        <Caret Line="971" Column="35" TopLine="955"/>
    689729      </Position20>
    690730      <Position21>
    691         <Filename Value="UCore.pas"/>
    692         <Caret Line="713" Column="89" TopLine="696"/>
     731        <Filename Value="../../../lazarus/lcl/include/rasterimage.inc"/>
     732        <Caret Line="470" Column="1" TopLine="453"/>
    693733      </Position21>
    694734      <Position22>
    695735        <Filename Value="UCore.pas"/>
    696         <Caret Line="714" Column="58" TopLine="697"/>
     736        <Caret Line="966" Column="65" TopLine="955"/>
    697737      </Position22>
    698738      <Position23>
    699739        <Filename Value="UCore.pas"/>
    700         <Caret Line="722" Column="88" TopLine="705"/>
     740        <Caret Line="971" Column="1" TopLine="955"/>
    701741      </Position23>
    702742      <Position24>
    703743        <Filename Value="UCore.pas"/>
    704         <Caret Line="754" Column="36" TopLine="737"/>
     744        <Caret Line="1180" Column="1" TopLine="1163"/>
    705745      </Position24>
    706746      <Position25>
    707         <Filename Value="UCore.pas"/>
    708         <Caret Line="755" Column="36" TopLine="737"/>
     747        <Filename Value="Forms/UMainForm.pas"/>
     748        <Caret Line="46" Column="1" TopLine="29"/>
    709749      </Position25>
    710750      <Position26>
    711         <Filename Value="UCore.pas"/>
    712         <Caret Line="778" Column="42" TopLine="749"/>
     751        <Filename Value="Forms/UNewGameForm.pas"/>
     752        <Caret Line="22" Column="1" TopLine="5"/>
    713753      </Position26>
    714754      <Position27>
    715         <Filename Value="UCore.pas"/>
    716         <Caret Line="775" Column="19" TopLine="758"/>
     755        <Filename Value="Forms/UNewGameForm.pas"/>
     756        <Caret Line="74" Column="1" TopLine="41"/>
    717757      </Position27>
    718758      <Position28>
    719759        <Filename Value="UCore.pas"/>
    720         <Caret Line="779" Column="31" TopLine="752"/>
     760        <Caret Line="971" Column="1" TopLine="954"/>
    721761      </Position28>
    722762      <Position29>
    723763        <Filename Value="UCore.pas"/>
    724         <Caret Line="902" Column="40" TopLine="891"/>
     764        <Caret Line="972" Column="1" TopLine="954"/>
    725765      </Position29>
    726766      <Position30>
    727767        <Filename Value="UCore.pas"/>
    728         <Caret Line="913" Column="63" TopLine="890"/>
     768        <Caret Line="973" Column="1" TopLine="954"/>
    729769      </Position30>
    730770    </JumpHistory>
Note: See TracChangeset for help on using the changeset viewer.