🚧 Implement actions as objects

This commit is contained in:
2022-05-29 11:46:22 +02:00
parent dc36f0b09c
commit d75a85d269
6 changed files with 531 additions and 26 deletions

View File

@@ -299,6 +299,18 @@ type
{ Events }
procedure OnTileRemoved(ATile: TMulBlock);
end;
{ TScreenBufferItemEnumerator }
TScreenBufferItemEnumerator = object
private
FScreenBuffer: TScreenBuffer;
FCurrentBlock: PBlockInfo;
FCurrentItem: TWorldItem;
public
function MoveNext: Boolean;
property Current: TWorldItem read FCurrentItem;
end;
TStaticInfo = packed record
X: Word;
@@ -308,6 +320,8 @@ type
Hue: Word;
end;
operator enumerator(AScreenBuffer: TScreenBuffer): TScreenBufferItemEnumerator;
implementation
uses
@@ -325,6 +339,21 @@ begin
GLVector[2] := AVector.data[2];
end;
operator enumerator(AScreenBuffer: TScreenBuffer): TScreenBufferItemEnumerator;
begin
Result.FScreenBuffer := AScreenBuffer;
Result.MoveNext;
end;
{ TScreenBufferItemEnumerator }
function TScreenBufferItemEnumerator.MoveNext: Boolean;
begin
Result := FScreenBuffer.Iterate(FCurrentBlock);
if not Result then
FCurrentItem := nil;
end;
{ TLandTextureManager }
constructor TLandTextureManager.Create;