111 lines
2.9 KiB
ObjectPascal
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.
|