From 07738cbac69b6649be86e69afb37b91c2247dcd4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 7 Jul 2024 20:17:14 -0400 Subject: [PATCH] Fixed #10010 --- core/src/mindustry/core/Logic.java | 32 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 6af657678f..7d1a7bb5b9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -47,17 +47,7 @@ public class Logic implements ApplicationListener{ Events.on(BlockBuildEndEvent.class, event -> { if(!event.breaking){ - TeamData data = event.team.data(); - Iterator it = data.plans.iterator(); - var bounds = event.tile.block().bounds(event.tile.x, event.tile.y, Tmp.r1); - while(it.hasNext()){ - BlockPlan b = it.next(); - Block block = content.block(b.block); - if(bounds.overlaps(block.bounds(b.x, b.y, Tmp.r2))){ - b.removed = true; - it.remove(); - } - } + checkOverlappingPlans(event.team, event.tile); if(event.team == state.rules.defaultTeam){ state.stats.placedBlockCount.increment(event.tile.block()); @@ -65,6 +55,12 @@ public class Logic implements ApplicationListener{ } }); + Events.on(PayloadDropEvent.class, e -> { + if(e.build != null){ + checkOverlappingPlans(e.build.team, e.build.tile); + } + }); + //when loading a 'damaged' sector, propagate the damage Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ @@ -211,6 +207,20 @@ public class Logic implements ApplicationListener{ }); } + private void checkOverlappingPlans(Team team, Tile tile){ + TeamData data = team.data(); + Iterator it = data.plans.iterator(); + var bounds = tile.block().bounds(tile.x, tile.y, Tmp.r1); + while(it.hasNext()){ + BlockPlan b = it.next(); + Block block = content.block(b.block); + if(bounds.overlaps(block.bounds(b.x, b.y, Tmp.r2))){ + b.removed = true; + it.remove(); + } + } + } + /** Adds starting items, resets wave time, and sets state to playing. */ public void play(){ state.set(State.playing);