Ticket #3310: ai_pathfinder_serialize.patch

File ai_pathfinder_serialize.patch, 2.6 KB (added by Itms, 9 years ago)
  • source/simulation2/components/CCmpAIManager.cpp

     
    496496        ScriptInterface::ToJSVal(cx, &m_TerritoryMapVal, territoryMap);
    497497
    498498        m_PassabilityMap = passabilityMap;
     499        m_PassClasses = passClassMasks;
    499500        m_LongPathfinder.Reload(passClassMasks, &m_PassabilityMap);
    500501
    501502        if (m_HasSharedComponent)
     
    655656                serializer.ScriptVal("data", &m_Players[i]->m_Obj);
    656657            }
    657658        }
     659
     660        // AI pathfinder
     661        SerializeMap<SerializeString, SerializeU16_Unbounded>()(serializer, "pass classes", m_PassClasses);
     662        serializer.NumberU16_Unbounded("pathfinder grid w", m_PassabilityMap.m_W);
     663        serializer.NumberU16_Unbounded("pathfinder grid h", m_PassabilityMap.m_H);
     664        serializer.RawBytes("pathfinder grid data", (const u8*)m_PassabilityMap.m_Data,
     665            m_PassabilityMap.m_W*m_PassabilityMap.m_H*sizeof(NavcellData));
    658666    }
    659667
    660668    void Deserialize(std::istream& stream, u32 numAis)
     
    735743                deserializer.ScriptVal("data", &m_Players.back()->m_Obj);
    736744            }
    737745        }
     746
     747        // AI pathfinder
     748        SerializeMap<SerializeString, SerializeU16_Unbounded>()(deserializer, "pass classes", m_PassClasses);
     749        u16 mapW, mapH;
     750        deserializer.NumberU16_Unbounded("pathfinder grid w", mapW);
     751        deserializer.NumberU16_Unbounded("pathfinder grid h", mapH);
     752        m_PassabilityMap = Grid<NavcellData>(mapW, mapH);
     753        deserializer.RawBytes("pathfinder grid data", (u8*)m_PassabilityMap.m_Data, mapW*mapH*sizeof(NavcellData));
     754        m_LongPathfinder.Reload(m_PassClasses, &m_PassabilityMap);
    738755    }
    739756
    740757    int getPlayerSize()
     
    849866    Grid<u8> m_TerritoryMap;
    850867    JS::PersistentRootedValue m_TerritoryMapVal;
    851868
     869    std::map<std::string, pass_class_t> m_PassClasses;
    852870    LongPathfinder m_LongPathfinder;
    853871
    854872    bool m_CommandsComputed;
  • source/simulation2/serialization/SerializeTemplates.h

     
    203203    }
    204204};
    205205
     206struct SerializeString
     207{
     208    void operator()(ISerializer& serialize, const char* name, const std::string& value)
     209    {
     210        serialize.StringASCII(name, value, 0, UINT32_MAX);
     211    }
     212
     213    void operator()(IDeserializer& deserialize, const char* name, std::string& value)
     214    {
     215        deserialize.StringASCII(name, value, 0, UINT32_MAX);
     216    }
     217};
     218
    206219struct SerializeWaypoint
    207220{
    208221    void operator()(ISerializer& serialize, const char* UNUSED(name), const Waypoint& value)