Ejemplo n.º 1
0
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();
	}	
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;
}