Ticket #3060: aimanager.diff

File aimanager.diff, 2.5 KB (added by mimo, 9 years ago)
  • source/simulation2/components/CCmpAIManager.cpp

     
    558558    {
    559559        JSContext* cx = m_ScriptInterface->GetContext();
    560560        JSAutoRequest rq(cx);
    561        
     561
     562        serializer.NumberU32_Unbounded("num ais", (u32)m_Players.size());
     563
    562564        std::stringstream rngStream;
    563565        rngStream << m_RNG;
    564566        serializer.StringASCII("rng", rngStream.str(), 0, 32);
     
    565567
    566568        serializer.NumberU32_Unbounded("turn", m_TurnNum);
    567569
    568         serializer.NumberU32_Unbounded("num ais", (u32)m_Players.size());
    569 
    570570        serializer.Bool("useSharedScript", m_HasSharedComponent);
    571571        if (m_HasSharedComponent)
    572572        {
     
    606606        }
    607607    }
    608608
    609     void Deserialize(std::istream& stream)
     609    uint32_t PreDeserialize(std::istream& stream)
    610610    {
    611611        JSContext* cx = m_ScriptInterface->GetContext();
    612612        JSAutoRequest rq(cx);
    613        
     613
    614614        ENSURE(m_CommandsComputed); // deserializing while we're still actively computing would be bad
    615615
    616616        CStdDeserializer deserializer(*m_ScriptInterface, stream);
    617617
     618        uint32_t numAis;
     619        deserializer.NumberU32_Unbounded("num ais", numAis);
     620        return numAis;
     621    }
     622 
     623    void Deserialize(std::istream& stream, uint32_t numAis)
     624    {
     625        JSContext* cx = m_ScriptInterface->GetContext();
     626        JSAutoRequest rq(cx);
     627
     628        ENSURE(m_CommandsComputed); // deserializing while we're still actively computing would be bad
     629
     630        CStdDeserializer deserializer(*m_ScriptInterface, stream);
     631
    618632        m_PlayerMetadata.clear();
    619633        m_Players.clear();
    620634
     
    626640
    627641        deserializer.NumberU32_Unbounded("turn", m_TurnNum);
    628642
    629         uint32_t numAis;
    630         deserializer.NumberU32_Unbounded("num ais", numAis);
    631 
    632643        deserializer.Bool("useSharedScript", m_HasSharedComponent);
    633         TryLoadSharedComponent(false);
    634644        if (m_HasSharedComponent)
    635645        {
     646            TryLoadSharedComponent(false);
     647
    636648            JS::RootedValue sharedData(cx);
    637649            JS::RootedValue tmpSharedAIObj(cx, m_SharedAIObj.get()); // TODO: Check if this temporary root can be removed after SpiderMonkey 31
    638650            deserializer.ScriptVal("sharedData", &sharedData);
     
    853865    {
    854866        Init(paramNode);
    855867
    856         ForceLoadEntityTemplates();
     868        uint32_t numAis = m_Worker.PreDeserialize(deserialize.GetStream());
     869        if (numAis > 0)
     870            ForceLoadEntityTemplates();
    857871
    858         m_Worker.Deserialize(deserialize.GetStream());
     872        m_Worker.Deserialize(deserialize.GetStream(), numAis);
    859873       
    860874        m_JustDeserialized = true;
    861875    }