ChivalryServerLauncher/source/persist/Persist.GameList.pas

80 lines
1.6 KiB
ObjectPascal
Raw Permalink Normal View History

unit Persist.GameList;
interface
uses
Game.List;
type
TGameListPersist = class(TObject)
public
class procedure Load(const AFileName: string; AList: TGameList);
class procedure Save(const AFileName: string; AList: TGameList);
end;
implementation
uses
System.IOUtils,
System.SysUtils,
superobject,
Game.Base,
Game.Registry;
const
KeyClassName = 'className';
KeyLocation = 'location';
{ TGameListPersist }
class procedure TGameListPersist.Load(const AFileName: string; AList: TGameList);
var
inputList: ISuperObject;
inputGame: ISuperObject;
gameClass: TCustomGameClass;
begin
if not FileExists(AFileName) then
exit;
inputList := SO(TFile.ReadAllText(AFileName));
if Assigned(inputList) then
begin
for inputGame in inputList do
begin
gameClass := TGameRegistry.ByClassName(inputGame.S[KeyClassName]);
if Assigned(gameClass) then
AList.Add(gameClass.Create(inputGame.S[KeyLocation]));
end;
end;
end;
class procedure TGameListPersist.Save(const AFileName: string; AList: TGameList);
var
outputList: ISuperObject;
outputGame: ISuperObject;
game: TCustomGame;
begin
outputList := SA([]);
for game in AList do
begin
outputGame := SO();
outputGame.S[KeyClassName] := game.ClassName;
outputGame.S[KeyLocation] := game.Location;
// outputGame.B['active'] := True;
outputList.AsArray.Add(outputGame);
end;
if ForceDirectories(ExtractFilePath(AFileName)) then
TFile.WriteAllText(AFileName, outputList.AsJSon(True));
end;
end.