void Section::UnRegisterUnit(const UnitPtr& unit) { unit->SetSection(nullptr); m_UnitList.remove_if([&unit](auto& target) { return target.lock() == unit; }); }
bool Section::RegisterUnit(const UnitPtr& unit) { if (unit == nullptr) return false; Direction dir; if (IsOutOfBoundary(unit, dir)) { // 유닛이 바운더리 바깥이면 해당 방향의 섹션에 등록을 시도한다. return RegisterUnit(unit, dir); } // 유닛 리스트에 등록하고, 유닛에게 등록된 섹션을 알려준다. // 섹션끼리는 weak_ptr만 들고있기 때문에, 여기서 유닛에게 보관시키는 // shared_ptr이 유효 카운트이다. // 즉, 이 섹션에 포함된 유닛이 0이 될때, 자동으로 이 섹션도 파괴된다. m_UnitList.push_back(unit); unit->SetSection(shared_from_this()); return true; }