Ticket #2913: Hack_CCmpVisibilityScripted_IsActive_0.1.diff

File Hack_CCmpVisibilityScripted_IsActive_0.1.diff, 5.7 KB (added by Yves, 9 years ago)

A quick and ugly hack to reduce the number of IsActive() calls to JS along with some changes used for profiling

  • source/simulation2/Simulation2.cpp

     
    4040#include "ps/Filesystem.h"
    4141#include "ps/Loader.h"
    4242#include "ps/Profile.h"
     43#include "ps/ProfileViewer.h"
    4344#include "ps/Pyrogenesis.h"
    4445#include "ps/XML/Xeromyces.h"
    4546
     
    458459
    459460    if (m_EnableOOSLog)
    460461        DumpState();
     462       
     463    if (m_TurnNumber % 1 == 0)
     464        g_ProfileViewer.SaveToFile();
    461465
    462466    // Start computing AI for the next turn
    463467    CmpPtr<ICmpAIManager> cmpAIManager(m_SimContext, SYSTEM_ENTITY);
  • source/simulation2/components/CCmpAIManager.cpp

     
    890890        // AI players can cheat and see through FoW/SoD, since that greatly simplifies
    891891        // their implementation.
    892892        // (TODO: maybe cleverer AIs should be able to optionally retain FoW/SoD)
    893         CmpPtr<ICmpRangeManager> cmpRangeManager(GetSystemEntity());
    894         if (cmpRangeManager)
    895             cmpRangeManager->SetLosRevealAll(player, true);
     893        //CmpPtr<ICmpRangeManager> cmpRangeManager(GetSystemEntity());
     894        //if (cmpRangeManager)
     895        //  cmpRangeManager->SetLosRevealAll(player, true);
    896896    }
    897897   
    898898    virtual void SetRNGSeed(uint32_t seed)
  • source/simulation2/components/CCmpRangeManager.cpp

     
    15441544    {
    15451545        PROFILE("UpdateVisibilityData");
    15461546       
    1547         for (i32 n = 0; n < m_LosTilesPerSide*m_LosTilesPerSide; ++n)
    15481547        {
    1549             if (m_DirtyVisibility[n] == 1 || m_GlobalVisibilityUpdate)
     1548            float dirty = 0;
     1549            float valid = 0;
     1550            PROFILE("UpdateVisibilityData1");
     1551            for (i32 n = 0; n < m_LosTilesPerSide*m_LosTilesPerSide; ++n)
    15501552            {
    1551                 for (std::set<entity_id_t>::iterator it = m_LosTiles[n].begin();
    1552                     it != m_LosTiles[n].end();
    1553                     ++it)
     1553                if (m_DirtyVisibility[n] == 1)
     1554                    dirty++;
     1555                else
     1556                    valid++;
     1557                if (m_DirtyVisibility[n] == 1 || m_GlobalVisibilityUpdate)
    15541558                {
    1555                     UpdateVisibility(*it);
     1559                    for (std::set<entity_id_t>::iterator it = m_LosTiles[n].begin();
     1560                        it != m_LosTiles[n].end();
     1561                        ++it)
     1562                    {
     1563                        UpdateVisibility(*it);
     1564                    }
     1565                    m_DirtyVisibility[n] = 0;
    15561566                }
    1557                 m_DirtyVisibility[n] = 0;
    15581567            }
     1568            std::cout << "dirty: " << 100/(valid+dirty)*dirty << "%" << std::endl;
     1569            //std::cout << "dirty: " << dirty << " \t valid: " << valid << std::endl;
    15591570        }
     1571       
    15601572
    1561         for (std::vector<entity_id_t>::iterator it = m_ModifiedEntities.begin(); it != m_ModifiedEntities.end(); ++it)
    15621573        {
    1563             // Don't bother updating if we already did it in a global update
    1564             if (!m_GlobalVisibilityUpdate)
    1565                 UpdateVisibility(*it);
     1574            PROFILE("UpdateVisibilityData2");
     1575            for (std::vector<entity_id_t>::iterator it = m_ModifiedEntities.begin(); it != m_ModifiedEntities.end(); ++it)
     1576            {
     1577                // Don't bother updating if we already did it in a global update
     1578                if (!m_GlobalVisibilityUpdate)
     1579                    UpdateVisibility(*it);
     1580            }
    15661581        }
    15671582        m_ModifiedEntities.clear();
    15681583
  • source/simulation2/components/ICmpVisibility.cpp

     
    2828class CCmpVisibilityScripted : public ICmpVisibility
    2929{
    3030public:
    31     DEFAULT_SCRIPT_WRAPPER(VisibilityScripted)
     31    DEFAULT_SCRIPT_WRAPPER_NO_CTOR(VisibilityScripted)
     32   
     33    CCmpVisibilityScripted(ScriptInterface& scriptInterface, JS::HandleValue instance) :
     34        m_Script(scriptInterface, instance),
     35        m_IsActivated(false)
     36    { }
     37   
     38    virtual void Init(const CParamNode& paramNode)
     39    {
     40        m_Script.Init(paramNode, GetEntityId());
     41        m_IsActivated = m_Script.Call<bool>("IsActivated");
     42    }
    3243
    3344    virtual bool IsActivated()
    3445    {
    35         return m_Script.Call<bool>("IsActivated");
     46        return m_IsActivated;
     47        //return m_Script.Call<bool>("IsActivated");
    3648    }
    3749
    3850    virtual ICmpRangeManager::ELosVisibility GetVisibility(player_id_t player, bool isVisible, bool isExplored)
     
    6274    {
    6375        return m_Script.Call<bool>("GetAlwaysVisible");
    6476    }
     77private:
     78    bool m_IsActivated;
    6579};
    6680
    6781REGISTER_COMPONENT_SCRIPT_WRAPPER(VisibilityScripted)
  • source/simulation2/system/Component.h

     
    4848    { \
    4949        return CID_##cname; \
    5050    }
     51   
     52#define DEFAULT_SCRIPT_WRAPPER(cname) \
     53    CCmp##cname(ScriptInterface& scriptInterface, JS::HandleValue instance) : m_Script(scriptInterface, instance) { } \
     54    virtual void Init(const CParamNode& paramNode) \
     55    { \
     56        m_Script.Init(paramNode, GetEntityId()); \
     57    } \
     58    DEFAULT_SCRIPT_WRAPPER_NO_CTOR(cname);
    5159
    52 #define DEFAULT_SCRIPT_WRAPPER(cname) \
     60#define DEFAULT_SCRIPT_WRAPPER_NO_CTOR(cname) \
    5361    static void ClassInit(CComponentManager& UNUSED(componentManager)) { } \
    5462    static IComponent* Allocate(ScriptInterface& scriptInterface, JS::HandleValue instance) \
    5563    { \
     
    5967    { \
    6068        delete static_cast<CCmp##cname*> (cmp); \
    6169    } \
    62     CCmp##cname(ScriptInterface& scriptInterface, JS::HandleValue instance) : m_Script(scriptInterface, instance) { } \
    6370    static std::string GetSchema() \
    6471    { \
    6572        return "<a:component type='script-wrapper'/><empty/>"; \
    6673    } \
    67     virtual void Init(const CParamNode& paramNode) \
    68     { \
    69         m_Script.Init(paramNode, GetEntityId()); \
    70     } \
    7174    virtual void Deinit() \
    7275    { \
    7376        m_Script.Deinit(); \