- Added some more comments to ULandscape.pas

- Renamed a somewhat unclearly named series of local variables ("item" --> "subscriptionItem") to better suite its context
This commit is contained in:
Andreas Schneider 2009-02-15 18:04:54 +01:00
parent 45537315b5
commit 114c218ca6
1 changed files with 43 additions and 35 deletions

View File

@ -532,7 +532,7 @@ var
x, y: Word; x, y: Word;
cell: TMapCell; cell: TMapCell;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
packet: TDrawMapPacket; packet: TDrawMapPacket;
begin begin
x := ABuffer.ReadWord; x := ABuffer.ReadWord;
@ -548,9 +548,9 @@ begin
packet := TDrawMapPacket.Create(cell); packet := TDrawMapPacket.Create(cell);
subscriptions := FBlockSubscriptions[(y div 8) * FWidth + (x div 8)]; subscriptions := FBlockSubscriptions[(y div 8) * FWidth + (x div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
CEDServerInstance.SendPacket(TNetState(item^.Data), packet, False); CEDServerInstance.SendPacket(TNetState(subscriptionItem^.Data), packet, False);
packet.Free; packet.Free;
UpdateRadar(x, y); UpdateRadar(x, y);
@ -565,7 +565,7 @@ var
staticItem: TStaticItem; staticItem: TStaticItem;
targetStaticList: TList; targetStaticList: TList;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
packet: TInsertStaticPacket; packet: TInsertStaticPacket;
begin begin
x := ABuffer.ReadWord; x := ABuffer.ReadWord;
@ -589,9 +589,9 @@ begin
packet := TInsertStaticPacket.Create(staticItem); packet := TInsertStaticPacket.Create(staticItem);
subscriptions := FBlockSubscriptions[(y div 8) * FWidth + (x div 8)]; subscriptions := FBlockSubscriptions[(y div 8) * FWidth + (x div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
CEDServerInstance.SendPacket(TNetState(item^.Data), packet, False); CEDServerInstance.SendPacket(TNetState(subscriptionItem^.Data), packet, False);
packet.Free; packet.Free;
UpdateRadar(x, y); UpdateRadar(x, y);
@ -607,7 +607,7 @@ var
staticInfo: TStaticInfo; staticInfo: TStaticInfo;
staticItem: TStaticItem; staticItem: TStaticItem;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
packet: TDeleteStaticPacket; packet: TDeleteStaticPacket;
begin begin
ABuffer.Read(staticInfo, SizeOf(TStaticInfo)); ABuffer.Read(staticInfo, SizeOf(TStaticInfo));
@ -631,9 +631,9 @@ begin
staticItem.Delete; staticItem.Delete;
subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)]; subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
CEDServerInstance.SendPacket(TNetState(item^.Data), packet, False); CEDServerInstance.SendPacket(TNetState(subscriptionItem^.Data), packet, False);
packet.Free; packet.Free;
UpdateRadar(staticInfo.X, staticInfo.Y); UpdateRadar(staticInfo.X, staticInfo.Y);
@ -654,7 +654,7 @@ var
staticItem: TStaticItem; staticItem: TStaticItem;
newZ: ShortInt; newZ: ShortInt;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
packet: TElevateStaticPacket; packet: TElevateStaticPacket;
begin begin
ABuffer.Read(staticInfo, SizeOf(TStaticInfo)); ABuffer.Read(staticInfo, SizeOf(TStaticInfo));
@ -679,9 +679,9 @@ begin
SortStaticsList(statics); SortStaticsList(statics);
subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)]; subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
CEDServerInstance.SendPacket(TNetState(item^.Data), packet, False); CEDServerInstance.SendPacket(TNetState(subscriptionItem^.Data), packet, False);
packet.Free; packet.Free;
UpdateRadar(staticInfo.X, staticInfo.Y); UpdateRadar(staticInfo.X, staticInfo.Y);
@ -703,7 +703,7 @@ var
staticItem: TStaticItem; staticItem: TStaticItem;
newX, newY: Word; newX, newY: Word;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
insertPacket: TInsertStaticPacket; insertPacket: TInsertStaticPacket;
deletePacket: TDeleteStaticPacket; deletePacket: TDeleteStaticPacket;
movePacket: TMoveStaticPacket; movePacket: TMoveStaticPacket;
@ -757,15 +757,15 @@ begin
sourceSubscriptions := TList.Create; sourceSubscriptions := TList.Create;
subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)]; subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
sourceSubscriptions.Add(item^.Data); sourceSubscriptions.Add(subscriptionItem^.Data);
targetSubscriptions := TList.Create; targetSubscriptions := TList.Create;
subscriptions := FBlockSubscriptions[(newY div 8) * FWidth + (newX div 8)]; subscriptions := FBlockSubscriptions[(newY div 8) * FWidth + (newX div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
targetSubscriptions.Add(item^.Data); targetSubscriptions.Add(subscriptionItem^.Data);
for i := 0 to sourceSubscriptions.Count - 1 do for i := 0 to sourceSubscriptions.Count - 1 do
begin begin
@ -801,7 +801,7 @@ var
staticItem: TStaticItem; staticItem: TStaticItem;
newHue: Word; newHue: Word;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
packet: THueStaticPacket; packet: THueStaticPacket;
begin begin
ABuffer.Read(staticInfo, SizeOf(TStaticInfo)); ABuffer.Read(staticInfo, SizeOf(TStaticInfo));
@ -825,9 +825,9 @@ begin
staticItem.Hue := newHue; staticItem.Hue := newHue;
subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)]; subscriptions := FBlockSubscriptions[(staticInfo.Y div 8) * FWidth + (staticInfo.X div 8)];
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
CEDServerInstance.SendPacket(TNetState(item^.Data), packet, False); CEDServerInstance.SendPacket(TNetState(subscriptionItem^.Data), packet, False);
packet.Free; packet.Free;
Break; Break;
@ -857,7 +857,7 @@ var
end; end;
netState: TNetState; netState: TNetState;
subscriptions: TLinkedList; subscriptions: TLinkedList;
item: PLinkedItem; subscriptionItem: PLinkedItem;
cmOperation: TLSCopyMove; cmOperation: TLSCopyMove;
additionalAffectedBlocks: TBits; additionalAffectedBlocks: TBits;
begin begin
@ -871,6 +871,10 @@ begin
SetLength(bitMask, FWidth * FHeight); SetLength(bitMask, FWidth * FHeight);
for i := Low(bitMask) to High(bitMask) do for i := Low(bitMask) to High(bitMask) do
bitMask[i] := TBits.Create(64); bitMask[i] := TBits.Create(64);
//'additionalAffectedBlocks' is used to store whether a certain block was
//touched during an operation which was designated to another block (for
//example by moving items with an offset). This is (indirectly) merged later
//on.
additionalAffectedBlocks := TBits.Create(FWidth * FHeight); additionalAffectedBlocks := TBits.Create(FWidth * FHeight);
areaCount := ABuffer.ReadByte; areaCount := ABuffer.ReadByte;
@ -986,13 +990,15 @@ begin
end; end;
end; end;
//Find out, which clients are affected by which blocks.
//This is used to efficiently update the block subscriptions.
subscriptions := FBlockSubscriptions[realBlockY * FWidth + realBlockX]; subscriptions := FBlockSubscriptions[realBlockY * FWidth + realBlockX];
for i := Low(clients) to High(clients) do for i := Low(clients) to High(clients) do
begin begin
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
begin begin
if TNetState(item^.Data) = clients[i].NetState then if TNetState(subscriptionItem^.Data) = clients[i].NetState then
begin begin
SetLength(clients[i].Blocks, Length(clients[i].Blocks) + 1); SetLength(clients[i].Blocks, Length(clients[i].Blocks) + 1);
with clients[i].Blocks[High(clients[i].Blocks)] do with clients[i].Blocks[High(clients[i].Blocks)] do
@ -1016,13 +1022,15 @@ begin
blockID := (blockX * FHeight) + blockY; blockID := (blockX * FHeight) + blockY;
if bitMask[blockID].Equals(emptyBits) and additionalAffectedBlocks[blockID] then if bitMask[blockID].Equals(emptyBits) and additionalAffectedBlocks[blockID] then
begin begin
//Update the information, which client is affected on which subscribed
//block.
subscriptions := FBlockSubscriptions[blockY * FWidth + blockX]; subscriptions := FBlockSubscriptions[blockY * FWidth + blockX];
for i := Low(clients) to High(clients) do for i := Low(clients) to High(clients) do
begin begin
item := nil; subscriptionItem := nil;
while subscriptions.Iterate(item) do while subscriptions.Iterate(subscriptionItem) do
begin begin
if TNetState(item^.Data) = clients[i].NetState then if TNetState(subscriptionItem^.Data) = clients[i].NetState then
begin begin
SetLength(clients[i].Blocks, Length(clients[i].Blocks) + 1); SetLength(clients[i].Blocks, Length(clients[i].Blocks) + 1);
with clients[i].Blocks[High(clients[i].Blocks)] do with clients[i].Blocks[High(clients[i].Blocks)] do