Add skipping ordered waypoints

This commit is contained in:
Linnea Gräf
2024-05-07 19:05:55 +02:00
parent d47a3e8633
commit 0cb976ce07
2 changed files with 21 additions and 5 deletions

View File

@@ -45,9 +45,8 @@ object Waypoints : FirmamentFeature {
object TConfig : ManagedConfig(identifier) { object TConfig : ManagedConfig(identifier) {
val tempWaypointDuration by duration("temp-waypoint-duration", 0.seconds, 1.hours) { 30.seconds } val tempWaypointDuration by duration("temp-waypoint-duration", 0.seconds, 1.hours) { 30.seconds }
val showIndex by toggle("show-index") { true } val showIndex by toggle("show-index") { true }
val skipToNearest by toggle("skip-to-nearest") { false }
// TODO: look ahead size // TODO: look ahead size
// TODO: skip to nearest/skip to next only
// TODO: skip command
} }
data class TemporaryWaypoint( data class TemporaryWaypoint(
@@ -148,6 +147,16 @@ object Waypoints : FirmamentFeature {
source.sendFeedback(Text.translatable("firmament.command.waypoint.ordered.toggle.$ordered")) source.sendFeedback(Text.translatable("firmament.command.waypoint.ordered.toggle.$ordered"))
} }
} }
thenLiteral("skip") {
thenExecute {
if (ordered && waypoints.isNotEmpty()) {
orderedIndex = (orderedIndex + 1) % waypoints.size
source.sendFeedback(Text.translatable("firmament.command.waypoint.skip"))
} else {
source.sendError(Text.translatable("firmament.command.waypoint.skip.error"))
}
}
}
thenLiteral("remove") { thenLiteral("remove") {
thenArgument("index", IntegerArgumentType.integer(0)) { indexArg -> thenArgument("index", IntegerArgumentType.integer(0)) { indexArg ->
thenExecute { thenExecute {
@@ -230,10 +239,15 @@ object Waypoints : FirmamentFeature {
if (waypoints.isEmpty() || !ordered) return@subscribe if (waypoints.isEmpty() || !ordered) return@subscribe
orderedIndex %= waypoints.size orderedIndex %= waypoints.size
val p = MC.player?.pos ?: return@subscribe val p = MC.player?.pos ?: return@subscribe
if (TConfig.skipToNearest) {
orderedIndex =
(waypoints.withIndex().minBy { it.value.getSquaredDistance(p) }.index + 1) % waypoints.size
} else {
if (waypoints[orderedIndex].isWithinDistance(p, 3.0)) { if (waypoints[orderedIndex].isWithinDistance(p, 3.0)) {
orderedIndex = (orderedIndex + 1) % waypoints.size orderedIndex = (orderedIndex + 1) % waypoints.size
} }
} }
}
ProcessChatEvent.subscribe { ProcessChatEvent.subscribe {
val matcher = temporaryPlayerWaypointMatcher.matcher(it.unformattedString) val matcher = temporaryPlayerWaypointMatcher.matcher(it.unformattedString)
if (it.nameHeuristic != null && TConfig.tempWaypointDuration > 0.seconds && matcher.find()) { if (it.nameHeuristic != null && TConfig.tempWaypointDuration > 0.seconds && matcher.find()) {

View File

@@ -6,11 +6,13 @@
"firmament.command.toggle.not-a-toggle": "Property %s is not a toggle", "firmament.command.toggle.not-a-toggle": "Property %s is not a toggle",
"firmament.command.toggle.toggled": "Toggled %s / %s %s", "firmament.command.toggle.toggled": "Toggled %s / %s %s",
"firmament.command.waypoint.import": "Imported %s waypoints from clipboard.", "firmament.command.waypoint.import": "Imported %s waypoints from clipboard.",
"firmament.command.waypoint.import.error": "Could not import waypoints. Make sure they are on ColeWeight format:\n[{\"x\": 69, \"y\":420, \"z\": 36}]", "firmament.command.waypoint.import.error": "Could not import waypoints from clipboard. Make sure they are on ColeWeight format:\n[{\"x\": 69, \"y\":420, \"z\": 36}]",
"firmament.command.waypoint.clear": "Cleared waypoints.", "firmament.command.waypoint.clear": "Cleared waypoints.",
"firmament.command.waypoint.added": "Added waypoint %s %s %s.", "firmament.command.waypoint.added": "Added waypoint %s %s %s.",
"firmament.command.waypoint.remove": "Removed waypoint %s. Other waypoints may have different indexes now.", "firmament.command.waypoint.remove": "Removed waypoint %s. Other waypoints may have different indexes now.",
"firmament.command.waypoint.remove.error": "Could not find waypoint with that index to delete.", "firmament.command.waypoint.remove.error": "Could not find waypoint with that index to delete.",
"firmament.command.waypoint.skip.error": "Could not skip a waypoint. Are you in ordered waypoint mode with waypoints loaded?",
"firmament.command.waypoint.skip": "Skipped 1 waypoint",
"firmament.pristine-profit.collection": "Collection: %s/h", "firmament.pristine-profit.collection": "Collection: %s/h",
"firmament.pristine-profit.money": "Money: %s/h", "firmament.pristine-profit.money": "Money: %s/h",
"firmament.toggle.true": "On", "firmament.toggle.true": "On",