- Added fpdoc paths
- Started some documenting - Added TScreenBuffer.UpdateSortOrder to handle elevations
This commit is contained in:
parent
1bc9ad3fe1
commit
a71c1bd570
|
@ -10,6 +10,7 @@
|
||||||
<MainUnit Value="0"/>
|
<MainUnit Value="0"/>
|
||||||
<TargetFileExt Value=".exe"/>
|
<TargetFileExt Value=".exe"/>
|
||||||
</General>
|
</General>
|
||||||
|
<LazDoc Paths="../doc"/>
|
||||||
<VersionInfo>
|
<VersionInfo>
|
||||||
<ProjectVersion Value=""/>
|
<ProjectVersion Value=""/>
|
||||||
</VersionInfo>
|
</VersionInfo>
|
||||||
|
|
|
@ -223,6 +223,7 @@ type
|
||||||
function Iterate(var ABlockInfo: PBlockInfo): Boolean;
|
function Iterate(var ABlockInfo: PBlockInfo): Boolean;
|
||||||
procedure Sort;
|
procedure Sort;
|
||||||
procedure UpdateShortcuts;
|
procedure UpdateShortcuts;
|
||||||
|
function UpdateSortOrder(AItem: TWorldItem): PBlockInfo;
|
||||||
{ Events }
|
{ Events }
|
||||||
procedure OnTileRemoved(ATile: TMulBlock);
|
procedure OnTileRemoved(ATile: TMulBlock);
|
||||||
end;
|
end;
|
||||||
|
@ -1380,6 +1381,55 @@ begin
|
||||||
FShortCutsValid := True;
|
FShortCutsValid := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TScreenBuffer.UpdateSortOrder(AItem: TWorldItem): PBlockInfo;
|
||||||
|
var
|
||||||
|
newNodePosition, oldNode, oldNodePrev, current: PBlockInfo;
|
||||||
|
begin
|
||||||
|
newNodePosition := nil;
|
||||||
|
oldNode := nil;
|
||||||
|
oldNodePrev := nil;
|
||||||
|
current := FShortCuts[0];
|
||||||
|
|
||||||
|
while (current <> nil) and ((oldNode = nil) or (newNodePosition = nil)) do
|
||||||
|
begin
|
||||||
|
if current^.Item = AItem then
|
||||||
|
oldNode := current
|
||||||
|
else if oldNode = nil then
|
||||||
|
oldNodePrev := current;
|
||||||
|
|
||||||
|
if newNodePosition = nil then
|
||||||
|
begin
|
||||||
|
if (current^.Next = nil) or (CompareWorldItems(AItem, current^.Next^.Item) < 0) then
|
||||||
|
newNodePosition := current;
|
||||||
|
end;
|
||||||
|
|
||||||
|
current := current^.Next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if oldNode <> newNodePosition then
|
||||||
|
begin
|
||||||
|
if oldNodePrev <> oldNode then
|
||||||
|
begin
|
||||||
|
if oldNodePrev = nil then
|
||||||
|
FShortCuts[0] := oldNode^.Next
|
||||||
|
else
|
||||||
|
oldNodePrev^.Next := oldNode^.Next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if (newNodePosition = FShortCuts[0]) and (CompareWorldItems(AItem, FShortCuts[0]^.Item) < 0) then
|
||||||
|
begin
|
||||||
|
oldNode^.Next := FShortCuts[0];
|
||||||
|
FShortCuts[0] := oldNode;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
oldNode^.Next := newNodePosition^.Next;
|
||||||
|
newNodePosition^.Next := oldNode;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := oldNode;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TScreenBuffer.OnTileRemoved(ATile: TMulBlock);
|
procedure TScreenBuffer.OnTileRemoved(ATile: TMulBlock);
|
||||||
begin
|
begin
|
||||||
Delete(TWorldItem(ATile));
|
Delete(TWorldItem(ATile));
|
||||||
|
|
|
@ -275,7 +275,7 @@ type
|
||||||
FTextureManager: TLandTextureManager;
|
FTextureManager: TLandTextureManager;
|
||||||
FScreenBuffer: TScreenBuffer;
|
FScreenBuffer: TScreenBuffer;
|
||||||
FScreenBufferValid: Boolean;
|
FScreenBufferValid: Boolean;
|
||||||
FScreenBufferSorted: Boolean;
|
FScreenBufferIndexed: Boolean;
|
||||||
FCurrentTile: TWorldItem;
|
FCurrentTile: TWorldItem;
|
||||||
FSelectedTile: TWorldItem;
|
FSelectedTile: TWorldItem;
|
||||||
FGhostTile: TWorldItem;
|
FGhostTile: TWorldItem;
|
||||||
|
@ -1773,10 +1773,10 @@ begin
|
||||||
if not FScreenBufferValid then
|
if not FScreenBufferValid then
|
||||||
RebuildScreenBuffer;
|
RebuildScreenBuffer;
|
||||||
|
|
||||||
if not FScreenBufferSorted then
|
if not FScreenBufferIndexed then
|
||||||
begin
|
begin
|
||||||
FScreenBuffer.Sort;
|
FScreenBuffer.UpdateShortcuts;
|
||||||
FScreenBufferSorted := True;
|
FScreenBufferIndexed := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{if acFilter.Checked then
|
{if acFilter.Checked then
|
||||||
|
@ -2039,7 +2039,9 @@ end;
|
||||||
|
|
||||||
procedure TfrmMain.OnStaticElevated(AStaticItem: TStaticItem);
|
procedure TfrmMain.OnStaticElevated(AStaticItem: TStaticItem);
|
||||||
begin
|
begin
|
||||||
FScreenBufferSorted := False;
|
AStaticItem.PrioritySolver := FScreenBuffer.GetSerial;
|
||||||
|
PrepareScreenBlock(FScreenBuffer.UpdateSortOrder(AStaticItem));
|
||||||
|
FScreenBufferIndexed := False;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.OnStaticInserted(AStaticItem: TStaticItem);
|
procedure TfrmMain.OnStaticInserted(AStaticItem: TStaticItem);
|
||||||
|
@ -2200,7 +2202,7 @@ begin
|
||||||
|
|
||||||
FScreenBuffer.UpdateShortcuts;
|
FScreenBuffer.UpdateShortcuts;
|
||||||
FScreenBufferValid := True;
|
FScreenBufferValid := True;
|
||||||
FScreenBufferSorted := True;
|
FScreenBufferIndexed := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.UpdateCurrentTile;
|
procedure TfrmMain.UpdateCurrentTile;
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<fpdoc-descriptions>
|
||||||
|
<package name="CentrED">
|
||||||
|
<module name="ULandscape">
|
||||||
|
<element name="TScreenBuffer.UpdateSortOrder">
|
||||||
|
<short>Moves the BlockInfo up or down depending on the new sort order</short>
|
||||||
|
<descr>The function iterates through the list of blocks to find the new position where the item should be stored and to find the item's block.
|
||||||
|
Afterwards it moves this block to its new position and returns the block for further usage.</descr>
|
||||||
|
</element>
|
||||||
|
<element name="TScreenBuffer">
|
||||||
|
<short>Stores all items that are (visible) on the screen.</short>
|
||||||
|
<descr>TScreenBuffer contains a linked list of all items that should be visible on the screen, stored in <link id="TBlockInfo"/>.</descr>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo">
|
||||||
|
<short>Contains the necessary information to identify and draw items on the screen.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.ScreenRect">
|
||||||
|
<short>The coordinates on the screen. (as rectangle)</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.DrawQuad">
|
||||||
|
<short>The coordinates for the OpenGL drawing function.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.Item">
|
||||||
|
<short>A reference to the item to be drawn.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.HighRes">
|
||||||
|
<short>Contains the high resolution (TexMap) texture if available and necessary.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.LowRes">
|
||||||
|
<short>Contains the default "normal" resolution graphic (Art).</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.Normals">
|
||||||
|
<short>The normals used for lighting on map tiles.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.State">
|
||||||
|
<short>Holds the current state of the tile. This can be used for filtering.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.Highlighted">
|
||||||
|
<short>If enabled, the tile is drawn as highlighted.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TBlockInfo.Next">
|
||||||
|
<short>A reference to the next block (linked list).</short>
|
||||||
|
</element>
|
||||||
|
<element name="TScreenState">
|
||||||
|
<short>Defines the state for screen blocks (see <link id="TBlockInfo.State"/>).</short>
|
||||||
|
</element>
|
||||||
|
<element name="TScreenState.ssNormal">
|
||||||
|
<short>The normal state of an item.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TScreenState.ssFiltered">
|
||||||
|
<short>Specifies that the item should be "hidden". A fast way to remove it from the screen while keeping the sort order.</short>
|
||||||
|
</element>
|
||||||
|
<element name="TScreenState.ssGhost">
|
||||||
|
<short>Defines the item as being a ghost item.</short>
|
||||||
|
<descr>A ghost item is ignored in the hit test but still drawn as a normal (highlighted) tile.
|
||||||
|
They are used to visualize an insert/map draw operation to the user.</descr>
|
||||||
|
</element>
|
||||||
|
<element name="PBlockInfo">
|
||||||
|
<short>A reference to TBlockInfo.</short>
|
||||||
|
</element>
|
||||||
|
</module>
|
||||||
|
</package>
|
||||||
|
</fpdoc-descriptions>
|
Loading…
Reference in New Issue