void AHair::RemoveLayer(AHairLayer* Layer) { AMyPlayerController* Controller = GetController(); if (!Controller) return; // Remove all segments beforehand for (int i = 0; i < Layer->Segments.Num(); i++) { RemoveSegment(Layer->Segments[i]); } // Only delete layer if there is more than one if (HairLayers.Num() > 1) { HairLayers.Remove(Layer); // Pick top layer when removing selected if (Controller->TargetLayer == Layer) { Controller->TargetLayer = HairLayers[0]; } Layer->Destroy(); } }
void AHair::RemoveSelected() { AMyPlayerController* Controller = GetController(); if (!Controller) return; int c = 0, n = 100; if (Controller->TargetNodes.Num() > 0) { for (int i = 0; i < Controller->TargetNodes.Num(); i++) RemoveNode(Controller->TargetNodes[i]); } else { while (Controller->TargetSegments.Num() > 0 && c < 100) { RemoveSegment(Controller->TargetSegments[0]); c++; } } if (c == n) UE_LOG(LogTemp, Warning, TEXT("Max %d loop capacity reached"), n); }
void sObstructionMap::RemoveSegmentByPoint(int x, int y) { // if there aren't any segments, don't do anything if (m_Segments.size() == 0) { return; } // find minimum distance double distance = DistanceToSegment(x, y, 0); int point = 0; for (int i = 1; i < m_Segments.size(); i++) { double new_distance = DistanceToSegment(x, y, i); if (new_distance < distance) { distance = new_distance; point = i; } } // remove that point RemoveSegment(point); }
bool HexDoc::RemoveAt(uint64 nIndex, uint64 nSize, int flags /*= 0*/) { if (!(flags & SUPPRESS_UPDATE) && !CanReplaceAt(nIndex, nSize, 0)) return false; m_curSeg = NULL; if (nIndex == this->size) return nSize == 0; int n = FindSegment(nIndex), firstAffected = -1; THSIZE base = bases[n]; const THSIZE removeSize = nSize; // nSize gets modified while (nSize) { Segment* ts = segments[n]; if (ts->contains(nIndex - 1, base) && ts->contains(nIndex + nSize, base)) { //---xxx--- n++; Segment* ts2 = ts->RemoveMid(nIndex - base, nSize); InsertSegment2(n, nIndex, ts2); firstAffected = n + 1; // skip updating the newly inserted segment break; } else if (ts->contains(nIndex - 1, base)) { // ---xxx nSize -= ts->size - (nIndex - base); ts->RemoveRight(nIndex - base); base += ts->size; firstAffected = n; n++; } else if (ts->contains(nIndex + nSize, base)) { // xxx--- ts->RemoveLeft(nSize); if (firstAffected == -1) firstAffected = n + 1; break; } else { // xxx nSize -= ts->size; delete ts; RemoveSegment(n); if (firstAffected == -1) firstAffected = n; } } m_iChangeIndex++; if (hw && !(flags & SUPPRESS_UPDATE)) hw->OnDataChange(nIndex, removeSize, 0); if (firstAffected == -1) firstAffected = 0; for (n = firstAffected; n < (int)bases.size(); n++) bases[n] -= removeSize; //! this belongs somewhere else, or at least inside SUPPRESS_UPDATE check. this->size -= removeSize; return true; }