⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameobjectslist.inl

📁 分布式坦克游戏
💻 INL
字号:
/*****************************************************************************
*                                                                             
*   GameObjectsList.inl
*                                                                             
*   Electrical Engineering Faculty - Software Lab                             
*   Spring semester 1998                                                      
*                                                                             
*   Tanks game                                                                
*                                                                             
*   Contents: Inline functions implementations.
*                                                                             
*   Authors: Eran Yariv - 28484475                                           
*            Moshe Zur  - 24070856                                           
*                                                                            
*                                                                            
*   Date: 23/09/98                                                           
*                                                                            
******************************************************************************/
inline CGameObjectsList::CGameObjectsList ()
{
    m_aArrays[GROUND_LEVEL].Init(1);      // Game board only
    m_aArrays[LOWER_LEVEL].Init(MAX_POSSIBLE_OBJECTS);
    m_aArrays[HIGHER_LEVEL].Init(MAX_POSSIBLE_OBJECTS);
    m_aArrays[SKY_LEVEL].Init(MAX_POSSIBLE_OBJECTS); // Airplanes and game-over objects
}


inline CGameObjectsList::~CGameObjectsList ()
{
    KillList();
}

inline void
CGameObjectsList::KillList ()
{
    for (int i = 0; i < 4; i++)
        m_aArrays[i].Empty();
}

inline void
CGameObjectsList::AddObject (CGameObject *pGameObj)
{
    ASSERT(pGameObj);
    Freeze();
    VERIFY(m_aArrays[pGameObj->GetHeight()].Add(pGameObj));
    Thaw();
}

inline void 
CGameObjectsList::RemoveObject (CGameObject *pGameObj)
{
    ASSERT(pGameObj);
    Freeze();
    VERIFY(m_aArrays[pGameObj->GetHeight()].Remove(pGameObj));
    Thaw();
}

inline int 
CGameObjectsList::GetObjectsCount () const
{
    return  m_aArrays[0].GetObjectsCount() +
            m_aArrays[1].GetObjectsCount() +
            m_aArrays[2].GetObjectsCount() +
            m_aArrays[3].GetObjectsCount();
}

inline LIST_POS
CGameObjectsList::GetHeadPosition ()
{
    LIST_POS lp;

    lp.ind = 0;
    lp.pos = m_aArrays[0].GetHeadPosition();

    return lp;
}

inline CGameObject* 
CGameObjectsList::GetNext (LIST_POS& lp)
{
    if (lp.ind < 0 || lp.ind > 3)
        return NULL;

    CGameObject* RetVal = m_aArrays[lp.ind].GetNext(lp.pos);

    if (! RetVal) {     // We have reached current array's top
        while (++lp.ind < 4)  // Advance to next non-empty array, if possible
        {
            lp.pos = m_aArrays[lp.ind].GetHeadPosition();
            RetVal = m_aArrays[lp.ind].GetNext(lp.pos);
            if (RetVal)
                // Success
                return RetVal;
        }
    }
    return RetVal;
}

inline void
CGameObjectsList::Freeze()
{
    m_CS.Lock();
}

inline void
CGameObjectsList::Thaw()
{
    m_CS.Unlock();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -