- Added AnimDataProvider
- Some code cleanups
This commit is contained in:
104
MulProvider/UAnimDataProvider.pas
Normal file
104
MulProvider/UAnimDataProvider.pas
Normal file
@@ -0,0 +1,104 @@
|
||||
(*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at
|
||||
* http://www.opensource.org/licenses/cddl1.php.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at
|
||||
* http://www.opensource.org/licenses/cddl1.php. If applicable,
|
||||
* add the following below this CDDL HEADER, with the fields enclosed
|
||||
* by brackets "[]" replaced with your own identifying * information:
|
||||
* Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2009 Andreas Schneider
|
||||
*)
|
||||
unit UAnimDataProvider;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, UMulProvider, UMulBlock, UAnimData;
|
||||
|
||||
type
|
||||
|
||||
TAnimDataArray = array[$0..$3FFF] of TAnimData;
|
||||
|
||||
{ TAnimDataProvider }
|
||||
|
||||
TAnimDataProvider = class(TMulProvider)
|
||||
constructor Create(AData: TStream; AReadOnly: Boolean = False); overload;
|
||||
override;
|
||||
constructor Create(AData: string; AReadOnly: Boolean = False); overload;
|
||||
override;
|
||||
destructor Destroy; override;
|
||||
protected
|
||||
FAnimData: TAnimDataArray;
|
||||
function CalculateOffset(AID: Integer): Integer; override;
|
||||
function GetData(AID, AOffset: Integer): TAnimData; override;
|
||||
procedure SetData(AID, AOffset: Integer; ABlock: TMulBlock); override;
|
||||
public
|
||||
property AnimData: TAnimDataArray read FAnimData;
|
||||
function GetBlock(AID: Integer): TAnimData; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TAnimDataProvider }
|
||||
|
||||
constructor TAnimDataProvider.Create(AData: TStream; AReadOnly: Boolean);
|
||||
begin
|
||||
inherited Create(AData, AReadOnly);
|
||||
end;
|
||||
|
||||
constructor TAnimDataProvider.Create(AData: string; AReadOnly: Boolean);
|
||||
begin
|
||||
inherited Create(AData, AReadOnly);
|
||||
end;
|
||||
|
||||
destructor TAnimDataProvider.Destroy;
|
||||
begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TAnimDataProvider.CalculateOffset(AID: Integer): Integer;
|
||||
begin
|
||||
Result := GetAnimDataOffset(AID);
|
||||
end;
|
||||
|
||||
function TAnimDataProvider.GetData(AID, AOffset: Integer): TAnimData;
|
||||
begin
|
||||
Result := FAnimData[AID];
|
||||
end;
|
||||
|
||||
procedure TAnimDataProvider.SetData(AID, AOffset: Integer; ABlock: TMulBlock);
|
||||
begin
|
||||
FreeAndNil(FAnimData[AID]);
|
||||
FAnimData[AID] := TAnimData(ABlock.Clone);
|
||||
|
||||
if not FReadOnly then
|
||||
begin
|
||||
FData.Position := AOffset;
|
||||
ABlock.Write(FData);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TAnimDataProvider.GetBlock(AID: Integer): TAnimData;
|
||||
begin
|
||||
Result := FAnimData[AID].Clone;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@@ -1,111 +1,129 @@
|
||||
(*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at
|
||||
* http://www.opensource.org/licenses/cddl1.php.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at
|
||||
* http://www.opensource.org/licenses/cddl1.php. If applicable,
|
||||
* add the following below this CDDL HEADER, with the fields enclosed
|
||||
* by brackets "[]" replaced with your own identifying * information:
|
||||
* Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2007 Andreas Schneider
|
||||
*)
|
||||
unit UMulManager;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, UMulProvider, UTileDataProvider, UArtProvider, UGumpProvider,
|
||||
UTexmapProvider, UHueProvider, URadarProvider;
|
||||
|
||||
type
|
||||
TMulManager = class(TObject)
|
||||
destructor Destroy; override;
|
||||
protected
|
||||
FArtProvider: TArtProvider;
|
||||
FGumpProvider: TGumpProvider;
|
||||
FTexmapProvider: TTexmapProvider;
|
||||
FTileDataProvider: TTileDataProvider;
|
||||
FHueProvider: THueProvider;
|
||||
FRadarProvider: TRadarProvider;
|
||||
public
|
||||
procedure RegisterArtProvider(AArtProvider: TArtProvider);
|
||||
procedure RegisterGumpProvider(AGumpProvider: TGumpProvider);
|
||||
procedure RegisterTexmapProvider(ATexmapProvider: TTexmapProvider);
|
||||
procedure RegisterTileDataProvider(ATileDataProvider: TTileDataProvider);
|
||||
procedure RegisterHueProvider(AHueProvider: THueProvider);
|
||||
procedure RegisterRadarProvider(ARadarProvider: TRadarProvider);
|
||||
property ArtProvider: TArtProvider read FArtProvider;
|
||||
property GumpProvider: TGumpProvider read FGumpProvider;
|
||||
property TexmapProvider: TTexmapProvider read FTexmapProvider;
|
||||
property TileDataProvider: TTileDataProvider read FTileDataProvider;
|
||||
property HueProvider: THueProvider read FHueProvider;
|
||||
property RadarProvider: TRadarPRovider read FRadarProvider;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TMulManager }
|
||||
|
||||
destructor TMulManager.Destroy;
|
||||
begin
|
||||
RegisterArtProvider(nil);
|
||||
RegisterGumpProvider(nil);
|
||||
RegisterTexmapProvider(nil);
|
||||
RegisterTileDataProvider(nil);
|
||||
RegisterHueProvider(nil);
|
||||
RegisterRadarProvider(nil);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterArtProvider(AArtProvider: TArtProvider);
|
||||
begin
|
||||
if Assigned(FArtProvider) then FreeAndNil(FArtProvider);
|
||||
FArtProvider := AArtProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterGumpProvider(AGumpProvider: TGumpProvider);
|
||||
begin
|
||||
if Assigned(FGumpProvider) then FreeAndNil(FGumpProvider);
|
||||
FGumpProvider := AGumpProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterHueProvider(AHueProvider: THueProvider);
|
||||
begin
|
||||
if Assigned(FHueProvider) then FreeAndNil(FHueProvider);
|
||||
FHueProvider := AHueProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterRadarProvider(ARadarProvider: TRadarProvider);
|
||||
begin
|
||||
if Assigned(FRadarProvider) then FreeAndNil(FRadarProvider);
|
||||
FRadarProvider := ARadarProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterTexmapProvider(ATexmapProvider: TTexmapProvider);
|
||||
begin
|
||||
if Assigned(FTexmapProvider) then FreeAndNil(FTexmapProvider);
|
||||
FTexmapProvider := ATexmapProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterTileDataProvider(
|
||||
ATileDataProvider: TTileDataProvider);
|
||||
begin
|
||||
if Assigned(FTileDataProvider) then FreeAndNil(FTileDataProvider);
|
||||
FTileDataProvider := ATileDataProvider;
|
||||
end;
|
||||
|
||||
end.
|
||||
(*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at
|
||||
* http://www.opensource.org/licenses/cddl1.php.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at
|
||||
* http://www.opensource.org/licenses/cddl1.php. If applicable,
|
||||
* add the following below this CDDL HEADER, with the fields enclosed
|
||||
* by brackets "[]" replaced with your own identifying * information:
|
||||
* Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2009 Andreas Schneider
|
||||
*)
|
||||
unit UMulManager;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, UMulProvider, UTileDataProvider, UArtProvider, UGumpProvider,
|
||||
UTexmapProvider, UHueProvider, URadarProvider, UAnimDataProvider;
|
||||
|
||||
type
|
||||
|
||||
{ TMulManager }
|
||||
|
||||
TMulManager = class
|
||||
destructor Destroy; override;
|
||||
protected
|
||||
FArtProvider: TArtProvider;
|
||||
FGumpProvider: TGumpProvider;
|
||||
FTexmapProvider: TTexmapProvider;
|
||||
FTileDataProvider: TTileDataProvider;
|
||||
FAnimDataProvider: TAnimDataProvider;
|
||||
FHueProvider: THueProvider;
|
||||
FRadarProvider: TRadarProvider;
|
||||
public
|
||||
procedure RegisterArtProvider(AArtProvider: TArtProvider);
|
||||
procedure RegisterGumpProvider(AGumpProvider: TGumpProvider);
|
||||
procedure RegisterTexmapProvider(ATexmapProvider: TTexmapProvider);
|
||||
procedure RegisterTileDataProvider(ATileDataProvider: TTileDataProvider);
|
||||
procedure RegisterAnimDataProvider(AAnimDataProvider: TAnimDataProvider);
|
||||
procedure RegisterHueProvider(AHueProvider: THueProvider);
|
||||
procedure RegisterRadarProvider(ARadarProvider: TRadarProvider);
|
||||
property ArtProvider: TArtProvider read FArtProvider;
|
||||
property GumpProvider: TGumpProvider read FGumpProvider;
|
||||
property TexmapProvider: TTexmapProvider read FTexmapProvider;
|
||||
property TileDataProvider: TTileDataProvider read FTileDataProvider;
|
||||
property AnimDataProvider: TAnimDataProvider read FAnimDataProvider;
|
||||
property HueProvider: THueProvider read FHueProvider;
|
||||
property RadarProvider: TRadarPRovider read FRadarProvider;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TMulManager }
|
||||
|
||||
destructor TMulManager.Destroy;
|
||||
begin
|
||||
RegisterArtProvider(nil);
|
||||
RegisterGumpProvider(nil);
|
||||
RegisterTexmapProvider(nil);
|
||||
RegisterTileDataProvider(nil);
|
||||
RegisterHueProvider(nil);
|
||||
RegisterRadarProvider(nil);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterArtProvider(
|
||||
AArtProvider: TArtProvider);
|
||||
begin
|
||||
FreeAndNil(FArtProvider);
|
||||
FArtProvider := AArtProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterGumpProvider(
|
||||
AGumpProvider: TGumpProvider);
|
||||
begin
|
||||
FreeAndNil(FGumpProvider);
|
||||
FGumpProvider := AGumpProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterHueProvider(
|
||||
AHueProvider: THueProvider);
|
||||
begin
|
||||
FreeAndNil(FHueProvider);
|
||||
FHueProvider := AHueProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterRadarProvider(
|
||||
ARadarProvider: TRadarProvider);
|
||||
begin
|
||||
FreeAndNil(FRadarProvider);
|
||||
FRadarProvider := ARadarProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterTexmapProvider(
|
||||
ATexmapProvider: TTexmapProvider);
|
||||
begin
|
||||
FreeAndNil(FTexmapProvider);
|
||||
FTexmapProvider := ATexmapProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterTileDataProvider(
|
||||
ATileDataProvider: TTileDataProvider);
|
||||
begin
|
||||
FreeAndNil(FTileDataProvider);
|
||||
FTileDataProvider := ATileDataProvider;
|
||||
end;
|
||||
|
||||
procedure TMulManager.RegisterAnimDataProvider(
|
||||
AAnimDataProvider: TAnimDataProvider);
|
||||
begin
|
||||
FreeAndNil(FAnimDataProvider);
|
||||
FTileDataProvider := AAnimDataProvider;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
@@ -1,143 +1,143 @@
|
||||
(*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at
|
||||
* http://www.opensource.org/licenses/cddl1.php.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at
|
||||
* http://www.opensource.org/licenses/cddl1.php. If applicable,
|
||||
* add the following below this CDDL HEADER, with the fields enclosed
|
||||
* by brackets "[]" replaced with your own identifying * information:
|
||||
* Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2007 Andreas Schneider
|
||||
*)
|
||||
unit UTileDataProvider;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes, UMulProvider, UMulBlock, UTiledata;
|
||||
|
||||
type
|
||||
TLandTileDataArray = array[$0..$3FFF] of TLandTileData;
|
||||
TStaticTileDataArray = array[$0..$3FFF] of TStaticTileData;
|
||||
TTiledataProvider = class(TMulProvider)
|
||||
constructor Create(AData: TStream; AReadOnly: Boolean = False); overload; override;
|
||||
constructor Create(AData: string; AReadOnly: Boolean = False); overload; override;
|
||||
destructor Destroy; override;
|
||||
protected
|
||||
FLandTiles: TLandTileDataArray;
|
||||
FStaticTiles: TStaticTileDataArray;
|
||||
procedure InitArray;
|
||||
function CalculateOffset(AID: Integer): Integer; override;
|
||||
function GetData(AID, AOffset: Integer): TMulBlock; override;
|
||||
procedure SetData(AID, AOffset: Integer; ABlock: TMulBlock); override;
|
||||
public
|
||||
function GetBlock(AID: Integer): TMulBlock; override;
|
||||
property LandTiles: TLandTileDataArray read FLandTiles;
|
||||
property StaticTiles: TStaticTileDataArray read FStaticTiles;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TTiledataProvider }
|
||||
|
||||
function TTiledataProvider.CalculateOffset(AID: Integer): Integer;
|
||||
begin
|
||||
Result := GetTileDataOffset(AID);
|
||||
end;
|
||||
|
||||
constructor TTiledataProvider.Create(AData: TStream; AReadOnly: Boolean = False);
|
||||
begin
|
||||
inherited;
|
||||
InitArray;
|
||||
end;
|
||||
|
||||
constructor TTiledataProvider.Create(AData: string; AReadOnly: Boolean = False);
|
||||
begin
|
||||
inherited;
|
||||
InitArray;
|
||||
end;
|
||||
|
||||
destructor TTiledataProvider.Destroy;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := $0 to $3FFF do
|
||||
begin
|
||||
if Assigned(FLandTiles[i]) then FreeAndNil(FLandTiles[i]);
|
||||
if Assigned(FStaticTiles[i]) then FreeAndNil(FStaticTiles[i]);
|
||||
end;
|
||||
|
||||
inherited;
|
||||
end;
|
||||
|
||||
function TTiledataProvider.GetBlock(AID: Integer): TMulBlock;
|
||||
begin
|
||||
Result := GetData(AID, 0);
|
||||
end;
|
||||
|
||||
function TTiledataProvider.GetData(AID, AOffset: Integer): TMulBlock;
|
||||
begin
|
||||
if AID < $4000 then
|
||||
Result := TMulBlock(FLandTiles[AID].Clone)
|
||||
else
|
||||
Result := TMulBlock(FStaticTiles[AID - $4000].Clone);
|
||||
Result.ID := AID;
|
||||
Result.OnChanged := @OnChanged;
|
||||
Result.OnFinished := @OnFinished;
|
||||
end;
|
||||
|
||||
procedure TTiledataProvider.InitArray;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := $0 to $3FFF do
|
||||
begin
|
||||
FData.Position := GetTileDataOffset(i);
|
||||
FLandTiles[i] := TLandTileData.Create(FData);
|
||||
end;
|
||||
|
||||
for i := $0 to $3FFF do
|
||||
begin
|
||||
FData.Position := GetTileDataOffset($4000 + i);
|
||||
FStaticTiles[i] := TStaticTileData.Create(FData);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTiledataProvider.SetData(AID, AOffset: Integer;
|
||||
ABlock: TMulBlock);
|
||||
begin
|
||||
if AID < $4000 then
|
||||
begin
|
||||
if Assigned(FLandTiles[AID]) then FreeAndNil(FLandTiles[AID]);
|
||||
FLandTiles[AID] := TLandTileData(ABlock.Clone);
|
||||
end else
|
||||
begin
|
||||
if Assigned(FStaticTiles[AID - $4000]) then FreeAndNil(FStaticTiles[AID - $4000]);
|
||||
FStaticTiles[AID - $4000] := TStaticTileData(ABlock.Clone);
|
||||
end;
|
||||
|
||||
if not FReadOnly then
|
||||
begin
|
||||
FData.Position := AOffset;
|
||||
ABlock.Write(FData);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
(*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License, Version 1.0 only
|
||||
* (the "License"). You may not use this file except in compliance
|
||||
* with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at
|
||||
* http://www.opensource.org/licenses/cddl1.php.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at
|
||||
* http://www.opensource.org/licenses/cddl1.php. If applicable,
|
||||
* add the following below this CDDL HEADER, with the fields enclosed
|
||||
* by brackets "[]" replaced with your own identifying * information:
|
||||
* Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2009 Andreas Schneider
|
||||
*)
|
||||
unit UTileDataProvider;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes, UMulProvider, UMulBlock, UTiledata;
|
||||
|
||||
type
|
||||
TLandTileDataArray = array[$0..$3FFF] of TLandTileData;
|
||||
TStaticTileDataArray = array[$0..$3FFF] of TStaticTileData;
|
||||
TTiledataProvider = class(TMulProvider)
|
||||
constructor Create(AData: TStream; AReadOnly: Boolean = False); overload; override;
|
||||
constructor Create(AData: string; AReadOnly: Boolean = False); overload; override;
|
||||
destructor Destroy; override;
|
||||
protected
|
||||
FLandTiles: TLandTileDataArray;
|
||||
FStaticTiles: TStaticTileDataArray;
|
||||
procedure InitArray;
|
||||
function CalculateOffset(AID: Integer): Integer; override;
|
||||
function GetData(AID, AOffset: Integer): TMulBlock; override;
|
||||
procedure SetData(AID, AOffset: Integer; ABlock: TMulBlock); override;
|
||||
public
|
||||
function GetBlock(AID: Integer): TMulBlock; override;
|
||||
property LandTiles: TLandTileDataArray read FLandTiles;
|
||||
property StaticTiles: TStaticTileDataArray read FStaticTiles;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{ TTiledataProvider }
|
||||
|
||||
function TTiledataProvider.CalculateOffset(AID: Integer): Integer;
|
||||
begin
|
||||
Result := GetTileDataOffset(AID);
|
||||
end;
|
||||
|
||||
constructor TTiledataProvider.Create(AData: TStream; AReadOnly: Boolean = False);
|
||||
begin
|
||||
inherited;
|
||||
InitArray;
|
||||
end;
|
||||
|
||||
constructor TTiledataProvider.Create(AData: string; AReadOnly: Boolean = False);
|
||||
begin
|
||||
inherited;
|
||||
InitArray;
|
||||
end;
|
||||
|
||||
destructor TTiledataProvider.Destroy;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := $0 to $3FFF do
|
||||
begin
|
||||
FreeAndNil(FLandTiles[i]);
|
||||
FreeAndNil(FStaticTiles[i]);
|
||||
end;
|
||||
|
||||
inherited;
|
||||
end;
|
||||
|
||||
function TTiledataProvider.GetBlock(AID: Integer): TMulBlock;
|
||||
begin
|
||||
Result := GetData(AID, 0);
|
||||
end;
|
||||
|
||||
function TTiledataProvider.GetData(AID, AOffset: Integer): TMulBlock;
|
||||
begin
|
||||
if AID < $4000 then
|
||||
Result := TMulBlock(FLandTiles[AID].Clone)
|
||||
else
|
||||
Result := TMulBlock(FStaticTiles[AID - $4000].Clone);
|
||||
Result.ID := AID;
|
||||
Result.OnChanged := @OnChanged;
|
||||
Result.OnFinished := @OnFinished;
|
||||
end;
|
||||
|
||||
procedure TTiledataProvider.InitArray;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := $0 to $3FFF do
|
||||
begin
|
||||
FData.Position := GetTileDataOffset(i);
|
||||
FLandTiles[i] := TLandTileData.Create(FData);
|
||||
end;
|
||||
|
||||
for i := $0 to $3FFF do
|
||||
begin
|
||||
FData.Position := GetTileDataOffset($4000 + i);
|
||||
FStaticTiles[i] := TStaticTileData.Create(FData);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTiledataProvider.SetData(AID, AOffset: Integer;
|
||||
ABlock: TMulBlock);
|
||||
begin
|
||||
if AID < $4000 then
|
||||
begin
|
||||
FreeAndNil(FLandTiles[AID]);
|
||||
FLandTiles[AID] := TLandTileData(ABlock.Clone);
|
||||
end else
|
||||
begin
|
||||
FreeAndNil(FStaticTiles[AID - $4000]);
|
||||
FStaticTiles[AID - $4000] := TStaticTileData(ABlock.Clone);
|
||||
end;
|
||||
|
||||
if not FReadOnly then
|
||||
begin
|
||||
FData.Position := AOffset;
|
||||
ABlock.Write(FData);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user