Code: Select all
boat_coords = (2176,289)
def SearchTrees():
  tree_tiles = range(3203,3331)
  trees = []
  x,y = boat_coords
  for tile in tree_tiles:
    trees += GetStaticTilesArray(x-20,y-20,x+20,y+20,WorldNum(), tile)
  return trees
def SortTrees(trees):
  """ @param trees List of tuples(tile,x,y,z) """
  trees_by_distance = {}
  ordered_trees_list = []
  prev_last_tree = (0,boat_coords[0],boat_coords[1])
  def TreeDist(tree1,tree2):
    return Dist(tree1[1],tree1[2],tree2[1],tree2[2])
  for tree in trees:
    td = TreeDist(tree, prev_last_tree)
    if td % 2 == 0:
      td-=1
    trees_group = trees_by_distance.get(td, [])
    trees_group.append(tree)
    trees_by_distance[td] = trees_group
  for current_distance in trees_by_distance:
    trees = trees_by_distance[current_distance]
    first_tree = last_tree = trees[0]
    for tree1 in trees:
      for tree2 in trees:
        if(TreeDist(tree1, tree2) > TreeDist(first_tree,last_tree)):
          first_tree, last_tree = tree1, tree2
    if(TreeDist(prev_last_tree,last_tree) < TreeDist(prev_last_tree, first_tree)):
      first_tree, last_tree = last_tree, first_tree
    trees.sort(key=lambda tree: TreeDist(tree,first_tree))
    ordered_trees_list += trees
    prev_last_tree = last_tree
    
  return ordered_trees_list
ordered_trees_list = SortTrees(SearchTrees())
for tree in ordered_trees_list:
  tile,x,y,z = tree
  newMoveXY(x,y,True,1,False)
