Skip to content

Commit dc423ea

Browse files
committed
simplify rotation requests and fix kill aura
1 parent 0e533d3 commit dc423ea

38 files changed

+307
-707
lines changed

src/main/kotlin/com/lambda/config/groups/BuildConfig.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ interface BuildConfig : ISettingGroup {
3232
val actionTimeout: Int
3333
val maxBuildDependencies: Int
3434

35-
val attackReach: Double
36-
val interactReach: Double
35+
val entityReach: Double
36+
val blockReach: Double
3737
val scanReach: Double
3838

39-
val strictRayCast: Boolean
4039
val checkSideVisibility: Boolean
40+
val strictRayCast: Boolean
4141
val resolution: Int
4242
val pointSelection: PointSelection
4343

src/main/kotlin/com/lambda/config/groups/BuildSettings.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ class BuildSettings(
4242
override val actionTimeout by c.setting("Action Timeout", 10, 1..30, 1, "Timeout for block breaks in ticks", unit = " ticks").group(baseGroup, Group.General).index()
4343
override val maxBuildDependencies by c.setting("Max Sim Dependencies", 3, 0..10, 1, "Maximum dependency build results").group(baseGroup, Group.General).index()
4444

45-
override var attackReach by c.setting("Attack Reach", 3.0, 1.0..7.0, 0.01, "Maximum entity interaction distance").group(baseGroup, Group.Reach).index()
46-
override var interactReach by c.setting("Interact Reach", 4.5, 1.0..7.0, 0.01, "Maximum block interaction distance").group(baseGroup, Group.Reach).index()
47-
override val scanReach: Double get() = max(attackReach, interactReach)
45+
override var entityReach by c.setting("Attack Reach", 3.0, 1.0..7.0, 0.01, "Maximum entity interaction distance").group(baseGroup, Group.Reach).index()
46+
override var blockReach by c.setting("Interact Reach", 4.5, 1.0..7.0, 0.01, "Maximum block interaction distance").group(baseGroup, Group.Reach).index()
47+
override val scanReach: Double get() = max(entityReach, blockReach)
4848

4949
override val checkSideVisibility by c.setting("Visibility Check", true, "Whether to check if an AABB side is visible").group(baseGroup, Group.Scan).index()
5050
override val strictRayCast by c.setting("Strict Raycast", false, "Whether to include the environment to the ray cast context").group(baseGroup, Group.Scan).index()

src/main/kotlin/com/lambda/config/groups/RotationSettings.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,27 @@ class RotationSettings(
3838
override var rotationMode by c.setting("Mode", RotationMode.Sync, "How the player is being rotated on interaction").group(baseGroup).index()
3939

4040
/** How many ticks to keep the rotation before resetting */
41-
override val keepTicks by c.setting("Keep Rotation", 1, 1..10, 1, "Ticks to keep rotation", " ticks") { rotate }.group(baseGroup).index()
41+
override val keepTicks by c.setting("Keep Rotation", 1, 1..10, 1, "Ticks to keep rotation", " ticks").group(baseGroup).index()
4242

4343
/** How many ticks to wait before resetting the rotation */
44-
override val decayTicks by c.setting("Reset Rotation", 1, 1..10, 1, "Ticks before rotation is reset", " ticks") { rotate }.group(baseGroup).index()
44+
override val decayTicks by c.setting("Reset Rotation", 1, 1..10, 1, "Ticks before rotation is reset", " ticks").group(baseGroup).index()
4545

4646
override val tickStageMask = ALL_STAGES.subList(0, ALL_STAGES.indexOf(TickEvent.Player.Post)).toSet()
4747

4848
/** Whether the rotation is instant */
49-
var instant by c.setting("Instant Rotation", true, "Instantly rotate") { rotate }.group(baseGroup).index()
49+
var instant by c.setting("Instant Rotation", true, "Instantly rotate").group(baseGroup).index()
5050

5151
/**
5252
* The mean (average/base) value used to calculate rotation speed.
5353
* This value represents the center of the distribution.
5454
*/
55-
var mean by c.setting("Mean", 40.0, 1.0..120.0, 0.1, "Average rotation speed", unit = "°") { rotate && !instant }.group(baseGroup).index()
55+
var mean by c.setting("Mean", 40.0, 1.0..120.0, 0.1, "Average rotation speed", unit = "°") { !instant }.group(baseGroup).index()
5656

5757
/**
5858
* The standard deviation for the Gaussian distribution used to calculate rotation speed.
5959
* This value represents the spread of rotation speed.
6060
*/
61-
var spread by c.setting("Spread", 10.0, 0.0..60.0, 0.1, "Spread of rotation speeds", unit = "°") { rotate && !instant }.group(baseGroup).index()
61+
var spread by c.setting("Spread", 10.0, 0.0..60.0, 0.1, "Spread of rotation speeds", unit = "°") { !instant }.group(baseGroup).index()
6262

6363
/**
6464
* We must always provide turn speed to the interpolator because the player's yaw might exceed the -180 to 180 range.

src/main/kotlin/com/lambda/config/groups/Targeting.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import net.minecraft.client.network.OtherClientPlayerEntity
3434
import net.minecraft.entity.LivingEntity
3535
import net.minecraft.entity.decoration.ArmorStandEntity
3636
import net.minecraft.entity.mob.HostileEntity
37-
import net.minecraft.entity.mob.MobEntity
3837
import net.minecraft.entity.passive.PassiveEntity
3938
import java.util.*
4039

@@ -178,7 +177,8 @@ abstract class Targeting(
178177
}
179178

180179
private val illegalTargets = setOf(
181-
UUID(5706954458220675710, -6736729783554821869)
180+
UUID(5706954458220675710, -6736729783554821869),
181+
UUID(-2945922493004570036, -7599209072395336449)
182182
)
183183
}
184184

src/main/kotlin/com/lambda/event/events/UpdateManagerEvent.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/main/kotlin/com/lambda/interaction/construction/simulation/Sim.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ import com.lambda.interaction.construction.simulation.result.BuildResult
2222
import com.lambda.interaction.construction.simulation.result.results.GenericResult
2323
import com.lambda.interaction.managers.rotating.Rotation.Companion.rotationTo
2424
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.CheckedHit
25-
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.getClosestPoints
26-
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.getVisibleSurfaces
25+
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.scanClosestPoints
2726
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.scanSurfaces
2827
import com.lambda.util.math.distSq
2928
import com.lambda.util.math.vec3d
@@ -95,20 +94,16 @@ abstract class Sim<T : BuildResult> : Results<T> {
9594
): Set<CheckedHit>? {
9695
val boxes = voxelShape.boundingBoxes.map { it.offset(pos) }
9796

98-
val reachSq = buildConfig.interactReach.pow(2)
97+
val reachSq = buildConfig.blockReach.pow(2)
9998

10099
val validHits = ConcurrentSet<CheckedHit>()
101100
val misses = ConcurrentSet<Pair<Vec3d, Direction>>()
102101

103102
supervisorScope {
104103
boxes.forEach { box ->
105104
launch {
106-
val sides = if (buildConfig.checkSideVisibility || buildConfig.strictRayCast)
107-
sides.intersect(box.getVisibleSurfaces(pov))
108-
else sides
109-
110105
if (!buildConfig.strictRayCast) {
111-
box.getClosestPoints(pov, sides, preProcessing, interactConfig.airPlace.isEnabled) { vec, side ->
106+
box.scanClosestPoints(pov, sides, preProcessing, interactConfig.airPlace.isEnabled) { vec, side ->
112107
if (pov distSq vec > reachSq)
113108
misses.add(Pair(vec, side))
114109
else {
@@ -120,14 +115,14 @@ abstract class Sim<T : BuildResult> : Results<T> {
120115
)
121116
}
122117
}
123-
} else box.scanSurfaces(sides, buildConfig.resolution, preProcessing, false) { side, vec ->
118+
} else box.scanSurfaces(pov, sides, buildConfig.resolution, preProcessing, false) { vec, side ->
124119
if (pov distSq vec > reachSq) {
125120
misses.add(Pair(vec, side))
126121
return@scanSurfaces
127122
}
128123

129124
val newRotation = pov.rotationTo(vec)
130-
val hit = newRotation.rayCast(buildConfig.interactReach, pov)?.blockResult ?: return@scanSurfaces
125+
val hit = newRotation.rayCast(buildConfig.blockReach, pov)?.blockResult ?: return@scanSurfaces
131126

132127
if (hit.blockPos != pos || hit.side != side) return@scanSurfaces
133128
val checked = CheckedHit(hit, newRotation)

src/main/kotlin/com/lambda/interaction/construction/simulation/checks/BreakSim.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,26 @@
1818
package com.lambda.interaction.construction.simulation.checks
1919

2020
import com.lambda.context.AutomatedSafeContext
21-
import com.lambda.interaction.construction.simulation.result.BuildResult
22-
import com.lambda.interaction.construction.simulation.result.results.BreakResult
23-
import com.lambda.interaction.construction.simulation.result.results.GenericResult
2421
import com.lambda.interaction.construction.simulation.BreakSimInfo
2522
import com.lambda.interaction.construction.simulation.Sim
2623
import com.lambda.interaction.construction.simulation.SimDsl
2724
import com.lambda.interaction.construction.simulation.SimInfo
2825
import com.lambda.interaction.construction.simulation.SimInfo.Companion.sim
2926
import com.lambda.interaction.construction.simulation.context.BreakContext
27+
import com.lambda.interaction.construction.simulation.result.BuildResult
28+
import com.lambda.interaction.construction.simulation.result.results.BreakResult
29+
import com.lambda.interaction.construction.simulation.result.results.GenericResult
3030
import com.lambda.interaction.construction.verify.TargetState
31+
import com.lambda.interaction.managers.hotbar.HotbarManager
32+
import com.lambda.interaction.managers.rotating.RotationManager
33+
import com.lambda.interaction.managers.rotating.RotationRequest
34+
import com.lambda.interaction.managers.rotating.visibilty.lookAtBlock
3135
import com.lambda.interaction.material.ContainerSelection.Companion.selectContainer
3236
import com.lambda.interaction.material.StackSelection
3337
import com.lambda.interaction.material.StackSelection.Companion.EVERYTHING
3438
import com.lambda.interaction.material.StackSelection.Companion.selectStack
3539
import com.lambda.interaction.material.container.ContainerManager.findContainersWithMaterial
3640
import com.lambda.interaction.material.container.MaterialContainer
37-
import com.lambda.interaction.managers.hotbar.HotbarManager
38-
import com.lambda.interaction.managers.rotating.RotationManager
39-
import com.lambda.interaction.managers.rotating.RotationRequest
40-
import com.lambda.interaction.managers.rotating.visibilty.lookAt
41-
import com.lambda.interaction.managers.rotating.visibilty.lookAtBlock
4241
import com.lambda.util.BlockUtils.blockState
4342
import com.lambda.util.BlockUtils.calcItemBlockBreakingDelta
4443
import com.lambda.util.BlockUtils.instantBreakable
@@ -107,9 +106,9 @@ class BreakSim private constructor(simInfo: SimInfo)
107106
val shape = state.getOutlineShape(world, pos)
108107

109108
if (shape.boundingBoxes.map { it.offset(pos) }.any { it.contains(pov) }) {
110-
val currentCast = RotationManager.activeRotation.rayCast(buildConfig.interactReach, pov)
109+
val currentCast = RotationManager.activeRotation.rayCast(buildConfig.blockReach, pov)
111110
currentCast?.blockResult?.let { blockHit ->
112-
val rotationRequest = RotationRequest(lookAtBlock(pos), this)
111+
val rotationRequest = RotationRequest(lookAtBlock(pos)?.rotation ?: return, this)
113112
val breakContext = BreakContext(
114113
blockHit,
115114
rotationRequest,
@@ -128,8 +127,7 @@ class BreakSim private constructor(simInfo: SimInfo)
128127
val validHits = scanShape(pov, shape, pos, Direction.entries.toSet(), null) ?: return
129128

130129
val bestHit = buildConfig.pointSelection.select(validHits) ?: return
131-
val target = lookAt(bestHit.rotation)
132-
val rotationRequest = RotationRequest(target, this)
130+
val rotationRequest = RotationRequest(bestHit.rotation, this)
133131

134132
val breakContext = BreakContext(
135133
bestHit.hit.blockResult ?: return,

src/main/kotlin/com/lambda/interaction/construction/simulation/checks/InteractSim.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import com.lambda.interaction.managers.rotating.RotationManager
3333
import com.lambda.interaction.managers.rotating.RotationRequest
3434
import com.lambda.interaction.managers.rotating.visibilty.PlaceDirection
3535
import com.lambda.interaction.managers.rotating.visibilty.VisibilityChecker.CheckedHit
36-
import com.lambda.interaction.managers.rotating.visibilty.lookAt
3736
import com.lambda.interaction.managers.rotating.visibilty.lookInDirection
3837
import com.lambda.interaction.material.ContainerSelection.Companion.selectContainer
3938
import com.lambda.interaction.material.StackSelection
@@ -138,7 +137,7 @@ class InteractSim private constructor(simInfo: InteractSimInfo)
138137

139138
val interactContext = InteractContext(
140139
hitResult,
141-
RotationRequest(lookAt(checkedHit.rotation), this@InteractSim),
140+
RotationRequest(checkedHit.rotation, this@InteractSim),
142141
swapStack.inventoryIndex,
143142
pos,
144143
state,
@@ -187,7 +186,7 @@ class InteractSim private constructor(simInfo: InteractSimInfo)
187186

188187
val rotationRequest = if (interactConfig.axisRotate && !expectedState.contains(Properties.ROTATION))
189188
lookInDirection(PlaceDirection.fromRotation(rotatePlaceTest.rotation))
190-
else lookAt(rotatePlaceTest.rotation)
189+
else rotatePlaceTest.rotation
191190

192191
if (swapStack == null) return
193192
if (!swapStack.item.isEnabled(world.enabledFeatures)) {

src/main/kotlin/com/lambda/interaction/construction/simulation/context/BreakContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ data class BreakContext(
5454
val vec = hitResult.pos
5555
val d = vec.x - pov.x
5656
val e = (vec.y - pov.y).let {
57-
if (cachedState.block is FallingBlock) it - (buildConfig.attackReach / 2)
57+
if (cachedState.block is FallingBlock) it - (buildConfig.entityReach / 2)
5858
else it
5959
}
6060
val f = vec.z - pov.z

src/main/kotlin/com/lambda/interaction/construction/simulation/result/Contextual.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import com.lambda.interaction.construction.simulation.context.BreakContext
2222
import com.lambda.interaction.construction.simulation.context.BuildContext
2323
import com.lambda.interaction.construction.simulation.context.InteractContext
2424
import com.lambda.interaction.managers.hotbar.HotbarManager
25+
import com.lambda.interaction.managers.rotating.Rotation.Companion.dist
26+
import com.lambda.interaction.managers.rotating.RotationManager
2527
import com.lambda.threading.runSafe
2628
import com.lambda.util.BlockUtils
2729

@@ -49,7 +51,7 @@ interface Contextual : ComparableResult<Rank> {
4951
ActionConfig.SortMode.Tool,
5052
ActionConfig.SortMode.Closest -> it.sortDistance
5153
ActionConfig.SortMode.Farthest -> -it.sortDistance
52-
ActionConfig.SortMode.Rotation -> it.rotationRequest.target.angleDistance
54+
ActionConfig.SortMode.Rotation -> it.rotationRequest.rotation.value?.dist(RotationManager.activeRotation)
5355
ActionConfig.SortMode.Random -> it.random
5456
}
5557
}.thenByDescending {

0 commit comments

Comments
 (0)