@@ -80,23 +80,27 @@ public override void MapComponentTick()
8080 {
8181 return ;
8282 }
83+
8384 // Check for rendering
8485 // Only render player home maps
8586 if ( ! map . IsPlayerHome )
8687 {
8788 return ;
8889 }
90+
8991 // Check for correct time to render
9092 var longLat = Find . WorldGrid . LongLatOf ( map . Tile ) ;
9193 var currHour = MoreGenDate . HoursPassedInteger ( Find . TickManager . TicksAbs , longLat . x ) ;
9294 if ( currHour <= lastRenderedHour )
9395 {
9496 return ;
9597 }
98+
9699 if ( currHour % PRModSettings . interval != PRModSettings . timeOfDay % PRModSettings . interval )
97100 {
98101 return ;
99102 }
103+
100104 // Update timing variables
101105 lastRenderedHour = currHour ;
102106 lastRenderedCounter ++ ;
@@ -105,7 +109,7 @@ public override void MapComponentTick()
105109 {
106110 return ;
107111 }
108-
112+
109113 // Show message window or print message
110114 ShowCurrentRenderMessage ( ) ;
111115 // Start rendering
@@ -160,6 +164,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
160164 {
161165 Log . Error ( "Progress Renderer is still rendering an image while a new rendering was requested. This can lead to missing or wrong data. (This can also happen in rare situations when you trigger manual rendering the exact same time as an automatic rendering happens. If you did that, just check your export folder if both renderings were done corrently and ignore this error.)" ) ;
162166 }
167+
163168 Rendering = true ;
164169
165170 // Temporary switch to this map for rendering
@@ -177,7 +182,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
177182 {
178183 CameraJumper . TryHideWorld ( ) ;
179184 }
180-
185+
181186 #region Hide overlays
182187
183188 var settings = Find . PlaySettings ;
@@ -190,20 +195,20 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
190195 showPollutionOverlay = settings . showPollutionOverlay ,
191196 showTemperatureOverlay = settings . showTemperatureOverlay
192197 } ;
193-
198+
194199 Find . PlaySettings . showZones = PRModSettings . renderZones ;
195200 Find . PlaySettings . showRoofOverlay = PRModSettings . renderOverlays ;
196201 Find . PlaySettings . showFertilityOverlay = PRModSettings . renderOverlays ;
197202 Find . PlaySettings . showTerrainAffordanceOverlay = PRModSettings . renderOverlays ;
198203 Find . PlaySettings . showPollutionOverlay = PRModSettings . renderOverlays ;
199204 Find . PlaySettings . showTemperatureOverlay = PRModSettings . renderOverlays ;
200-
205+
201206 //TODO: Hide plans
202207 //TODO: Hide blueprints
203208 //TODO: Hide fog of war (stretch)
204209
205210 #endregion
206-
211+
207212 #region Calculate rendered area
208213
209214 float startX = 0 ;
@@ -227,6 +232,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
227232 if ( cell . x > endX ) { endX = cell . x ; }
228233 if ( cell . z > endZ ) { endZ = cell . z ; }
229234 }
235+
230236 endX += 1 ;
231237 endZ += 1 ;
232238 }
@@ -236,17 +242,18 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
236242 if ( ! manuallyTriggered )
237243 {
238244 // Test if target render area changed to reset smoothing
239- if ( ! ( rsTargetStartX . CloseEquals ( startX ) && rsTargetStartZ . CloseEquals ( startZ ) && rsTargetEndX . CloseEquals ( endX ) && rsTargetEndZ . CloseEquals ( endZ ) ) )
245+ if ( rsTargetStartX != startX || rsTargetStartZ != startZ || rsTargetEndX != endX || rsTargetEndZ != endZ )
240246 {
241247 // Check if area was manually reset or uninitialized (-1) to not smooth
242- if ( rsTargetStartX . CloseEquals ( - 1f ) && rsTargetStartZ . CloseEquals ( - 1f ) && rsTargetEndX . CloseEquals ( - 1f ) && rsTargetEndZ . CloseEquals ( - 1f ) )
248+ if ( rsTargetStartX == - 1f && rsTargetStartZ == - 1f && rsTargetEndX == - 1f && rsTargetEndZ == - 1f )
243249 {
244250 rsCurrentPosition = 1f ;
245251 }
246252 else
247253 {
248254 rsCurrentPosition = 1f / ( PRModSettings . smoothRenderAreaSteps + 1 ) ;
249255 }
256+
250257 rsOldStartX = rsTargetStartX ;
251258 rsOldStartZ = rsTargetStartZ ;
252259 rsOldEndX = rsTargetEndX ;
@@ -256,6 +263,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
256263 rsTargetEndX = endX ;
257264 rsTargetEndZ = endZ ;
258265 }
266+
259267 // Apply smoothing to render area
260268 if ( rsCurrentPosition < 1f )
261269 {
@@ -269,23 +277,23 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
269277
270278 var distX = endX - startX ;
271279 var distZ = endZ - startZ ;
272-
280+
273281 #endregion
274282
275283 #region Calculate texture size
276-
284+
277285 // Calculate basic values that are used for rendering
278286 int newImageWidth ;
279287 int newImageHeight ;
280288 if ( PRModSettings . scaleOutputImage )
281289 {
282- newImageWidth = ( int ) ( PRModSettings . outputImageFixedHeight / distZ * distX ) ;
290+ newImageWidth = ( int ) ( PRModSettings . outputImageFixedHeight / distZ * distX ) ;
283291 newImageHeight = PRModSettings . outputImageFixedHeight ;
284292 }
285293 else
286294 {
287- newImageWidth = ( int ) ( distX * PRModSettings . pixelPerCell ) ;
288- newImageHeight = ( int ) ( distZ * PRModSettings . pixelPerCell ) ;
295+ newImageWidth = ( int ) ( distX * PRModSettings . pixelPerCell ) ;
296+ newImageHeight = ( int ) ( distZ * PRModSettings . pixelPerCell ) ;
289297 }
290298
291299 var mustUpdateTexture = false ;
@@ -299,7 +307,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
299307 #endregion
300308
301309 #region Initialize camera and textures
302-
310+
303311 var cameraPosX = distX / 2 ;
304312 var cameraPosZ = distZ / 2 ;
305313 var orthographicSize = cameraPosZ ;
@@ -315,18 +323,18 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
315323 var camera = Find . Camera ;
316324 var camDriver = camera . GetComponent < CameraDriver > ( ) ;
317325 camDriver . enabled = false ;
318-
326+
319327 // Store current camera data
320328 var rememberedRootPos = map . rememberedCameraPos . rootPos ;
321329 var rememberedRootSize = map . rememberedCameraPos . rootSize ;
322330 var rememberedFarClipPlane = camera . farClipPlane ;
323331
324332 // Overwrite current view rect in the camera driver
325333 var camViewRect = camDriver . CurrentViewRect ;
326- var camRectMinX = Math . Min ( ( int ) startX , camViewRect . minX ) ;
327- var camRectMinZ = Math . Min ( ( int ) startZ , camViewRect . minZ ) ;
328- var camRectMaxX = Math . Max ( ( int ) Math . Ceiling ( endX ) , camViewRect . maxX ) ;
329- var camRectMaxZ = Math . Max ( ( int ) Math . Ceiling ( endZ ) , camViewRect . maxZ ) ;
334+ var camRectMinX = Math . Min ( ( int ) startX , camViewRect . minX ) ;
335+ var camRectMinZ = Math . Min ( ( int ) startZ , camViewRect . minZ ) ;
336+ var camRectMaxX = Math . Max ( ( int ) Math . Ceiling ( endX ) , camViewRect . maxX ) ;
337+ var camRectMaxZ = Math . Max ( ( int ) Math . Ceiling ( endZ ) , camViewRect . maxZ ) ;
330338 var camDriverTraverse = Traverse . Create ( camDriver ) ;
331339 camDriverTraverse . Field ( "lastViewRect" ) . SetValue ( CellRect . FromLimits ( camRectMinX , camRectMinZ , camRectMaxX , camRectMaxZ ) ) ;
332340 camDriverTraverse . Field ( "lastViewRectGetFrame" ) . SetValue ( Time . frameCount ) ;
@@ -338,10 +346,9 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
338346 // Set camera values needed for rendering
339347 camera . orthographicSize = orthographicSize ;
340348 camera . farClipPlane = cameraBasePos . y + 6.5f ;
341- camera . aspect = ( float ) imageWidth / imageHeight ;
342349
343350 #region Render
344-
351+
345352 // Set render textures
346353 camera . targetTexture = renderTexture ;
347354 RenderTexture . active = renderTexture ;
@@ -371,20 +378,19 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
371378 //tmpCam.targetTexture = null;
372379 camera . targetTexture = null ;
373380 camera . farClipPlane = rememberedFarClipPlane ;
374- camera . ResetAspect ( ) ;
375381 camDriver . SetRootPosAndSize ( rememberedRootPos , rememberedRootSize ) ;
376382 camDriver . enabled = true ;
377383
378384 RenderTexture . ReleaseTemporary ( renderTexture ) ;
379-
385+
380386 // Enable overlays
381387 Find . PlaySettings . showZones = oldVisibilities . showZones ;
382388 Find . PlaySettings . showRoofOverlay = oldVisibilities . showRoofOverlay ;
383389 Find . PlaySettings . showFertilityOverlay = oldVisibilities . showFertilityOverlay ;
384390 Find . PlaySettings . showTerrainAffordanceOverlay = oldVisibilities . showTerrainAffordanceOverlay ;
385391 Find . PlaySettings . showPollutionOverlay = oldVisibilities . showPollutionOverlay ;
386392 Find . PlaySettings . showTemperatureOverlay = oldVisibilities . showTemperatureOverlay ;
387-
393+
388394 // Switch back to world view if needed
389395 if ( rememberedWorldRendered )
390396 {
@@ -396,7 +402,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
396402 {
397403 Current . Game . CurrentMap = rememberedMap ;
398404 }
399-
405+
400406 #endregion
401407
402408 // Signal finished rendering
@@ -407,6 +413,7 @@ private IEnumerator DoRendering(bool forceRenderFullMap = false)
407413 messageBox . Close ( ) ;
408414 messageBox = null ;
409415 }
416+
410417 yield return null ;
411418
412419 // Start encoding
@@ -421,6 +428,7 @@ private void DoEncoding()
421428 {
422429 Log . Error ( "Progress Renderer is still encoding an image while the encoder was called again. This can lead to missing or wrong data." ) ;
423430 }
431+
424432 switch ( PRModSettings . encoding )
425433 {
426434 case EncodingType . UnityJPG :
@@ -490,41 +498,46 @@ private string CreateFilePath(FileNamePattern fileNamePattern, bool addTmpSubdir
490498 {
491499 imageName = CreateImageNameDateTime ( ) ;
492500 }
501+
493502 // Create path and subdirectory
494503 var path = PRModSettings . exportPath ;
495504 if ( PRModSettings . createSubdirs )
496505 {
497506 path = Path . Combine ( path , Find . World . info . seedString ) ;
498507 }
508+
499509 Directory . CreateDirectory ( path ) ;
500510 // Add subdir for manually triggered renderings
501511 if ( manuallyTriggered )
502512 {
503513 path = Path . Combine ( path , "manually" ) ;
504514 Directory . CreateDirectory ( path ) ;
505515 }
516+
506517 // Create additional subdir for numbered symlinks
507518 if ( addTmpSubdir )
508519 {
509520 path = Path . Combine ( path , "tmp" ) ;
510521 Directory . CreateDirectory ( path ) ;
511522 }
523+
512524 // Get correct file and location
513525 var fileExt = EnumUtils . GetFileExtension ( PRModSettings . encoding ) ;
514526 var filePath = Path . Combine ( path , imageName + "." + fileExt ) ;
515527 if ( ! File . Exists ( filePath ) )
516528 {
517529 return filePath ;
518530 }
531+
519532 var i = 1 ;
520533 filePath = Path . Combine ( path , imageName ) ;
521534 string newPath ;
522535 do
523536 {
524537 newPath = filePath + "-alt" + i + "." + fileExt ;
525538 i ++ ;
526- }
527- while ( File . Exists ( newPath ) ) ;
539+ } while ( File . Exists ( newPath ) ) ;
540+
528541 return newPath ;
529542 }
530543
@@ -544,4 +557,4 @@ private string CreateImageNameNumbered()
544557 return "rimworld-" + Find . World . info . seedString + "-" + map . Tile + "-" + lastRenderedCounter . ToString ( "000000" ) ;
545558 }
546559 }
547- }
560+ }
0 commit comments