Beispiel #1
0
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;
    }
Beispiel #3
0
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();
}
Beispiel #5
0
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();
}