Ignore:
Timestamp:
Dec 14, 2016, 7:47:05 PM (8 years ago)
Author:
alloc
Message:

Fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/MapRendering/MapRendering/MapRendering.cs

    r269 r299  
    2525                private MapRenderBlockBuffer[] zoomLevelBuffers;
    2626                private Dictionary<Vector2i, Color32[]> dirtyChunks = new Dictionary<Vector2i, Color32[]> ();
    27                 private System.Timers.Timer chunkSaveTimer = new System.Timers.Timer (500);
    2827                private bool renderingFullMap = false;
    2928                public static bool renderingEnabled = true;
    3029                private MicroStopwatch msw = new MicroStopwatch ();
    3130                private AllocsFixes.FileCache.MapTileCache cache = new AllocsFixes.FileCache.MapTileCache (Constants.MAP_BLOCK_SIZE);
     31                private float renderTimeout = float.MaxValue;
     32                private Coroutine renderCoroutineRef;
    3233
    3334                public static AllocsFixes.FileCache.MapTileCache GetTileCache() {
     
    5152                        }
    5253
    53                         chunkSaveTimer.AutoReset = false;
    54                         chunkSaveTimer.Elapsed += new System.Timers.ElapsedEventHandler (TimedRendering);
     54                        renderCoroutineRef = ThreadManager.StartCoroutine (renderCoroutine ());
     55                }
     56
     57                public static void Shutdown ()
     58                {
     59                        if (Instance.renderCoroutineRef != null) {
     60                                ThreadManager.StopCoroutine (Instance.renderCoroutineRef);
     61                                Instance.renderCoroutineRef = null;
     62                        }
    5563                }
    5664
     
    7583                                                                        Instance.dirtyChunks [cPos2] = realColors;
    7684                                                                        //Log.Out ("Add Dirty: " + cPos2);
    77                                                                         Instance.chunkSaveTimer.Stop ();
    78                                                                         Instance.chunkSaveTimer.Start ();
    7985                                                                }
    8086                                                        }
     
    177183                }
    178184
    179                 private void TimedRendering (object source, System.Timers.ElapsedEventArgs e)
    180                 {
    181                         lock (lockObject) {
    182                                 RenderDirtyChunks ();
    183                                 if (dirtyChunks.Count > 0)
    184                                         Instance.chunkSaveTimer.Start ();
     185                private System.Collections.IEnumerator renderCoroutine () {
     186                        while (true) {
     187                                lock (lockObject) {
     188                                        if (dirtyChunks.Count > 0 && renderTimeout == float.MaxValue) {
     189                                                renderTimeout = Time.time + 0.5f;
     190                                        }
     191                                        if (Time.time > renderTimeout || dirtyChunks.Count > 200) {
     192                                                RenderDirtyChunks ();
     193                                        }
     194                                }
     195                                yield return new WaitForSeconds (0.2f);
    185196                        }
    186197                }
Note: See TracChangeset for help on using the changeset viewer.