Ticket #3164: nested_maps.diff

File nested_maps.diff, 1.6 KB (added by sanderd17, 9 years ago)

Workaround for the Auramanager, though it should probably be fixed in the C++ (de)serialisation part

  • binaries/data/mods/public/simulation/components/AuraManager.js

     
    1111    this.templateModifications = new Map();
    1212};
    1313
     14AuraManager.prototype.Serialize = function()
     15{
     16    var serializeMap = function(map)
     17    {
     18        var arr = [...map];
     19        for (let kv of arr)
     20            if (kv[1].__proto__.constructor == Map)
     21                kv[1] = serializeMap(kv[1]);
     22        arr.isMap = true;
     23        return arr;
     24    }
     25    return {
     26        "modificationsCache": serializeMap(this.modificationsCache),
     27        "modifications": serializeMap(this.modifications),
     28        "templateModificationsCache": serializeMap(this.templateModificationsCache),
     29        "templateModifications": serializeMap(this.templateModifications)
     30    };
     31};
     32
     33AuraManager.prototype.Deserialize = function(data)
     34{
     35    var deserializeMap = function(arr)
     36    {
     37        var map = new Map(arr);
     38        for (let kv of map)
     39            if (map.get(kv[0]) && map.get(kv[0]).isMap)
     40                map.set(kv[0], deserializeMap(map.get(kv[0])));
     41        return map;
     42    }
     43    this.modificationsCache = deserializeMap(data.modificationsCache);
     44    this.modifications = deserializeMap(data.modifications);
     45    this.templateModificationsCache = deserializeMap(data.templateModificationsCache);
     46    this.templateModifications = deserializeMap(data.templateModifications);
     47};
     48
    1449AuraManager.prototype.ensureExists = function(name, value, id, key, defaultData)
    1550{
    1651    var cacheName = name + "Cache";