public void SetSegmentData(SegmentData data) { if (data != segmentData) { if (segmentData) { if (segmentData.validationListener == OnValidate) { segmentData.validationListener = null; } } segmentData = data; if (data) { data.validationListener = OnValidate; UpdateAppearanceForCurrentValues(); } } }
public bool CanCopySegmentToLocation(SegmentData segment, int location, out int?suggestedLocation) { suggestedLocation = null; if (location < 0) { return(false); } if (location + segment.segmentLength > CurrentEnd) { var earliestEndStart = segments[segments.Count - 1].PositionAfter; if (CurrentEnd - earliestEndStart > segment.segmentLength) { suggestedLocation = CurrentEnd - segment.segmentLength; } return(false); } var enclosingSegments = SegmentsSurroundingLocation(location); // Debug.Log($"Enclosing Segments: {enclosingSegments[0]} - {location} - {enclosingSegments[1]}"); if (enclosingSegments[0] && enclosingSegments[0].PositionAfter > location) { return(false); } if (enclosingSegments[1] && enclosingSegments[1].location < location + segment.segmentLength) { if (!enclosingSegments[0] || (enclosingSegments[1].location - enclosingSegments[0].PositionAfter) >= segment.segmentLength) { int potentialLocation = enclosingSegments[1].location - segment.segmentLength; if (potentialLocation >= 0) { suggestedLocation = potentialLocation; } } return(false); } return(true); }
public FileData(Level level, int fileID, int fileLength) { this.fileID = fileID; this.fileLength = fileLength; this.level = level; segments = new List <SegmentData>(); int segmentIndex = 0; int remainingLength = fileLength; while (remainingLength > 0) { int segmentLength = Random.Range(1, System.Math.Min(remainingLength, level.width - 8)); if (segmentLength == remainingLength && segmentIndex == 0) { segmentLength = Random.Range(1, segmentLength - 1); } SegmentData segment = new SegmentData(); segment.fileNumber = fileID; segment.segmentNumber = segmentIndex + 1; segment.segmentLength = segmentLength; segment.level = level; if (segmentIndex == 0) { segment.partType = SegmentDataPartType.Start; } else if (remainingLength == segmentLength) { segment.partType = SegmentDataPartType.End; } else { segment.partType = SegmentDataPartType.Middle; } segments.Add(segment); segmentIndex += 1; remainingLength -= segmentLength; } }
public List <SegmentData> SegmentsSurroundingLocation(int location) { List <SegmentData> result = new List <SegmentData> { null, null }; int segmentCount = segments.Count; for (int index = 0; index < segmentCount; index++) { SegmentData segment = segments[index]; if (segment.location < location) { result[0] = segment; } if (segment.location >= location) { result[1] = segment; break; } } return(result); }
// TODO: make it take time and give a progress callback public void CopySegmentToLocation(SegmentData segment, int location) { segment.location = location; SortSegments(); }