Skip to content

Commit da0efc1

Browse files
committed
More settings
1 parent c0c63e7 commit da0efc1

File tree

4 files changed

+60
-38
lines changed

4 files changed

+60
-38
lines changed

common/src/main/kotlin/com/lambda/module/modules/movement/Pathfinder.kt

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ import com.lambda.event.events.RotationEvent
2525
import com.lambda.event.events.TickEvent
2626
import com.lambda.event.listener.SafeListener.Companion.listen
2727
import com.lambda.graphics.renderer.esp.builders.buildFilled
28-
import com.lambda.graphics.renderer.esp.builders.buildLine
29-
import com.lambda.graphics.renderer.esp.global.StaticESP
3028
import com.lambda.interaction.request.rotation.Rotation
3129
import com.lambda.interaction.request.rotation.Rotation.Companion.rotationTo
3230
import com.lambda.interaction.request.rotation.RotationManager.onRotate
@@ -36,6 +34,7 @@ import com.lambda.module.tag.ModuleTag
3634
import com.lambda.pathing.Path
3735
import com.lambda.pathing.Pathing.findPathAStar
3836
import com.lambda.pathing.Pathing.thetaStarClearance
37+
import com.lambda.pathing.PathingConfig
3938
import com.lambda.pathing.PathingSettings
4039
import com.lambda.pathing.goal.SimpleGoal
4140
import com.lambda.threading.runConcurrent
@@ -44,7 +43,6 @@ import com.lambda.util.Formatting.string
4443
import com.lambda.util.math.setAlpha
4544
import com.lambda.util.player.MovementUtils.buildMovementInput
4645
import com.lambda.util.player.MovementUtils.mergeFrom
47-
import com.lambda.util.world.WorldUtils.isPathClear
4846
import com.lambda.util.world.fastVectorOf
4947
import com.lambda.util.world.toBlockPos
5048
import com.lambda.util.world.toFastVec
@@ -69,8 +67,8 @@ object Pathfinder : Module(
6967
private val rotation = RotationSettings(this) { page == Page.Rotation }
7068

7169
private val target = fastVectorOf(0, 91, -4)
72-
private var longPath = Path()
73-
private var shortPath = Path()
70+
private var coarsePath = Path()
71+
private var refinedPath = Path()
7472
private var currentTarget: Vec3d? = null
7573
private var integralError = Vec3d.ZERO
7674
private var lastError = Vec3d.ZERO
@@ -81,8 +79,8 @@ object Pathfinder : Module(
8179
integralError = Vec3d.ZERO
8280
lastError = Vec3d.ZERO
8381
calculating = false
84-
longPath = Path()
85-
shortPath = Path()
82+
coarsePath = Path()
83+
refinedPath = Path()
8684
currentTarget = null
8785
}
8886

@@ -123,52 +121,60 @@ object Pathfinder : Module(
123121
}
124122

125123
listen<MovementEvent.Sprint> {
126-
if (shortPath.moves.isEmpty()) return@listen
124+
if (refinedPath.moves.isEmpty()) return@listen
127125

128126
player.isSprinting = pathing.allowSprint
129127
it.sprint = pathing.allowSprint
130128
}
131129

132130
listen<RenderEvent.StaticESP> { event ->
133131
// longPath.render(event.renderer, Color.YELLOW)
134-
shortPath.render(event.renderer, Color.GREEN)
132+
refinedPath.render(event.renderer, Color.GREEN)
135133
event.renderer.buildFilled(Box(target.toBlockPos()), Color.PINK.setAlpha(0.25))
136134
}
137135
}
138136

