This commit is contained in:
1 parent
e253946fc8
commit
3d5edaa086
7 files changed
+3014
-2
No files matched your search
@@ -0,0 +1,110 @@
|
||||
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.
|
||||
Reference in new issue
Block a user