//============================================================================= // リンク解除 //============================================================================= void DrawList::UnLink(ObjectBase* object) { // 存在チェック if(object->drawList(m_shaderPatternId) == nullptr) return; ObjectBase* prev = object->drawPrev(m_shaderPatternId); ObjectBase* next = object->drawNext(m_shaderPatternId); int priority = object->priority(m_shaderPatternId); //---------------------------- // 前オブジェクトの再設定 //---------------------------- object->drawPrev(m_shaderPatternId, nullptr); if(prev != nullptr) { // 前オブジェクトに次オブジェクトを連結 prev->drawNext(m_shaderPatternId, next); } else { // 先頭オブジェクトを変更 m_top[priority] = next; if(m_top[priority] != nullptr) // 先頭の前をnullptrに m_top[priority]->drawPrev(m_shaderPatternId, nullptr); } //---------------------------- // 次オブジェクトの再設定 //---------------------------- object->drawNext(m_shaderPatternId, nullptr); if(next != nullptr) { // 次オブジェクトに前オブジェクトを連結 next->drawPrev(m_shaderPatternId, prev); } else { // 終端オブジェクトを変更 m_end[priority] = prev; if(m_end[priority] != nullptr) // 終端をnullptrに m_end[priority]->drawNext(m_shaderPatternId, nullptr); } //---------------------------- // 描画リストを解除 //---------------------------- object->drawList(nullptr, m_shaderPatternId); }
//============================================================================= // 全オブジェクトの描画 //============================================================================= void DrawList::AllDraw(LPD3DXCONSTANTTABLE vsc, LPD3DXCONSTANTTABLE psc, D3DXMATRIX vp) { ObjectBase* cur = nullptr; for(int cnt = 0; cnt < m_priorityLevel; ++cnt) { cur = m_top[cnt]; while(cur) { cur->Draw(vsc, psc, vp); cur = cur->drawNext(m_shaderPatternId); } } }