139137
private fun SafeContext.updateTargetNode() {
140-
shortPath.moves.firstOrNull()?.let { current ->
138+
refinedPath.moves.firstOrNull()?.let { current ->
141139
if (player.pos.distanceTo(current.bottomPos) < pathing.tolerance) {
142-
shortPath.moves.removeFirst()
140+
refinedPath.moves.removeFirst()
143141
integralError = Vec3d.ZERO
144142
}
145-
currentTarget = shortPath.moves.firstOrNull()?.bottomPos
143+
currentTarget = refinedPath.moves.firstOrNull()?.bottomPos
146144
} ?: run {
147145
currentTarget = null
148146
}
149147
}
150148

151149
private fun SafeContext.updatePaths() {
152-
runConcurrent {
153-
calculating = true
154-
val long: Path
155-
val aStar = measureTimeMillis {
156-
long = findPathAStar(
157-
player.blockPos.toFastVec(),
158-
SimpleGoal(target),
159-
pathing
160-
)
150+
val goal = SimpleGoal(target)
151+
when (pathing.algorithm) {
152+
PathingConfig.PathingAlgorithm.A_STAR -> {
153+
runConcurrent {
154+
calculating = true
155+
val long: Path
156+
val aStar = measureTimeMillis {
157+
long = findPathAStar(player.blockPos.toFastVec(), goal, pathing)
158+
}
159+
val short: Path
160+
val thetaStar = measureTimeMillis {
161+
short = if (pathing.pathRefining) {
162+
thetaStarClearance(long, pathing)
163+
} else long
164+
}
165+
info("A* (Length: ${long.length().string} Nodes: ${long.moves.size} T: $aStar ms) and Theta* (Length: ${short.length().string} Nodes: ${short.moves.size} T: $thetaStar ms)")
166+
println("Long: $long | Short: $short")
167+
short.moves.removeFirstOrNull()
168+
coarsePath = long
169+
refinedPath = short
170+
// calculating = false
171+
}
161172
}
162-
val short: Path
163-
val thetaStar = measureTimeMillis {
164-
short = thetaStarClearance(long, pathing)
173+
PathingConfig.PathingAlgorithm.D_STAR_LITE -> {
174+
runConcurrent {
175+
// 1. Build graph from goal to target
176+
}
165177
}
166-
info("A* (Length: ${long.length().string} Nodes: ${long.moves.size} T: $aStar ms) and Theta* (Length: ${short.length().string} Nodes: ${short.moves.size} T: $thetaStar ms)")
167-
println("Long: $long | Short: $short")
168-
short.moves.removeFirstOrNull()
169-
longPath = long
170-
shortPath = short
171-
// calculating = false
172178
}
173179
}
174180

common/src/main/kotlin/com/lambda/pathing/Pathing.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ object Pathing {
9797
isPathClear(
9898
startMove.pos.toBlockPos(),
9999
candidateMove.pos.toBlockPos(),
100-
config.clearancePrecition
100+
config.clearancePrecision
101101
)
102102
) nextIndex++ else break
103103
}

common/src/main/kotlin/com/lambda/pathing/PathingConfig.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,28 @@
1717

1818
package com.lambda.pathing
1919

20+
import com.lambda.util.NamedEnum
21+
2022
interface PathingConfig {
23+
val algorithm: PathingAlgorithm
24+
val cutoffTimeout: Long
25+
val maxFallHeight: Double
26+
27+
val pathRefining: Boolean
28+
val shortcutLength: Int
29+
val clearancePrecision: Double
30+
val findShortcutJumps: Boolean
31+
2132
val kP: Double
2233
val kI: Double
2334
val kD: Double
2435
val tolerance: Double
25-
val cutoffTimeout: Long
26-
val shortcutLength: Int
27-
val clearancePrecition: Double
2836
val allowSprint: Boolean
29-
val maxFallHeight: Double
3037

3138
val assumeJesus: Boolean
39+
40+
enum class PathingAlgorithm(override val displayName: String) : NamedEnum {
41+
A_STAR("A*"),
42+
D_STAR_LITE("D* Lite"),
43+
}
3244
}

common/src/main/kotlin/com/lambda/pathing/PathingSettings.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,20 @@ class PathingSettings(
2424
vis: () -> Boolean = { true }
2525
) : PathingConfig {
2626
enum class Page {
27-
Pathfinding, Movement, Misc
27+
Pathfinding, Refinement, Movement, Misc
2828
}
2929

3030
private val page by c.setting("Pathing Page", Page.Pathfinding, "Current page", vis)
3131

32+
override val algorithm by c.setting("Pathfinding Algorithm", PathingConfig.PathingAlgorithm.A_STAR) { vis() && page == Page.Pathfinding }
3233
override val cutoffTimeout by c.setting("Cutoff Timeout", 500L, 1L..2000L, 10L, "Timeout of path calculation", " ms") { vis() && page == Page.Pathfinding }
33-
override val shortcutLength by c.setting("Shortcut Length", 10, 1..100, 1) { vis() && page == Page.Pathfinding }
34-
override val clearancePrecition by c.setting("Clearance Precition", 0.2, 0.0..1.0, 0.01) { vis() && page == Page.Pathfinding }
3534
override val maxFallHeight by c.setting("Max Fall Height", 3.0, 0.0..30.0, 0.5) { vis() && page == Page.Pathfinding }
3635

36+
override val pathRefining by c.setting("Path Refining", true) { vis() && page == Page.Refinement }
37+
override val shortcutLength by c.setting("Shortcut Length", 10, 1..100, 1) { vis() && pathRefining && page == Page.Refinement }
38+
override val clearancePrecision by c.setting("Clearance Precision", 0.2, 0.0..1.0, 0.01) { vis() && pathRefining && page == Page.Refinement }
39+
override val findShortcutJumps by c.setting("Find Shortcut Jumps", true) { vis() && pathRefining && page == Page.Refinement }
40+
3741
override val kP by c.setting("P Gain", 0.5, 0.0..2.0, 0.01) { vis() && page == Page.Movement }
3842
override val kI by c.setting("I Gain", 0.0, 0.0..1.0, 0.01) { vis() && page == Page.Movement }
3943
override val kD by c.setting("D Gain", 0.2, 0.0..1.0, 0.01) { vis() && page == Page.Movement }

0 commit comments

Comments
 (0)