]> marstr Code Repo - marstr/orthographic.git/commitdiff
Further corrections in resource allocation code
authorMarcus Str. <marcus@marstr.online>
Tue, 31 Dec 2024 15:22:52 +0000 (16:22 +0100)
committerMarcus Str. <marcus@marstr.online>
Tue, 31 Dec 2024 15:22:52 +0000 (16:22 +0100)
layergen.py
orthographic.py
tileprep.py

index ab2517a512be34fb915156c9bc8736135c127f34..ee4faba71fc0b67735178e990b89adaebf336bf2 100644 (file)
@@ -293,6 +293,16 @@ class mstr_layergen:
                 srcstr = srcstr + str(src[s])\r
                 if s < len(src)-1:\r
                     srcstr = srcstr + ","\r
+            \r
+            # Failsafe\r
+            if srcstr == "0":\r
+                srcstr = ""\r
+                numbers = list(range(1, 16))\r
+                src = random.sample(numbers, 5)\r
+                for s in range(len(src)):\r
+                    srcstr = srcstr + str(src[s])\r
+                    if s < len(src)-1:\r
+                        srcstr = srcstr + ","\r
 \r
             # Patch and border sources. There can only be one for each.\r
             brd_src = None\r
index daf59e1d9e84e8fc6ae8d67097a5b742d04b0dbc..82b0b871dbba7ee3b0dfae48bb5d7bad9f7fe9fe 100644 (file)
@@ -37,6 +37,7 @@ class mstr_orthographic:
         self._vstep = self._findVerticalStepping()\r
         self._latlngfld = self.latlng_folder([lat,lng])\r
         self._prep = prep\r
+        self._tiles_visited = []\r
         mstr_msg("orthographic", "Initiated with LAT: " + str(lat) + ", LNG: " + str(lng))\r
 \r
 \r
@@ -440,6 +441,11 @@ class mstr_orthographic:
 \r
         # We now need to "raytrace" the resources for correct placement\r
         mstr_msg("orthographic", "Performing resource plamement tracing for tile")\r
+\r
+        # Let's set up an array which keeps track of all used tiles, per resource\r
+        \r
+        for l in mstr_ortho_layers:\r
+            self._tiles_visited.append([(l[0], l[1])]) # Store tag and value as tuple for each possible resource\r
         \r
         for lat_grid in range(1, maxlatlng[0]+1):\r
             for lng_grid in range(1, maxlatlng[1]+1):\r
@@ -451,10 +457,36 @@ class mstr_orthographic:
 \r
                 for l in range(0, len(fnlines)):\r
                     lyr = fnlines[l].split(" ")\r
+                    \r
+                    vstidx = -1\r
+                    for vst in range(0, len(self._tiles_visited)):\r
+                        if self._tiles_visited[vst][0][0] == lyr[0] and self._tiles_visited[vst][0][1] == lyr[1]:\r
+                            vstidx = vst\r
+                            break\r
+                    \r
                     tp = mstr_tileprep(self._lat, self._long, lat_grid, lng_grid, lyr[0], lyr[1], None, False)\r
                     tp._setLatLngFold(self._latlngfld)\r
+                    tp._setAlreadyVisitedTiles(self._tiles_visited[vstidx])\r
                     tp._placeTileSources(mlat, mlng)\r
+                    self.adjust_tiles_visited(lyr[0], lyr[1], tp._all_visited)\r
+\r
 \r
+    # Adjust the tiles visited for one resource\r
+    def adjust_tiles_visited(self, tag, value, tiles):\r
+        lyridx = -1\r
+        for v in range(0, len(self._tiles_visited)):\r
+            if self._tiles_visited[v][0][0] == tag and self._tiles_visited[v][0][1] == value:\r
+                lyridx = v\r
+                break\r
+        \r
+        for t in range(1, len(tiles)):\r
+            fnd = False\r
+            for v in range(1, len(self._tiles_visited[lyridx])):\r
+                if self._tiles_visited[lyridx][v][0] == tiles[t][0] and self._tiles_visited[lyridx][v][1] == tiles[t][1]:\r
+                    fnd = True\r
+                    break\r
+            if fnd == False:\r
+                self._tiles_visited[lyridx].append((tiles[t][0], tiles[t][1]))\r
 \r
     # Generates X-Plane 11/12 scenery with\r
     # - the finished orthos\r
index 46a003eca5d912525e1c62df9a406bb246027ce3..41f032f86848940c650a830e3eff029263118d97 100644 (file)
@@ -39,6 +39,8 @@ class mstr_tileprep:
         self._mask      = mask
         latlngfld = xplane_latlng_folder([lat, lng])
         self._tileinfo  = mstr_tileinfo(lat, lng, v, h, latlngfld)
+        self._already_visited = [] # To be filled later
+        self._all_visited = []
         
         # Special case for the final step of an ortho
         self._is_completion = is_completion
@@ -303,6 +305,11 @@ class mstr_tileprep:
         return visited
 
 
+    # Let the orthographic class pass all visited tiles for this resource
+    def _setAlreadyVisitedTiles(self, tiles):
+        self._already_visited = tiles
+
+
     # 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):
@@ -315,14 +322,15 @@ class mstr_tileprep:
             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]))
+
+        self._all_visited = visited
         
         # 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()
+        resstring = self._selectResources()
         for v in range(0, len(visited)):
             self._storeResourceInfo(visited[v][0], visited[v][1], resstring)