bool ON_UuidList::Read( class ON_BinaryArchive& archive ) { m_count = 0; m_removed_count = 0; m_sorted_count = 0; int major_version = 0; int minor_version = 0; bool rc = archive.BeginRead3dmChunk( TCODE_ANONYMOUS_CHUNK, &major_version, &minor_version ); if (rc) { if ( 1 != major_version ) rc = false; if (rc) rc = archive.ReadArray( *this ); if ( !archive.EndRead3dmChunk() ) rc = false; } SortHelper(); return rc; }
vector<std::pair<int, int>> reconstructQueue(vector<std::pair<int, int>>& people) { auto people_cpy = people; using data_t = pair<int, int>; struct SortHelper { bool operator()(const data_t& p1, const data_t& p2) const noexcept { // sort height by decreasing order // while sorting k in increasing order if (p1.first > p2.first) {return true;} else if (p1.first == p2.first) {return p1.second < p2.second;} else {return false;} } }; std::sort(people_cpy.begin(), people_cpy.end(), SortHelper()); for (size_t i = 0; i < people_cpy.size(); i++) { auto k = people_cpy[i].second; auto pos = i; while (pos > k) { std::swap(people_cpy[pos], people_cpy[pos-1]); pos--; } } return people_cpy; }
void ON_UuidList::RemapUuids( const ON_SimpleArray<ON_UuidPair>& uuid_remap ) { if( m_count > 0 && uuid_remap.Count() > 0 ) { bool bRemapped = false; int i, j; for ( i = 0; i < m_count; i++ ) { j = uuid_remap.BinarySearch( (const ON_UuidPair*)&m_a[i], ON_UuidPair::CompareFirstUuid ); if ( j >= 0 ) { if ( ON_max_uuid == m_a[i] ) continue; m_sorted_count = 0; bRemapped = true; m_a[i] = uuid_remap[j].m_uuid[1]; if ( ON_max_uuid == m_a[i] ) m_removed_count++; } } if ( bRemapped ) { m_sorted_count = 0; SortHelper(); for ( i = m_count-1; i > 0; i-- ) { if ( m_a[i] == m_a[i-1] ) { Remove(i); m_sorted_count--; } } } } }
void instance_halls_of_stone::SortFaces() { std::list<Creature*> lPossibleEyes; GameObject* pFace = NULL; // FACE_MARNAK if (pFace = instance->GetGameObject(m_aFaces[FACE_MARNAK].m_goFaceGuid)) { // Find Marnak NPCs GetValidNPCsOfList(instance, m_lMarnakGUIDs, lPossibleEyes); if (lPossibleEyes.size() > 1) { lPossibleEyes.sort(SortHelper(pFace)); std::list<Creature*>::const_iterator itr = lPossibleEyes.begin(); m_aFaces[FACE_MARNAK].m_leftEyeGuid = (*itr)->GetObjectGuid(); ++itr; m_aFaces[FACE_MARNAK].m_speakerGuid = (*itr)->GetObjectGuid(); } // Find Worldtrigger NPC GetValidNPCsOfList(instance, m_lWorldtriggerGUIDs, lPossibleEyes); if (!lPossibleEyes.empty()) { lPossibleEyes.sort(SortHelper(pFace)); m_aFaces[FACE_MARNAK].m_rightEyeGuid = (*lPossibleEyes.begin())->GetObjectGuid(); } } // FACE_ABEDNEUM if (pFace = instance->GetGameObject(m_aFaces[FACE_ABEDNEUM].m_goFaceGuid)) { // Find Abedneum NPCs GetValidNPCsOfList(instance, m_lAbedneumGUIDs, lPossibleEyes); if (lPossibleEyes.size() > 1) { lPossibleEyes.sort(SortHelper(pFace)); std::list<Creature*>::const_iterator itr = lPossibleEyes.begin(); m_aFaces[FACE_ABEDNEUM].m_leftEyeGuid = (*itr)->GetObjectGuid(); ++itr; m_aFaces[FACE_ABEDNEUM].m_speakerGuid = (*itr)->GetObjectGuid(); } // Find Worldtrigger NPC GetValidNPCsOfList(instance, m_lWorldtriggerGUIDs, lPossibleEyes); if (!lPossibleEyes.empty()) { lPossibleEyes.sort(SortHelper(pFace)); m_aFaces[FACE_ABEDNEUM].m_rightEyeGuid = (*lPossibleEyes.begin())->GetObjectGuid(); } } // FACE_KADDRAK if (pFace = instance->GetGameObject(m_aFaces[FACE_KADDRAK].m_goFaceGuid)) { // Find Marnak NPCs GetValidNPCsOfList(instance, m_lKaddrakGUIDs, lPossibleEyes); if (lPossibleEyes.size() > 1) { lPossibleEyes.sort(SortHelper(pFace)); std::list<Creature*>::const_iterator itr = lPossibleEyes.begin(); m_aFaces[FACE_KADDRAK].m_leftEyeGuid = (*itr)->GetObjectGuid(); ++itr; m_aFaces[FACE_KADDRAK].m_speakerGuid = (*itr)->GetObjectGuid(); } // Find Tribunal NPC GetValidNPCsOfList(instance, m_lTribunalGUIDs, lPossibleEyes); if (!lPossibleEyes.empty()) { lPossibleEyes.sort(SortHelper(pFace)); m_aFaces[FACE_KADDRAK].m_rightEyeGuid = (*lPossibleEyes.begin())->GetObjectGuid(); } } // Clear GUIDs m_lKaddrakGUIDs.clear(); m_lAbedneumGUIDs.clear(); m_lMarnakGUIDs.clear(); m_lTribunalGUIDs.clear(); m_lWorldtriggerGUIDs.clear(); }
void ON_UuidList::Compact() { SortHelper(); SetCapacity(m_count); }
void instance_halls_of_stone::SortFaces() { std::list<Creature*> lPossibleEyes; GameObject* pFace = NULL; // FACE_MARNAK pFace = instance->GetGameObject(m_aFaces[FACE_MARNAK].m_goFaceGuid); if (pFace) { // Find Marnak NPCs GetValidNPCsOfList(instance, m_lMarnakGUIDs, lPossibleEyes); if (lPossibleEyes.size() > 1) { lPossibleEyes.sort(SortHelper(pFace)); std::list<Creature*>::const_iterator itr = lPossibleEyes.begin(); m_aFaces[FACE_MARNAK].m_leftEyeGuid = (*itr)->GetObjectGuid(); ++itr; m_aFaces[FACE_MARNAK].m_speakerGuid = (*itr)->GetObjectGuid(); } // Find Worldtrigger NPC GetValidNPCsOfList(instance, m_lWorldtriggerGUIDs, lPossibleEyes); if (!lPossibleEyes.empty()) { lPossibleEyes.sort(SortHelper(pFace)); Creature* pDummy = (*lPossibleEyes.begin()); if (Creature* newFace = pFace->SummonCreature(NPC_MARNAK, pDummy->GetPositionX(), pDummy->GetPositionY(), pDummy->GetPositionZ(), pDummy->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000)) m_aFaces[FACE_MARNAK].m_rightEyeGuid = newFace->GetObjectGuid(); //m_aFaces[FACE_MARNAK].m_rightEyeGuid = (*lPossibleEyes.begin())->GetObjectGuid(); } } // FACE_ABEDNEUM pFace = instance->GetGameObject(m_aFaces[FACE_ABEDNEUM].m_goFaceGuid); if (pFace) { // Find Abedneum NPCs GetValidNPCsOfList(instance, m_lAbedneumGUIDs, lPossibleEyes); if (lPossibleEyes.size() > 1) { lPossibleEyes.sort(SortHelper(pFace)); std::list<Creature*>::const_iterator itr = lPossibleEyes.begin(); m_aFaces[FACE_ABEDNEUM].m_leftEyeGuid = (*itr)->GetObjectGuid(); ++itr; m_aFaces[FACE_ABEDNEUM].m_speakerGuid = (*itr)->GetObjectGuid(); } // Find Worldtrigger NPC GetValidNPCsOfList(instance, m_lWorldtriggerGUIDs, lPossibleEyes); if (!lPossibleEyes.empty()) { lPossibleEyes.sort(SortHelper(pFace)); Creature* pDummy = (*lPossibleEyes.begin()); if (Creature* newFace = pFace->SummonCreature(NPC_ABEDNEUM, pDummy->GetPositionX(), pDummy->GetPositionY(), pDummy->GetPositionZ(), pDummy->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000)) m_aFaces[FACE_ABEDNEUM].m_rightEyeGuid = newFace->GetObjectGuid(); //m_aFaces[FACE_ABEDNEUM].m_rightEyeGuid = (*lPossibleEyes.begin())->GetObjectGuid(); } } // FACE_KADDRAK pFace = instance->GetGameObject(m_aFaces[FACE_KADDRAK].m_goFaceGuid); if (pFace) { // Find Kaddrak NPCs GetValidNPCsOfList(instance, m_lKaddrakGUIDs, lPossibleEyes); if (lPossibleEyes.size() > 1) { lPossibleEyes.sort(SortHelper(pFace)); std::list<Creature*>::const_iterator itr = lPossibleEyes.begin(); m_aFaces[FACE_KADDRAK].m_leftEyeGuid = (*itr)->GetObjectGuid(); ++itr; m_aFaces[FACE_KADDRAK].m_speakerGuid = (*itr)->GetObjectGuid(); } // Find Tribunal NPC GetValidNPCsOfList(instance, m_lTribunalGUIDs, lPossibleEyes); if (!lPossibleEyes.empty()) { lPossibleEyes.sort(SortHelper(pFace)); Creature* pDummy = (*lPossibleEyes.begin()); if (Creature* newFace = pFace->SummonCreature(NPC_KADDRAK, pDummy->GetPositionX(), pDummy->GetPositionY(), pDummy->GetPositionZ(), pDummy->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000)) m_aFaces[FACE_KADDRAK].m_rightEyeGuid = newFace->GetObjectGuid(); //m_aFaces[FACE_KADDRAK].m_rightEyeGuid = (*lPossibleEyes.begin())->GetObjectGuid(); } } // Clear GUIDs m_lKaddrakGUIDs.clear(); m_lAbedneumGUIDs.clear(); m_lMarnakGUIDs.clear(); m_lTribunalGUIDs.clear(); m_lWorldtriggerGUIDs.clear(); }