blob: 6146e50133b3c01de2ae9f23f4f27160cfd8192a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
package moe.nea.firmament.features.world
import io.github.notenoughupdates.moulconfig.observer.ObservableList
import io.github.notenoughupdates.moulconfig.xml.Bind
import moe.nea.firmament.features.events.anniversity.AnniversaryFeatures.atOnce
import moe.nea.firmament.keybindings.SavedKeyBinding
class NpcWaypointGui(
val allWaypoints: List<NavigableWaypoint>,
) {
data class NavigableWaypointW(val waypoint: NavigableWaypoint) {
@Bind
fun name() = waypoint.name
@Bind
fun isSelected() = NavigationHelper.targetWaypoint == waypoint
@Bind
fun click() {
if (SavedKeyBinding.isShiftDown()) {
NavigationHelper.targetWaypoint = waypoint
NavigationHelper.tryWarpNear()
} else if (isSelected()) {
NavigationHelper.targetWaypoint = null
} else {
NavigationHelper.targetWaypoint = waypoint
}
}
}
@JvmField
@field:Bind
var search: String = ""
var lastSearch: String? = null
@Bind("results")
fun results(): ObservableList<NavigableWaypointW> {
return results
}
@Bind
fun tick() {
if (search != lastSearch) {
updateSearch()
lastSearch = search
}
}
val results: ObservableList<NavigableWaypointW> = ObservableList(mutableListOf())
fun updateSearch() {
val split = search.split(" +".toRegex())
results.atOnce {
results.clear()
allWaypoints.filter { waypoint ->
if (search.isBlank()) {
true
} else {
split.all { waypoint.name.contains(it, ignoreCase = true) }
}
}.mapTo(results) {
NavigableWaypointW(it)
}
}
}
}
|