Ignore:
Timestamp:
Mar 28, 2023, 8:08:01 PM (21 months ago)
Author:
alloc
Message:

Fixed: MapRenderer always enabled

Location:
binary-improvements2/MapRendering
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/MapRendering/ModInfo.xml

    r422 r423  
    55        <Description value="Render the game map to image map tiles as it is uncovered" />
    66        <Author value="The Fun Pimps LLC" />
    7         <Version value="21.0.246.0" />
     7        <Version value="21.0.250.0" />
    88        <Website value="" />
    99</xml>
  • binary-improvements2/MapRendering/src/Commands/RenderMap.cs

    r405 r423  
    1414
    1515                public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
     16                        if (!MapRenderer.HasInstance) {
     17                                SdtdConsole.Instance.Output ("Renderer not enabled");
     18                                return;
     19                        }
     20                       
    1621                        MapRenderer.Instance.RenderFullMap ();
    1722
  • binary-improvements2/MapRendering/src/MapRenderer.cs

    r402 r423  
    4343                }
    4444
     45                public static bool HasInstance => instance != null;
     46
    4547                public static MapRenderer Instance => instance ??= new MapRenderer ();
    4648
     
    5052
    5153                public static void Shutdown () {
    52                         if (Instance == null) {
     54                        if (instance == null) {
    5355                                return;
    5456                        }
    5557
    56                         Instance.shutdown = true;
     58                        instance.shutdown = true;
    5759                       
    58                         if (Instance.renderCoroutineRef != null) {
    59                                 ThreadManager.StopCoroutine (Instance.renderCoroutineRef);
    60                                 Instance.renderCoroutineRef = null;
    61                         }
     60                        if (instance.renderCoroutineRef != null) {
     61                                ThreadManager.StopCoroutine (instance.renderCoroutineRef);
     62                                instance.renderCoroutineRef = null;
     63                        }
     64
     65                        instance = null;
    6266                }
    6367
    6468                public static void RenderSingleChunk (Chunk _chunk) {
    65                         if (renderingEnabled && Instance != null) {
    66                                 // TODO: Replace with regular thread and a blocking queue / set
    67                                 ThreadPool.UnsafeQueueUserWorkItem (_o => {
    68                                         try {
    69                                                 if (Instance.renderingFullMap) {
     69                        if (!renderingEnabled || instance == null) {
     70                                return;
     71                        }
     72
     73                        // TODO: Replace with regular thread and a blocking queue / set
     74                        ThreadPool.UnsafeQueueUserWorkItem (_o => {
     75                                try {
     76                                        if (instance.renderingFullMap) {
     77                                                return;
     78                                        }
     79
     80                                        lock (lockObject) {
     81                                                Chunk c = (Chunk) _o;
     82                                                Vector3i cPos = c.GetWorldPos ();
     83                                                Vector2i cPos2 = new Vector2i (cPos.x / Constants.MapChunkSize,
     84                                                        cPos.z / Constants.MapChunkSize);
     85
     86                                                ushort[] mapColors = c.GetMapColors ();
     87                                                if (mapColors == null) {
    7088                                                        return;
    7189                                                }
    7290
    73                                                 lock (lockObject) {
    74                                                         Chunk c = (Chunk) _o;
    75                                                         Vector3i cPos = c.GetWorldPos ();
    76                                                         Vector2i cPos2 = new Vector2i (cPos.x / Constants.MapChunkSize,
    77                                                                 cPos.z / Constants.MapChunkSize);
    78 
    79                                                         ushort[] mapColors = c.GetMapColors ();
    80                                                         if (mapColors == null) {
    81                                                                 return;
    82                                                         }
    83 
    84                                                         Color32[] realColors =
    85                                                                 new Color32[Constants.MapChunkSize * Constants.MapChunkSize];
    86                                                         for (int iColors = 0; iColors < mapColors.Length; iColors++) {
    87                                                                 realColors [iColors] = shortColorToColor32 (mapColors [iColors]);
    88                                                         }
    89 
    90                                                         Instance.dirtyChunks [cPos2] = realColors;
    91 
    92                                                         //Log.Out ("Add Dirty: " + cPos2);
     91                                                Color32[] realColors =
     92                                                        new Color32[Constants.MapChunkSize * Constants.MapChunkSize];
     93                                                for (int iColors = 0; iColors < mapColors.Length; iColors++) {
     94                                                        realColors [iColors] = shortColorToColor32 (mapColors [iColors]);
    9395                                                }
    94                                         } catch (Exception e) {
    95                                                 Log.Out ($"Exception in MapRendering.RenderSingleChunk(): {e}");
    96                                         }
    97                                 }, _chunk);
    98                         }
     96
     97                                                instance.dirtyChunks [cPos2] = realColors;
     98
     99                                                //Log.Out ("Add Dirty: " + cPos2);
     100                                        }
     101                                } catch (Exception e) {
     102                                        Log.Out ($"Exception in MapRendering.RenderSingleChunk(): {e}");
     103                                }
     104                        }, _chunk);
    99105                }
    100106
  • binary-improvements2/MapRendering/src/ModApi.cs

    r406 r423  
    77        public class ModApi : IModApi {
    88                public void InitMod (Mod _modInstance) {
    9                         if (ConnectionManager.Instance.IsServer) {
    10                                 ModEvents.GameShutdown.RegisterHandler (GameShutdown);
    11                                 ModEvents.CalcChunkColorsDone.RegisterHandler (CalcChunkColorsDone);
    12                         }
    13                        
     9                        ModEvents.GameStartDone.RegisterHandler (GameStartDone);
     10
    1411                        Web.ServerInitialized += _web => {
     12                                if (!GamePrefs.GetBool (EnumUtils.Parse<EnumGamePrefs> (nameof (EnumGamePrefs.EnableMapRendering)))) {
     13                                        return;
     14                                }
     15
    1516                                _web.RegisterPathHandler ("/map/", new StaticHandler (
    1617                                        $"{GameIO.GetSaveGameDir ()}/map",
     
    2021                                );
    2122                        };
     23                }
     24
     25                private void GameStartDone () {
     26                        if (!ConnectionManager.Instance.IsServer) {
     27                                return;
     28                        }
     29
     30                        if (!GamePrefs.GetBool (EnumUtils.Parse<EnumGamePrefs> (nameof (EnumGamePrefs.EnableMapRendering)))) {
     31                                return;
     32                        }
     33
     34                        ModEvents.GameShutdown.RegisterHandler (GameShutdown);
     35                        ModEvents.CalcChunkColorsDone.RegisterHandler (CalcChunkColorsDone);
    2236                }
    2337
Note: See TracChangeset for help on using the changeset viewer.