1717
1818package com.lambda.command.commands
1919
20+ import com.lambda.brigadier.argument.double
2021import com.lambda.brigadier.argument.integer
2122import com.lambda.brigadier.argument.literal
2223import com.lambda.brigadier.argument.value
@@ -30,36 +31,130 @@ import com.lambda.util.world.fastVectorOf
3031import com.lambda.util.world.string
3132
3233object PathCommand : LambdaCommand(
33- name = " path " ,
34+ name = " pathfinder " ,
3435 usage = " path <invalidate | reset | update>" ,
35- description = " Move through world"
36+ description = " Finds a quick path through the world" ,
37+ aliases = setOf("path")
3638) {
3739 override fun CommandBuilder.create () {
40+ required(literal(" target" )) {
41+ required(integer(" X" , - 30000000 , 30000000 )) { x ->
42+ required(integer(" Y" , - 64 , 255 )) { y ->
43+ required(integer(" Z" , - 30000000 , 30000000 )) { z ->
44+ execute {
45+ val v = fastVectorOf(x().value(), y().value(), z().value())
46+ Pathfinder .target = v
47+ this @PathCommand.info(" Set new target at ${v.string} " )
48+ }
49+ }
50+ }
51+ }
52+ }
53+
3854 required(literal(" invalidate" )) {
3955 required(integer(" X" , - 30000000 , 30000000 )) { x ->
4056 required(integer(" Y" , - 64 , 255 )) { y ->
4157 required(integer(" Z" , - 30000000 , 30000000 )) { z ->
4258 execute {
43- val dirty = fastVectorOf(x().value(), y().value(), z().value())
44- Pathfinder .dStar.invalidate(dirty)
45- this @PathCommand.info(" Invalidated ${dirty.string} " )
59+ val v = fastVectorOf(x().value(), y().value(), z().value())
60+ Pathfinder .dStar.invalidate(v)
61+ this @PathCommand.info(" Invalidated ${v.string} " )
62+ }
63+ }
64+ }
65+ }
66+ }
67+
68+ required(literal(" remove" )) {
69+ required(integer(" X" , - 30000000 , 30000000 )) { x ->
70+ required(integer(" Y" , - 64 , 255 )) { y ->
71+ required(integer(" Z" , - 30000000 , 30000000 )) { z ->
72+ execute {
73+ val v = fastVectorOf(x().value(), y().value(), z().value())
74+ Pathfinder .graph.remove(v)
75+ this @PathCommand.info(" Removed ${v.string} " )
76+ }
77+ }
78+ }
79+ }
80+ }
81+
82+ required(literal(" update" )) {
83+ required(integer(" X" , - 30000000 , 30000000 )) { x ->
84+ required(integer(" Y" , - 64 , 255 )) { y ->
85+ required(integer(" Z" , - 30000000 , 30000000 )) { z ->
86+ execute {
87+ val u = fastVectorOf(x().value(), y().value(), z().value())
88+ Pathfinder .dStar.updateVertex(u)
89+ this @PathCommand.info(" Updated ${u.string} " )
4690 }
4791 }
4892 }
4993 }
5094 }
5195
52- required(literal(" reset" )) {
96+ required(literal(" successor" )) {
97+ required(integer(" X" , - 30000000 , 30000000 )) { x ->
98+ required(integer(" Y" , - 64 , 255 )) { y ->
99+ required(integer(" Z" , - 30000000 , 30000000 )) { z ->
100+ execute {
101+ val v = fastVectorOf(x().value(), y().value(), z().value())
102+ this @PathCommand.info(" Successors: ${Pathfinder .graph.successors[v]?.keys?.joinToString { it.string }} " )
103+ }
104+ }
105+ }
106+ }
107+ }
108+
109+ required(literal(" predecessors" )) {
110+ required(integer(" X" , - 30000000 , 30000000 )) { x ->
111+ required(integer(" Y" , - 64 , 255 )) { y ->
112+ required(integer(" Z" , - 30000000 , 30000000 )) { z ->
113+ execute {
114+ val v = fastVectorOf(x().value(), y().value(), z().value())
115+ this @PathCommand.info(" Predecessors: ${Pathfinder .graph.predecessors[v]?.keys?.joinToString { it.string }} " )
116+ }
117+ }
118+ }
119+ }
120+ }
121+
122+ required(literal(" setEdge" )) {
123+ required(integer(" X1" , - 30000000 , 30000000 )) { x1 ->
124+ required(integer(" Y1" , - 64 , 255 )) { y1 ->
125+ required(integer(" Z1" , - 30000000 , 30000000 )) { z1 ->
126+ required(integer(" X2" , - 30000000 , 30000000 )) { x2 ->
127+ required(integer(" Y2" , - 64 , 255 )) { y2 ->
128+ required(integer(" Z2" , - 30000000 , 30000000 )) { z2 ->
129+ required(double(" cost" )) { cost ->
130+ execute {
131+ val v1 = fastVectorOf(x1().value(), y1().value(), z1().value())
132+ val v2 = fastVectorOf(x2().value(), y2().value(), z2().value())
133+ val c = cost().value()
134+ Pathfinder .dStar.updateEdge(v1, v2, c)
135+ Pathfinder .needsUpdate = true
136+ this @PathCommand.info(" Updated edge ${v1.string} -> ${v2.string} to cost of $c " )
137+ }
138+ }
139+ }
140+ }
141+ }
142+ }
143+ }
144+ }
145+ }
146+
147+ required(literal(" clear" )) {
53148 execute {
54149 Pathfinder .graph.clear()
55- this @PathCommand.info(" Reset graph" )
150+ this @PathCommand.info(" Cleared graph" )
56151 }
57152 }
58153
59- required(literal(" update " )) {
154+ required(literal(" refresh " )) {
60155 execute {
61156 Pathfinder .needsUpdate = true
62- this @PathCommand.info(" Marked graph for update " )
157+ this @PathCommand.info(" Marked pathfinder for refresh " )
63158 }
64159 }
65160 }
0 commit comments