]> git.scottworley.com Git - planeteer/blobdiff - planeteer.go
Implement --end
[planeteer] / planeteer.go
index c207c13c1fe05719c3e5fcfdc19f677282fcb63c..d17c5a5eea021b9a0e3d8d912df03e5be5401e31 100644 (file)
@@ -77,7 +77,7 @@ func end() map[string]bool {
                return nil
        }
        m := make(map[string]bool)
-       for _, p := range strings.Split(*flight_plan_string, ",") {
+       for _, p := range strings.Split(*end_string, ",") {
                m[p] = true
        }
        return m
@@ -278,7 +278,9 @@ func FillCellByArriving(data planet_data, dims []int, table []State, addr []int)
        if addr[Fuel]+2 < dims[Fuel] {
                other[Fuel] = addr[Fuel] + 2
                for other[Location] = 0; other[Location] < dims[Location]; other[Location]++ {
-                       UpdateCell(table, my_index, EncodeIndex(dims, other), 0)
+                       if data.Planets[data.i2p[addr[Location]]].BeaconOn {
+                               UpdateCell(table, my_index, EncodeIndex(dims, other), 0)
+                       }
                }
                other[Location] = addr[Location]
                other[Fuel] = addr[Fuel]
@@ -298,13 +300,17 @@ func FillCellByArriving(data planet_data, dims []int, table []State, addr []int)
        }
 
        /* Travel here via Eden Warp Unit */
-       for other[Edens] = addr[Edens] + 1; other[Edens] < dims[Edens]; other[Edens]++ {
-               for other[Location] = 0; other[Location] < dims[Location]; other[Location]++ {
-                       UpdateCell(table, my_index, EncodeIndex(dims, other), 0)
+       if addr[Edens]+1 < dims[Edens] {
+               _, available := data.Planets[data.i2p[addr[Location]]].RelativePrices["Eden Warp Units"]
+               if !available {
+                       other[Edens] = addr[Edens] + 1
+                       for other[Location] = 0; other[Location] < dims[Location]; other[Location]++ {
+                               UpdateCell(table, my_index, EncodeIndex(dims, other), 0)
+                       }
+                       other[Location] = addr[Location]
+                       other[Edens] = addr[Edens]
                }
        }
-       other[Location] = addr[Location]
-       other[Edens] = addr[Edens]
 }
 
 func FillCellBySelling(data planet_data, dims []int, table []State, addr []int) {
@@ -478,10 +484,12 @@ func FindBestState(data planet_data, dims []int, table []State) int {
        max_index := -1
        max_value := 0
        for addr[Location] = 0; addr[Location] < dims[Location]; addr[Location]++ {
-               index := EncodeIndex(dims, addr)
-               if table[index].value > max_value {
-                       max_value = table[index].value
-                       max_index = index
+               if len(end()) == 0 || end()[data.i2p[addr[Location]]] {
+                       index := EncodeIndex(dims, addr)
+                       if table[index].value > max_value {
+                               max_value = table[index].value
+                               max_index = index
+                       }
                }
        }
        return max_index