Complete BigTask
Sync changed files to Google Drive / sync (push) Successful in 21m38s

This commit is contained in:
admin_d committed 2026-09-17 13:48:56 +05:00
1 parent 3d5edaa086
commit 27cf50da27
4 files changed
+345 -12

No files matched your search

+107 -1
View File
@@ -15,6 +15,13 @@ type
dsiSeekReadConsistency
);
TTerrainReadinessDiagnosticStageId = (
trsiRxTilesLoad,
trsiMapStreamLoad,
trsiMapHeader,
trsiTileRecords
);
TOptionalString = record
HasValue: Boolean;
Value: string;
@@ -35,6 +42,11 @@ type
Value: TDiagnosticStageId;
end;
TOptionalTerrainReadinessDiagnosticStageId = record
HasValue: Boolean;
Value: TTerrainReadinessDiagnosticStageId;
end;
TDiagnosticError = record
Present: Boolean;
ClassName: TOptionalString;
@@ -62,6 +74,24 @@ type
Stream: TFileIODiagnosticStreamResult;
end;
TTerrainReadinessDiagnosticEvidence = record
RxTilesLoaded: TOptionalBoolean;
GeneratedTransitionsReady: TOptionalBoolean;
MapX: TOptionalInt64;
MapY: TOptionalInt64;
GameRev: TOptionalInt64;
ExpectedTileCount: TOptionalInt64;
CompletedTileCount: TOptionalInt64;
end;
TTerrainReadinessDiagnosticResult = record
Status: TDiagnosticStatus;
FailureStage: TOptionalTerrainReadinessDiagnosticStageId;
Error: TDiagnosticError;
Stages: array[TTerrainReadinessDiagnosticStageId] of TDiagnosticStatus;
Evidence: TTerrainReadinessDiagnosticEvidence;
end;
TDiagnosticApplicationMetadata = record
Name: string;
PackageName: string;
@@ -88,12 +118,17 @@ type
SelectedMap: TDiagnosticSelectedMapMetadata;
OverallStatus: TDiagnosticStatus;
FileIO: TFileIODiagnosticResult;
TerrainReadiness: TTerrainReadinessDiagnosticResult;
end;
function CurrentDiagnosticReport: TDiagnosticReportState;
procedure ReplaceFileIODiagnosticResult(const AResult: TFileIODiagnosticResult);
procedure ReplaceTerrainReadinessDiagnosticResult(
const AResult: TTerrainReadinessDiagnosticResult);
function DiagnosticStatusToken(const AStatus: TDiagnosticStatus): string;
function DiagnosticStageIdToken(const AStage: TDiagnosticStageId): string;
function TerrainReadinessDiagnosticStageIdToken(
const AStage: TTerrainReadinessDiagnosticStageId): string;
function DiagnosticReportJsonSnapshot: string;
implementation
@@ -103,6 +138,7 @@ uses
var
CurrentFileIO: TFileIODiagnosticResult;
CurrentTerrainReadiness: TTerrainReadinessDiagnosticResult;
function DiagnosticStatusToken(const AStatus: TDiagnosticStatus): string;
begin
@@ -124,6 +160,17 @@ begin
end;
end;
function TerrainReadinessDiagnosticStageIdToken(
const AStage: TTerrainReadinessDiagnosticStageId): string;
begin
case AStage of
trsiRxTilesLoad: Result := 'rx_tiles_load';
trsiMapStreamLoad: Result := 'map_stream_load';
trsiMapHeader: Result := 'map_header';
trsiTileRecords: Result := 'tile_records';
end;
end;
function CurrentDiagnosticReport: TDiagnosticReportState;
begin
Result.ApplicationInfo.Name := 'kam_mobile';
@@ -138,7 +185,15 @@ begin
Result.SelectedMap.RelativePath := SelectedMapRelativePath;
Result.SelectedMap.Url := SelectedMapUrl;
Result.FileIO := CurrentFileIO;
Result.OverallStatus := Result.FileIO.Status;
Result.TerrainReadiness := CurrentTerrainReadiness;
if (Result.FileIO.Status = dsFail)
or (Result.TerrainReadiness.Status = dsFail) then
Result.OverallStatus := dsFail
else if (Result.FileIO.Status = dsPass)
and (Result.TerrainReadiness.Status = dsPass) then
Result.OverallStatus := dsPass
else
Result.OverallStatus := dsNotRun;
end;
procedure ReplaceFileIODiagnosticResult(const AResult: TFileIODiagnosticResult);
@@ -146,6 +201,12 @@ begin
CurrentFileIO := AResult;
end;
procedure ReplaceTerrainReadinessDiagnosticResult(
const AResult: TTerrainReadinessDiagnosticResult);
begin
CurrentTerrainReadiness := AResult;
end;
function OptionalStringJson(const AValue: TOptionalString): TJSONData;
begin
if AValue.HasValue then
@@ -176,6 +237,8 @@ var
Root, ObjectValue, Action, Stage, Stream: TJSONObject;
Actions, Stages: TJSONArray;
StageId: TDiagnosticStageId;
TerrainStageId: TTerrainReadinessDiagnosticStageId;
Evidence: TJSONObject;
begin
State := CurrentDiagnosticReport;
Root := TJSONObject.Create;
@@ -237,6 +300,49 @@ begin
Stream.Add('repeat_equal', OptionalBooleanJson(State.FileIO.Stream.RepeatEqual));
Action.Add('stream', Stream);
Actions.Add(Action);
Action := TJSONObject.Create;
Action.Add('id', 'terrain_readiness');
Action.Add('status', DiagnosticStatusToken(State.TerrainReadiness.Status));
if State.TerrainReadiness.FailureStage.HasValue then
Action.Add('failure_stage', TerrainReadinessDiagnosticStageIdToken(
State.TerrainReadiness.FailureStage.Value))
else
Action.Add('failure_stage', TJSONNull.Create);
if State.TerrainReadiness.Error.Present then
begin
ObjectValue := TJSONObject.Create;
ObjectValue.Add('class', OptionalStringJson(
State.TerrainReadiness.Error.ClassName));
ObjectValue.Add('message', OptionalStringJson(
State.TerrainReadiness.Error.MessageText));
Action.Add('error', ObjectValue);
end else
Action.Add('error', TJSONNull.Create);
Stages := TJSONArray.Create;
for TerrainStageId := Low(TTerrainReadinessDiagnosticStageId)
to High(TTerrainReadinessDiagnosticStageId) do
begin
Stage := TJSONObject.Create;
Stage.Add('id', TerrainReadinessDiagnosticStageIdToken(TerrainStageId));
Stage.Add('status', DiagnosticStatusToken(
State.TerrainReadiness.Stages[TerrainStageId]));
Stages.Add(Stage);
end;
Action.Add('stages', Stages);
Evidence := TJSONObject.Create;
Evidence.Add('rx_tiles_loaded', OptionalBooleanJson(
State.TerrainReadiness.Evidence.RxTilesLoaded));
Evidence.Add('generated_transitions_ready', OptionalBooleanJson(
State.TerrainReadiness.Evidence.GeneratedTransitionsReady));
Evidence.Add('map_x', OptionalInt64Json(State.TerrainReadiness.Evidence.MapX));
Evidence.Add('map_y', OptionalInt64Json(State.TerrainReadiness.Evidence.MapY));
Evidence.Add('game_rev', OptionalInt64Json(State.TerrainReadiness.Evidence.GameRev));
Evidence.Add('expected_tile_count', OptionalInt64Json(
State.TerrainReadiness.Evidence.ExpectedTileCount));
Evidence.Add('completed_tile_count', OptionalInt64Json(
State.TerrainReadiness.Evidence.CompletedTileCount));
Action.Add('evidence', Evidence);
Actions.Add(Action);
Root.Add('actions', Actions);
Result := Root.AsJSON;
finally