Ticket #3060: aimanager2.diff

File aimanager2.diff, 2.5 KB (added by leper, 9 years ago)

Somewhat nicer version.

  • source/simulation2/components/CCmpAIManager.cpp

     
    1 /* Copyright (C) 2014 Wildfire Games.
     1/* Copyright (C) 2015 Wildfire Games.
    22 * This file is part of 0 A.D.
    33 *
    44 * 0 A.D. is free software: you can redistribute it and/or modify
     
    558558    {
    559559        JSContext* cx = m_ScriptInterface->GetContext();
    560560        JSAutoRequest rq(cx);
    561        
     561
    562562        std::stringstream rngStream;
    563563        rngStream << m_RNG;
    564564        serializer.StringASCII("rng", rngStream.str(), 0, 32);
    565565
    566566        serializer.NumberU32_Unbounded("turn", m_TurnNum);
    567567
    568         serializer.NumberU32_Unbounded("num ais", (u32)m_Players.size());
    569 
    570568        serializer.Bool("useSharedScript", m_HasSharedComponent);
    571569        if (m_HasSharedComponent)
    572570        {
     
    606604        }
    607605    }
    608606
    609     void Deserialize(std::istream& stream)
     607    void Deserialize(std::istream& stream, uint32_t numAis)
    610608    {
    611609        JSContext* cx = m_ScriptInterface->GetContext();
    612610        JSAutoRequest rq(cx);
    613        
     611
    614612        ENSURE(m_CommandsComputed); // deserializing while we're still actively computing would be bad
    615613
    616614        CStdDeserializer deserializer(*m_ScriptInterface, stream);
     
    626624
    627625        deserializer.NumberU32_Unbounded("turn", m_TurnNum);
    628626
    629         uint32_t numAis;
    630         deserializer.NumberU32_Unbounded("num ais", numAis);
    631 
    632627        deserializer.Bool("useSharedScript", m_HasSharedComponent);
    633         TryLoadSharedComponent(false);
    634628        if (m_HasSharedComponent)
    635629        {
     630            TryLoadSharedComponent(false);
     631
    636632            JS::RootedValue sharedData(cx);
    637633            JS::RootedValue tmpSharedAIObj(cx, m_SharedAIObj.get()); // TODO: Check if this temporary root can be removed after SpiderMonkey 31
    638634            deserializer.ScriptVal("sharedData", &sharedData);
     
    841837
    842838    virtual void Serialize(ISerializer& serialize)
    843839    {
     840        serialize.NumberU32_Unbounded("num ais", m_Worker.getPlayerSize());
     841
    844842        // Because the AI worker uses its own ScriptInterface, we can't use the
    845843        // ISerializer (which was initialised with the simulation ScriptInterface)
    846844        // directly. So we'll just grab the ISerializer's stream and write to it
     
    853851    {
    854852        Init(paramNode);
    855853
    856         ForceLoadEntityTemplates();
     854        uint32_t numAis;
     855        deserialize.NumberU32_Unbounded("num ais", numAis);
     856        if (numAis > 0)
     857            ForceLoadEntityTemplates();
    857858
    858         m_Worker.Deserialize(deserialize.GetStream());
     859        m_Worker.Deserialize(deserialize.GetStream(), numAis);
    859860       
    860861        m_JustDeserialized = true;
    861862    }