Issue of incorrectly assigned resources appears to be fixed. Complete tile to be tested.
This commit is contained in:
parent
c2d4915114
commit
4ab426308b
@ -295,6 +295,11 @@ class mstr_orthographic:
|
|||||||
def _prepareTile(self):
|
def _prepareTile(self):
|
||||||
mstr_msg("orthographic", "Beginning construction of tile")
|
mstr_msg("orthographic", "Beginning construction of tile")
|
||||||
|
|
||||||
|
# Clear cache
|
||||||
|
tmp = glob.glob(mstr_datafolder + "_cache/*.*")
|
||||||
|
for t in range(0, len(tmp)):
|
||||||
|
os.remove(tmp[t])
|
||||||
|
|
||||||
# We need to know which platform we are on
|
# We need to know which platform we are on
|
||||||
os_platform = os.name
|
os_platform = os.name
|
||||||
|
|
||||||
@ -435,6 +440,7 @@ class mstr_orthographic:
|
|||||||
|
|
||||||
# We now need to "raytrace" the resources for correct placement
|
# We now need to "raytrace" the resources for correct placement
|
||||||
mstr_msg("orthographic", "Performing resource plamement tracing for tile")
|
mstr_msg("orthographic", "Performing resource plamement tracing for tile")
|
||||||
|
|
||||||
for lat_grid in range(1, maxlatlng[0]+1):
|
for lat_grid in range(1, maxlatlng[0]+1):
|
||||||
for lng_grid in range(1, maxlatlng[1]+1):
|
for lng_grid in range(1, maxlatlng[1]+1):
|
||||||
mstr_msg("orthographic", "Placement tracing for " + str(lat_grid) + ":" + str(lng_grid))
|
mstr_msg("orthographic", "Placement tracing for " + str(lat_grid) + ":" + str(lng_grid))
|
||||||
@ -447,7 +453,7 @@ class mstr_orthographic:
|
|||||||
lyr = fnlines[l].split(" ")
|
lyr = fnlines[l].split(" ")
|
||||||
tp = mstr_tileprep(self._lat, self._long, lat_grid, lng_grid, lyr[0], lyr[1], None, False)
|
tp = mstr_tileprep(self._lat, self._long, lat_grid, lng_grid, lyr[0], lyr[1], None, False)
|
||||||
tp._setLatLngFold(self._latlngfld)
|
tp._setLatLngFold(self._latlngfld)
|
||||||
tp._placeTileSources(lat_grid, lng_grid)
|
tp._placeTileSources(mlat, mlng)
|
||||||
|
|
||||||
|
|
||||||
# Generates X-Plane 11/12 scenery with
|
# Generates X-Plane 11/12 scenery with
|
||||||
|
185
tileprep.py
185
tileprep.py
@ -144,6 +144,7 @@ class mstr_tileprep:
|
|||||||
for ln in fnlines:
|
for ln in fnlines:
|
||||||
l = ln.split(" ")
|
l = ln.split(" ")
|
||||||
if l[0] == self._tag and l[1] == self._value:
|
if l[0] == self._tag and l[1] == self._value:
|
||||||
|
l[3] = l[3].replace("\n", "")
|
||||||
touch = l[3]
|
touch = l[3]
|
||||||
|
|
||||||
return touch
|
return touch
|
||||||
@ -234,143 +235,117 @@ class mstr_tileprep:
|
|||||||
return [ (tv+1, th), (tv, th+1), (tv-1, th), (tv, th-1) ]
|
return [ (tv+1, th), (tv, th+1), (tv-1, th), (tv, th-1) ]
|
||||||
|
|
||||||
|
|
||||||
# Walk through the now existing data files and make sure we always pick the correct
|
# Scan connections of a specific tile
|
||||||
# sources for every tile, thus evading previous edge detection errors
|
def _scanConnections(self, tile):
|
||||||
def _placeTileSources(self, mlat, mlng):
|
# The array of visited tiles
|
||||||
|
visited = []
|
||||||
|
|
||||||
# None of the edges have reached their end yet
|
# None of the edges have reached their end yet
|
||||||
edge_end = [0,0,0,0] # top, right, bottom, left
|
edge_end = [0,0,0,0] # top, right, bottom, left
|
||||||
|
|
||||||
# Array with info we need
|
|
||||||
resinfo = ["", ""] # Touch, Resource numbers
|
|
||||||
|
|
||||||
# Go through everything until the end is reached (no more options left)
|
|
||||||
end_reached = False
|
end_reached = False
|
||||||
while end_reached == False:
|
while end_reached == False:
|
||||||
|
|
||||||
# Go north
|
# Go north
|
||||||
tv = self._tile_v
|
tv = tile[0]
|
||||||
th = self._tile_h
|
th = tile[1]
|
||||||
|
|
||||||
while edge_end[0] == 0:
|
while edge_end[0] == 0:
|
||||||
resinfo[0] = self._getResourceTouch(tv, th)
|
owntouch = self._getResourceTouch(tv, th)
|
||||||
resinfo[1] = self._getResourceInfo(tv, th)
|
if "t" in owntouch:
|
||||||
|
if self._checkVisited(visited, (tv, th)) == False: visited.append((tv, th))
|
||||||
# Only do the following steps if we have nothing stored
|
if self._checkVisited(visited, (tv+1, th)) == False: visited.append((tv+1, th))
|
||||||
if resinfo[1] == "0":
|
|
||||||
neighbors = self._findNeighbors(tv, th)
|
|
||||||
neighborinfo = ["",""]
|
|
||||||
for n in range(0, len(neighbors)):
|
|
||||||
neighborinfo[0] = self._getResourceTouch(neighbors[n][0], neighbors[n][1])
|
|
||||||
neighborinfo[1] = self._getResourceInfo(neighbors[n][0], neighbors[n][1])
|
|
||||||
if "b" in neighborinfo[0] and neighborinfo[1] != "0":
|
|
||||||
resinfo[1] = neighborinfo[1]
|
|
||||||
break
|
|
||||||
|
|
||||||
# Store info. At this point we either have neighboring data, or
|
|
||||||
# we need to select something
|
|
||||||
if resinfo[1] == "0": resinfo[1] = self._selectResources()
|
|
||||||
self._storeResourceInfo(tv, th, resinfo[1])
|
|
||||||
|
|
||||||
# Move forward
|
|
||||||
if "t" in resinfo[0]:
|
|
||||||
tv=tv+1
|
tv=tv+1
|
||||||
else:
|
else:
|
||||||
edge_end[0] = 1
|
edge_end[0] = 1
|
||||||
|
|
||||||
|
|
||||||
# Go east
|
# Go east
|
||||||
tv = self._tile_v
|
tv = tile[0]
|
||||||
th = self._tile_h
|
th = tile[1]
|
||||||
|
|
||||||
while edge_end[1] == 0:
|
while edge_end[1] == 0:
|
||||||
resinfo[0] = self._getResourceTouch(tv, th)
|
owntouch = self._getResourceTouch(tv, th)
|
||||||
resinfo[1] = self._getResourceInfo(tv, th)
|
if "r" in owntouch:
|
||||||
|
if self._checkVisited(visited, (tv, th)) == False: visited.append((tv, th))
|
||||||
# Only do the following steps if we have nothing stored
|
if self._checkVisited(visited, (tv, th+1)) == False: visited.append((tv, th+1))
|
||||||
if resinfo[1] == "0":
|
|
||||||
neighbors = self._findNeighbors(tv, th)
|
|
||||||
neighborinfo = ["",""]
|
|
||||||
for n in range(0, len(neighbors)):
|
|
||||||
neighborinfo[0] = self._getResourceTouch(neighbors[n][0], neighbors[n][1])
|
|
||||||
neighborinfo[1] = self._getResourceInfo(neighbors[n][0], neighbors[n][1])
|
|
||||||
if "l" in neighborinfo[0] and neighborinfo[1] != "0":
|
|
||||||
resinfo[1] = neighborinfo[1]
|
|
||||||
break
|
|
||||||
|
|
||||||
# Store info. At this point we either have neighboring data, or
|
|
||||||
# we need to select something
|
|
||||||
if resinfo[1] == "0": resinfo[1] = self._selectResources()
|
|
||||||
self._storeResourceInfo(tv, th, resinfo[1])
|
|
||||||
|
|
||||||
# Move forward
|
|
||||||
if "r" in resinfo[0]:
|
|
||||||
th=th+1
|
th=th+1
|
||||||
else:
|
else:
|
||||||
edge_end[1] = 1
|
edge_end[1] = 1
|
||||||
|
|
||||||
|
|
||||||
# Go south
|
# Go south
|
||||||
tv = self._tile_v
|
tv = tile[0]
|
||||||
th = self._tile_h
|
th = tile[1]
|
||||||
|
|
||||||
while edge_end[2] == 0:
|
while edge_end[2] == 0:
|
||||||
resinfo[0] = self._getResourceTouch(tv, th)
|
owntouch = self._getResourceTouch(tv, th)
|
||||||
resinfo[1] = self._getResourceInfo(tv, th)
|
if "b" in owntouch:
|
||||||
|
if self._checkVisited(visited, (tv, th)) == False: visited.append((tv, th))
|
||||||
# Only do the following steps if we have nothing stored
|
if self._checkVisited(visited, (tv-1, th)) == False: visited.append((tv-1, th))
|
||||||
if resinfo[1] == "0":
|
|
||||||
neighbors = self._findNeighbors(tv, th)
|
|
||||||
neighborinfo = ["",""]
|
|
||||||
for n in range(0, len(neighbors)):
|
|
||||||
neighborinfo[0] = self._getResourceTouch(neighbors[n][0], neighbors[n][1])
|
|
||||||
neighborinfo[1] = self._getResourceInfo(neighbors[n][0], neighbors[n][1])
|
|
||||||
if "t" in neighborinfo[0] and neighborinfo[1] != "0":
|
|
||||||
resinfo[1] = neighborinfo[1]
|
|
||||||
break
|
|
||||||
|
|
||||||
# Store info. At this point we either have neighboring data, or
|
|
||||||
# we need to select something
|
|
||||||
if resinfo[1] == "0": resinfo[1] = self._selectResources()
|
|
||||||
self._storeResourceInfo(tv, th, resinfo[1])
|
|
||||||
|
|
||||||
# Move forward
|
|
||||||
if "b" in resinfo[0]:
|
|
||||||
tv=tv-1
|
tv=tv-1
|
||||||
else:
|
else:
|
||||||
edge_end[2] = 1
|
edge_end[2] = 1
|
||||||
|
|
||||||
|
|
||||||
# Go west
|
# Go west
|
||||||
tv = self._tile_v
|
tv = tile[0]
|
||||||
th = self._tile_h
|
th = tile[1]
|
||||||
|
|
||||||
while edge_end[3] == 0:
|
while edge_end[3] == 0:
|
||||||
resinfo[0] = self._getResourceTouch(tv, th)
|
owntouch = self._getResourceTouch(tv, th)
|
||||||
resinfo[1] = self._getResourceInfo(tv, th)
|
if "b" in owntouch:
|
||||||
|
if self._checkVisited(visited, (tv, th)) == False: visited.append((tv, th))
|
||||||
# Only do the following steps if we have nothing stored
|
if self._checkVisited(visited, (tv, th-1)) == False: visited.append((tv, th-1))
|
||||||
if resinfo[1] == "0":
|
|
||||||
neighbors = self._findNeighbors(tv, th)
|
|
||||||
neighborinfo = ["",""]
|
|
||||||
for n in range(0, len(neighbors)):
|
|
||||||
neighborinfo[0] = self._getResourceTouch(neighbors[n][0], neighbors[n][1])
|
|
||||||
neighborinfo[1] = self._getResourceInfo(neighbors[n][0], neighbors[n][1])
|
|
||||||
if "r" in neighborinfo[0] and neighborinfo[1] != "0":
|
|
||||||
resinfo[1] = neighborinfo[1]
|
|
||||||
break
|
|
||||||
|
|
||||||
# Store info. At this point we either have neighboring data, or
|
|
||||||
# we need to select something
|
|
||||||
if resinfo[1] == "0": resinfo[1] = self._selectResources()
|
|
||||||
self._storeResourceInfo(tv, th, resinfo[1])
|
|
||||||
|
|
||||||
# Move forward
|
|
||||||
if "l" in resinfo[0]:
|
|
||||||
th=th-1
|
th=th-1
|
||||||
else:
|
else:
|
||||||
edge_end[3] = 1
|
edge_end[3] = 1
|
||||||
|
|
||||||
|
|
||||||
if edge_end[0] == 1 and edge_end[1] == 1 and edge_end[2] == 1 and edge_end[3] == 1:
|
if edge_end[0] == 1 and edge_end[1] == 1 and edge_end[2] == 1 and edge_end[3] == 1:
|
||||||
end_reached = True # <- Break loop
|
end_reached = True # <- Break loop
|
||||||
|
|
||||||
|
return visited
|
||||||
|
|
||||||
|
|
||||||
|
# Walk through the now existing data files and make sure we always pick the correct
|
||||||
|
# sources for every tile, thus evading previous edge detection errors
|
||||||
|
def _placeTileSources(self, mlat, mlng):
|
||||||
|
|
||||||
|
# Initial scan "cross"
|
||||||
|
visited = self._scanConnections((self._tile_v, self._tile_h))
|
||||||
|
|
||||||
|
# Recursive scan of initial cross
|
||||||
|
for v in range(len(visited)):
|
||||||
|
vst = self._scanConnections((visited[v][0], visited[v][1]))
|
||||||
|
for l in range(len(vst)):
|
||||||
|
if self._checkVisited(visited, (vst[l][0], vst[l][1])) == False: visited.append((vst[l][0], vst[l][1]))
|
||||||
|
|
||||||
|
# We will take the resource of the original tile we have started
|
||||||
|
# our scan from. If there is nothing, we can choose.
|
||||||
|
# This is then used for all visited tiles.
|
||||||
|
tv = self._tile_v
|
||||||
|
th = self._tile_h
|
||||||
|
resstring = self._getResourceInfo(tv, th)
|
||||||
|
if resstring == "0" or resstring == "": resstring = self._selectResources()
|
||||||
|
for v in range(0, len(visited)):
|
||||||
|
self._storeResourceInfo(visited[v][0], visited[v][1], resstring)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Check if a tile was visited
|
||||||
|
def _checkVisited(self, visited, tile):
|
||||||
|
v = False
|
||||||
|
for t in range(0, len(visited)):
|
||||||
|
if visited[t][0] == tile[0] and visited[t][1] == tile[1]:
|
||||||
|
v = True
|
||||||
|
break
|
||||||
|
return v
|
||||||
|
|
||||||
|
|
||||||
|
# Show result of path tracing - DEBUG ONLY
|
||||||
|
def _debugRender(self, visited, mlat, mlng):
|
||||||
|
rmap = Image.new("RGBA", (mlng*10, mlat*10), color="#FFFFFF")
|
||||||
|
draw = ImageDraw.Draw(rmap)
|
||||||
|
for v in range(len(visited)):
|
||||||
|
sx, sy = (visited[v][1]-1)*10, (rmap.height-(visited[v][0]-1)*10)-10
|
||||||
|
dx, dy = ((visited[v][1]-1)*10)+10, (rmap.height-(visited[v][0]-1)*10)+10
|
||||||
|
shape = [ (sx, sy), (dx, dy) ]
|
||||||
|
fill = (0,0,0,255)
|
||||||
|
draw.rectangle(shape, fill=fill)
|
||||||
|
rmap.show()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user