close Warning: Can't synchronize with repository "(default)" (No changeset 184 in the repository). Look in the Trac log for more information.

Changeset 125 for trunk/UCore.pas


Ignore:
Timestamp:
Jun 17, 2017, 2:24:51 AM (7 years ago)
Author:
chronos
Message:
  • Modified: Introduced TClient class for real user accessing particular player or spectator. TPlayer is now just player in the game.
  • Fixed: Exception if no human player was selected.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UCore.pas

    r122 r125  
    5252    StoredDimension: TControlDimension;
    5353    RegistryContext: TRegistryContext;
     54    procedure DoPlayerChange(Sender: TObject);
    5455    procedure DoOnMove(CellFrom, CellTo: TCell; var CountOnce,
    5556      CountRepeat: Integer; Update: Boolean; var Confirm: Boolean);
     
    5859    procedure GameNewTurnExecute(Sender: TObject);
    5960    procedure AutoSave;
     61    function GetPlayer: TPlayer;
    6062    procedure LoadConfig;
    6163    procedure SaveConfig;
    6264    procedure CommandLineParams;
    6365    procedure ScaleDPI;
     66    procedure SelectClient;
    6467  public
    6568    Game: TGame;
    66     Player: TPlayer;
    6769    UseSingleView: Boolean;
    6870    DevelMode: Boolean;
     
    7072    AnimationSpeed: Integer;
    7173    AutoSaveEnabled: Boolean;
     74    CurrentClient: TClient;
    7275    procedure UpdateActions;
    7376    procedure Init;
     
    160163end;
    161164
     165function TCore.GetPlayer: TPlayer;
     166begin
     167  Result := Game.CurrentPlayer;
     168end;
     169
    162170procedure TCore.LoadConfig;
    163171begin
     
    196204    if FileExists(FileName) then begin
    197205      Game.LoadFromFile(FileName);
    198       Player := Game.Players.GetFirstHuman;
     206      SelectClient;
    199207      LastMapFileName := OpenDialog1.FileName;
    200       with Core.Game.CurrentPlayer do
     208      with Core.CurrentClient do
    201209        View.DestRect := Bounds(0, 0, FormMain.PaintBox1.Width, FormMain.PaintBox1.Height);
    202210      FormMain.AZoomAll.Execute;
     
    226234  end;
    227235  {$endif}
     236end;
     237
     238procedure TCore.SelectClient;
     239var
     240  FirstHuman: TPlayer;
     241begin
     242  FirstHuman := Game.Players.GetFirstHuman;
     243  if Assigned(FirstHuman) then CurrentClient := FirstHuman.Client
     244    else CurrentClient := TClient(Game.Clients.First);
    228245end;
    229246
     
    289306  if OpenDialog1.Execute then begin
    290307    Game.LoadFromFile(OpenDialog1.FileName);
    291     Player := Game.Players.GetFirstHuman;
     308    SelectClient;
    292309    LastMapFileName := OpenDialog1.FileName;
    293     with Core.Game.CurrentPlayer do
     310    with Core.CurrentClient do
    294311      View.DestRect := Bounds(0, 0, FormMain.PaintBox1.Width, FormMain.PaintBox1.Height);
    295312    FormMain.AZoomAll.Execute;
     
    304321    FormNew.Save(Game);
    305322    Game.New;
    306     Player := Game.Players.GetFirstHuman;
     323    SelectClient;
    307324    Game.Running := True;
    308325    FormMain.AZoomAll.Execute;
     
    365382  Game.OnWin := DoOnWin;
    366383  Game.OnNewTurn := GameNewTurnExecute;
     384  Game.OnPlayerChange := DoPlayerChange;
    367385  StoredDimension := TControlDimension.Create;
    368386  XMLConfig1.Filename := GetAppConfigDir(False) + 'Config.xml';
     
    376394  SaveConfig;
    377395  FreeAndNil(Game);
     396end;
     397
     398procedure TCore.DoPlayerChange(Sender: TObject);
     399begin
     400  if Assigned(Game.CurrentPlayer) and Assigned(Game.CurrentPlayer.Client) then
     401    CurrentClient := Game.CurrentPlayer.Client;
    378402end;
    379403
     
    389413  FInitialized := True;
    390414  LoadConfig;
    391   for I := 0 to Game.Players.Count - 1 do
    392     TPlayer(Game.Players[I]).View.DestRect := Rect(0, 0, FormMain.PaintBox1.Width,
     415  for I := 0 to Game.Clients.Count - 1 do
     416    TClient(Game.Clients[I]).View.DestRect := Rect(0, 0, FormMain.PaintBox1.Width,
    393417      FormMain.PaintBox1.Height);
    394418  Game.LoadConfig(XMLConfig1, 'Game');
     
    399423  if Game.FileName = '' then begin
    400424    Game.New;
    401     Player := Game.Players.GetFirstHuman;
     425    SelectClient;
    402426    Game.Running := True;
    403427    FormMain.AZoomAll.Execute;
Note: See TracChangeset for help on using the changeset viewer.