Files
kam-mobile/code/KaMGeneratedTerrainBridge.pas
T
admin_d 3d5edaa086
Sync changed files to Google Drive / sync (push) Successful in 27m26s
Complete BigTask
2026-09-17 13:18:03 +05:00

111 lines
2.9 KiB
ObjectPascal

unit KaMGeneratedTerrainBridge;
interface
uses
KM_ResTypes, KM_ResTilesetTypes;
type
TKaMGeneratedTerrainInfoQuery = function(aTerrain: Integer): TKMGenTerrainInfo of object;
TKaMGeneratedTerrainTransitionQuery = function(
aTerKind: TKMTerrainKind;
aMaskKind: TKMTileMaskKind;
aMaskType: TKMTileMaskType;
aMaskSubtype: TKMTileMaskSubType
): Word of object;
function KaMGeneratedTerrainInfo(aTerrain: Integer): TKMGenTerrainInfo;
function KaMGeneratedTerrainInfoLegacy(aTerrain: Integer): TKMGenTerrainInfo;
function KaMGeneratedTerrainTransition(
aTerKind: TKMTerrainKind;
aMaskKind: TKMTileMaskKind;
aMaskType: TKMTileMaskType;
aMaskSubtype: TKMTileMaskSubType
): Word;
procedure KaMPublishGeneratedTerrainProvider(
aOwner: TObject;
aCurrentInfo: TKaMGeneratedTerrainInfoQuery;
aLegacyInfo: TKaMGeneratedTerrainInfoQuery;
aTransition: TKaMGeneratedTerrainTransitionQuery
);
procedure KaMUnpublishGeneratedTerrainProvider(aOwner: TObject);
implementation
uses
SysUtils;
var
GProviderOwner: TObject;
GCurrentInfoQuery: TKaMGeneratedTerrainInfoQuery;
GLegacyInfoQuery: TKaMGeneratedTerrainInfoQuery;
GTransitionQuery: TKaMGeneratedTerrainTransitionQuery;
procedure ClearGeneratedTerrainProvider;
begin
GProviderOwner := nil;
GCurrentInfoQuery := nil;
GLegacyInfoQuery := nil;
GTransitionQuery := nil;
end;
procedure RequireGeneratedTerrainProvider;
begin
if (GProviderOwner = nil)
or not Assigned(GCurrentInfoQuery)
or not Assigned(GLegacyInfoQuery)
or not Assigned(GTransitionQuery) then
raise Exception.Create('Generated-terrain provider is unavailable');
end;
function KaMGeneratedTerrainInfo(aTerrain: Integer): TKMGenTerrainInfo;
begin
RequireGeneratedTerrainProvider;
Result := GCurrentInfoQuery(aTerrain);
end;
function KaMGeneratedTerrainInfoLegacy(aTerrain: Integer): TKMGenTerrainInfo;
begin
RequireGeneratedTerrainProvider;
Result := GLegacyInfoQuery(aTerrain);
end;
function KaMGeneratedTerrainTransition(
aTerKind: TKMTerrainKind;
aMaskKind: TKMTileMaskKind;
aMaskType: TKMTileMaskType;
aMaskSubtype: TKMTileMaskSubType
): Word;
begin
RequireGeneratedTerrainProvider;
Result := GTransitionQuery(aTerKind, aMaskKind, aMaskType, aMaskSubtype);
end;
procedure KaMPublishGeneratedTerrainProvider(
aOwner: TObject;
aCurrentInfo: TKaMGeneratedTerrainInfoQuery;
aLegacyInfo: TKaMGeneratedTerrainInfoQuery;
aTransition: TKaMGeneratedTerrainTransitionQuery
);
begin
if (aOwner = nil)
or not Assigned(aCurrentInfo)
or not Assigned(aLegacyInfo)
or not Assigned(aTransition) then
raise Exception.Create('Generated-terrain provider binding is incomplete');
GProviderOwner := aOwner;
GCurrentInfoQuery := aCurrentInfo;
GLegacyInfoQuery := aLegacyInfo;
GTransitionQuery := aTransition;
end;
procedure KaMUnpublishGeneratedTerrainProvider(aOwner: TObject);
begin
if (aOwner <> nil) and (aOwner = GProviderOwner) then
ClearGeneratedTerrainProvider;
end;
end.