From 20d26e67e025bb19db8df7c4517cb340ad8db4e4 Mon Sep 17 00:00:00 2001 From: Player Name Date: Fri, 19 Jun 2026 22:42:48 +0200 Subject: [PATCH] This breaks map rendering more --- .../core/game/node/entity/player/Player.java | 2 +- .../game/world/update/MapChunkRenderer.kt | 62 ++++++------------- .../game/world/update/flag/PlayerFlags.java | 8 ++- 3 files changed, 25 insertions(+), 47 deletions(-) diff --git a/Server/src/main/core/game/node/entity/player/Player.java b/Server/src/main/core/game/node/entity/player/Player.java index cb94a83bd..77d205b01 100644 --- a/Server/src/main/core/game/node/entity/player/Player.java +++ b/Server/src/main/core/game/node/entity/player/Player.java @@ -856,7 +856,7 @@ public class Player extends Entity { getZoneMonitor().getZones().clear(); playerFlags.setLastSceneGraph(null); playerFlags.setUpdateSceneGraph(false); - playerFlags.setLastViewport(new RegionChunk[13][13]); + playerFlags.setLastViewport(new LinkedList<>()); renderInfo.getLocalNpcs().clear(); renderInfo.getLocalPlayers().clear(); renderInfo.setLastLocation(null); diff --git a/Server/src/main/core/game/world/update/MapChunkRenderer.kt b/Server/src/main/core/game/world/update/MapChunkRenderer.kt index 47e93ff53..cf18cc8a3 100644 --- a/Server/src/main/core/game/world/update/MapChunkRenderer.kt +++ b/Server/src/main/core/game/world/update/MapChunkRenderer.kt @@ -13,6 +13,8 @@ import kotlin.math.abs * @author Emperor */ object MapChunkRenderer { + const val buildAreaDepth = 6 + /** * Sends the map chunk rendering packet. * @param player The player. @@ -21,61 +23,35 @@ object MapChunkRenderer { fun render(player: Player) { val last = player.playerFlags.lastViewport val updated: MutableList = ArrayList() - val current: MutableList> = ArrayList() + val current: MutableList = ArrayList() - val buildAreaDepth = 6 for (dcx in -buildAreaDepth..+buildAreaDepth) { - val addX = ArrayList() for (dcy in -buildAreaDepth..+buildAreaDepth) { val newloc = player.location.chunkBase.transform(dcx*8, dcy*8, 0) - addX.add(newloc.chunk) + current.add(newloc.chunk) } - current.add(addX) } - var sizeX = last.size - for (x in 0 until sizeX) { - val sizeY: Int = last[x].size - for (y in 0 until sizeY) { - val previous = last[x][y] ?: continue - if (!containsChunk(current, previous)) { - PacketRepository.send(ClearRegionChunk::class.java, ClearChunkContext(player, previous)) - } else { - updated.add(previous) - } + val removeList = LinkedList() + for (chunk in last) { + if (current.contains(chunk)) { + updated.add(chunk) + } else { + PacketRepository.send(ClearRegionChunk::class.java, ClearChunkContext(player, chunk)) + removeList.add(chunk) } } - sizeX = current.size - for (x in 0 until sizeX) { - val sizeY: Int = current[x].size - for (y in 0 until sizeY) { - val chunk = current[x][y] - if (!updated.contains(chunk)) { - chunk.synchronize(player) - } else { - chunk.update(player) - } - last[x][y] = current[x][y] - } + for (chunk in removeList) { + last.remove(chunk) } - } - /** - * Checks if the chunks list contains the specified region chunk. - * @param list The list to search. - * @param c The region chunk. - * @return `True` if so. - */ - private fun containsChunk(list: MutableList>, c: RegionChunk): Boolean { - val sizeList = list.size - for (x in 0 until sizeList) { - val chunkSize: Int = list[x].size - for (y in 0 until chunkSize) { - if (list[x][y] === c) { - return true - } + for (chunk in current) { + if (updated.contains(chunk)) { + chunk.update(player) + } else { + chunk.synchronize(player) } + last.add(chunk) } - return false } } \ No newline at end of file diff --git a/Server/src/main/core/game/world/update/flag/PlayerFlags.java b/Server/src/main/core/game/world/update/flag/PlayerFlags.java index 41d0cb441..4c75ac71f 100644 --- a/Server/src/main/core/game/world/update/flag/PlayerFlags.java +++ b/Server/src/main/core/game/world/update/flag/PlayerFlags.java @@ -3,6 +3,8 @@ package core.game.world.update.flag; import core.game.world.map.Location; import core.game.world.map.RegionChunk; +import java.util.LinkedList; + /** * A class holding a player's updating flags. * @author Emperor @@ -17,7 +19,7 @@ public final class PlayerFlags { /** * The last viewport. */ - private RegionChunk[][] lastViewport = new RegionChunk[13][13]; + private LinkedList lastViewport = new LinkedList<>(); /** * The location the player was standing on when last scene graph update @@ -70,7 +72,7 @@ public final class PlayerFlags { * Gets the lastViewport. * @return The lastViewport. */ - public RegionChunk[][] getLastViewport() { + public LinkedList getLastViewport() { return lastViewport; } @@ -78,7 +80,7 @@ public final class PlayerFlags { * Sets the lastViewport. * @param lastViewport The lastViewport to set. */ - public void setLastViewport(RegionChunk[][] lastViewport) { + public void setLastViewport(LinkedList lastViewport) { this.lastViewport = lastViewport; }