Skip to content

Commit 607412e

Browse files
committed
Cleaner start padding
1 parent c587748 commit 607412e

2 files changed

Lines changed: 15 additions & 17 deletions

File tree

src/main/kotlin/trombone/Pathfinder.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import trombone.Trombone.active
2222
import trombone.handler.Container.containerTask
2323
import trombone.handler.Container.getCollectingPosition
2424
import trombone.handler.Inventory.lastHitVec
25+
import trombone.task.TaskManager.isBehindPos
2526
import trombone.task.TaskManager.populateTasks
2627
import trombone.task.TaskManager.tasks
2728
import trombone.task.TaskState
@@ -115,8 +116,7 @@ object Pathfinder {
115116
private fun checkForResidue(pos: BlockPos) =
116117
containerTask.taskState == TaskState.DONE
117118
&& tasks.values.all {
118-
it.taskState == TaskState.DONE
119-
|| startingBlockPos.toVec3dCenter().distanceTo(pos.toVec3dCenter()) < startingBlockPos.toVec3dCenter().distanceTo(it.blockPos)
119+
it.taskState == TaskState.DONE || !isBehindPos(pos, it.blockPos)
120120
}
121121

122122
private fun SafeClientEvent.isTaskDone(pos: BlockPos): Boolean {
@@ -131,15 +131,15 @@ object Pathfinder {
131131

132132
fun SafeClientEvent.shouldBridge(): Boolean {
133133
return scaffold
134+
&& containerTask.taskState == TaskState.DONE
134135
&& world.isAirBlock(currentBlockPos.add(startingDirection.directionVec))
135136
&& world.isAirBlock(currentBlockPos.add(startingDirection.directionVec).up())
136137
&& world.getBlockState(currentBlockPos.add(startingDirection.directionVec).down()).isReplaceable
138+
&& tasks.values.none { it.taskState == TaskState.PENDING_PLACE }
137139
&& tasks.values.filter {
138140
it.taskState == TaskState.PLACE
139141
|| it.taskState == TaskState.LIQUID
140142
}.none { it.sequence.isNotEmpty() }
141-
&& tasks.values.none { it.taskState == TaskState.PENDING_PLACE }
142-
&& containerTask.taskState == TaskState.DONE
143143
}
144144

145145
private fun SafeClientEvent.moveTo(target: Vec3d) {

src/main/kotlin/trombone/task/TaskManager.kt

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import HighwayTools.multiBuilding
1212
import HighwayTools.saveFood
1313
import HighwayTools.saveTools
1414
import HighwayTools.storageManagement
15-
import com.lambda.client.commons.extension.ceilToInt
15+
import HighwayTools.width
1616
import com.lambda.client.event.SafeClientEvent
1717
import com.lambda.client.manager.managers.PlayerInventoryManager
1818
import com.lambda.client.util.items.countItem
@@ -33,6 +33,7 @@ import net.minecraft.item.ItemFood
3333
import net.minecraft.item.ItemPickaxe
3434
import net.minecraft.util.math.AxisAlignedBB
3535
import net.minecraft.util.math.BlockPos
36+
import net.minecraft.util.math.Vec3d
3637
import trombone.blueprint.BlueprintGenerator.blueprint
3738
import trombone.blueprint.BlueprintGenerator.generateBluePrint
3839
import trombone.blueprint.BlueprintGenerator.isInsideBlueprintBuild
@@ -86,7 +87,7 @@ object TaskManager {
8687

8788
when {
8889
/* start padding */
89-
shouldBeSpared(blockPos) -> { /* Ignore task */ }
90+
startPadding(blockPos) -> { /* Ignore task */ }
9091

9192
/* out of reach */
9293
eyePos.distanceTo(blockPos.toVec3dCenter()) >= maxReach + 1 -> { /* Ignore task */ }
@@ -164,9 +165,6 @@ object TaskManager {
164165

165166
fun SafeClientEvent.runTasks() {
166167
when {
167-
/* Wait for PIM to finish all inventory transactions */
168-
!PlayerInventoryManager.isDone() -> {}
169-
170168
/* Finish the container task first */
171169
containerTask.taskState != TaskState.DONE -> {
172170
containerTask.updateTask(this)
@@ -293,14 +291,14 @@ object TaskManager {
293291
return false
294292
}
295293

296-
// ToDo: Fix padding for diagonal
297-
private fun shouldBeSpared(blockPos: BlockPos) =
298-
startingBlockPos.add(
299-
startingDirection
300-
.clockwise(4)
301-
.directionVec
302-
.multiply((maxReach * 2).ceilToInt() - 1)
303-
).distanceTo(blockPos) < maxReach * 2
294+
private fun startPadding(c: BlockPos) = isBehindPos(startingBlockPos.add(startingDirection.directionVec), c)
295+
296+
fun isBehindPos(origin: BlockPos, check: BlockPos): Boolean {
297+
val a = origin.add(startingDirection.counterClockwise(2).directionVec.multiply(width))
298+
val b = origin.add(startingDirection.clockwise(2).directionVec.multiply(width))
299+
300+
return ((b.x - a.x) * (check.z - a.z) - (b.z - a.z) * (check.x - a.x)) > 0
301+
}
304302

305303
private fun shouldBeIgnored(blockPos: BlockPos, currentState: IBlockState) =
306304
ignoreBlocks.contains(currentState.block.registryName.toString())

0 commit comments

Comments
 (0)