From 29242249bd5727d8833deebf2832f8f2523e0aae Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 23 Sep 2021 19:44:42 -0400 Subject: [PATCH] Fixed #6039 --- .../src/mindustry/graphics/BlockRenderer.java | 20 +++++++++++++++++++ core/src/mindustry/world/Tile.java | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index cc40a2c040..0bdd40bfa3 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -117,10 +117,30 @@ public class BlockRenderer{ lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated } + invalidateTile(event.tile); recordIndex(event.tile); }); } + public void invalidateTile(Tile tile){ + int avgx = (int)(camera.position.x / tilesize); + int avgy = (int)(camera.position.y / tilesize); + int rangex = (int)(camera.width / tilesize / 2) + 3; + int rangey = (int)(camera.height / tilesize / 2) + 3; + + if(Math.abs(avgx - tile.x) <= rangex && Math.abs(avgy - tile.y) <= rangey){ + lastCamY = lastCamX = -99; //invalidate camera position so blocks get updated + } + } + + public void removeFloorIndex(Tile tile){ + if(indexFloor(tile)) floorTree.remove(tile); + } + + public void addFloorIndex(Tile tile){ + if(indexFloor(tile)) floorTree.insert(tile); + } + boolean indexBlock(Tile tile){ var block = tile.block(); return tile.isCenter() && block != Blocks.air && block.cacheLayer == CacheLayer.normal; diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 93b53d4f81..4131a22c4e 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -269,6 +269,10 @@ public class Tile implements Position, QuadTreeObject, Displayable{ this.floor = type; this.overlay = (Floor)Blocks.air; + if(!headless && !world.isGenerating()){ + renderer.blocks.removeFloorIndex(this); + } + recache(); if(build != null){ build.onProximityUpdate(); @@ -305,6 +309,8 @@ public class Tile implements Position, QuadTreeObject, Displayable{ if(!headless && !world.isGenerating()){ renderer.blocks.floor.recacheTile(this); renderer.minimap.update(this); + renderer.blocks.invalidateTile(this); + renderer.blocks.addFloorIndex(this); //update neighbor tiles as well for(int i = 0; i < 8; i++){ Tile other = world.tile(x + Geometry.d8[i].x, y + Geometry.d8[i].y);