private void ApplySearchFilter() { if (string.IsNullOrWhiteSpace(SearchTextBox.Text) && IsListFiltered) { if (FilteredBrickList != null && FilteredBrickList.IsSorted) { BrickList.ApplySort(FilteredBrickList.PropertyDescriptor, FilteredBrickList.SortDirection); } BrickGridView.DataSource = BrickList; FilteredBrickList.Clear(); IsListFiltered = false; return; } FilteredBrickList = new SortableBindingList <BrickInfo>( BrickList.Where(x => IsBrickVisible(x)).ToList()); if (BrickList.IsSorted) { FilteredBrickList.ApplySort(BrickList.PropertyDescriptor, BrickList.SortDirection); } BrickGridView.DataSource = FilteredBrickList; IsListFiltered = true; }
/// <summary> /// Use for intialization /// </summary> void Awake() { if (!instance) { instance = this; } }
private void FillValidatedParts(bool onlyOnce = false) { var validBricks = BrickListCache.GetValidatedBricks(); var newBricks = validBricks.Except(BrickList) .OrderBy(x => x.PartId).ToList(); const int MAX_ADD = 200; //add items in batches to prevent freezing the window while (newBricks.Count > 0) { var range = newBricks.Take(MAX_ADD).ToList(); BrickList.AddRange(range); if (IsListFiltered) { FilteredBrickList.AddRange(range.Where(x => IsBrickVisible(x))); } newBricks.RemoveRange(0, range.Count); if (onlyOnce) { break; } if (newBricks.Count > 0) { Application.DoEvents(); } } }
void FloodFill(GemBrick node) { List <GemBrick> gemList = new List <GemBrick>(); if (node.brickType != BrickList.BRICK_TYPE.NONE) { return; } int x = 0, y = 0; //RIGHT CHECK for (x = node.colID; x < gems[node.rowID].Count; x++) { if (BrickList.CheckIsNULL(ref gemList, gems[node.rowID][x])) { break; } } //LEFT CHECK for (x = node.colID; x >= 0; x--) { if (BrickList.CheckIsNULL(ref gemList, gems[node.rowID][x])) { break; } } //TOP CHECK for (y = node.rowID; y < gems.Count; y++) { if (BrickList.CheckIsNULL(ref gemList, gems[y][node.colID])) { break; } } //BOTTOM CHECK for (y = node.rowID; y >= 0; y--) { if (BrickList.CheckIsNULL(ref gemList, gems[y][node.colID])) { break; } } //FINISH CHECK FinishCheckGem(gemList); }
public static string ExportBRKFromBricklist(BrickList bl) { string export = ""; for (int i = 0; i < bl.bricks.Length; i++) { export += ExportBrick(bl.bricks[i].ToBrick()); if (i < bl.bricks.Length - 1) { export += "\n"; } } return(export); }
public BrickList ParseClipboard() { BrickList returnList = new BrickList(); string text = Helper.ReadClipboard(); if (text.StartsWith("{\"bricks\":")) // brickbuilder json clipboard format { returnList = JsonUtility.FromJson <BrickList>(text); } else { try { returnList = MapParser.ParseBRKBricks(text); } catch (Exception e) { Debug.LogException(e); } } return(returnList); }
private void FillValidatedParts(bool onlyOnce = false) { var validBricks = BrickListCache.GetValidatedBricks(); var newBricks = validBricks.Except(BrickList) .OrderBy(x => x.PartId).ToList(); const int MAX_ADD = 200; //add items in batches to prevent freezing the window while (newBricks.Count > 0) { var range = newBricks.Take(MAX_ADD).ToList(); var curScrollRow = BrickGridView.FirstDisplayedScrollingRowIndex; IsUpdatingList = true; BrickList.AddRange(range); if (IsListFiltered) { FilteredBrickList.AddRange(range.Where(x => IsBrickVisible(x))); } if (curScrollRow >= 0 && curScrollRow != BrickGridView.FirstDisplayedScrollingRowIndex) { //fix to prevent scrolling back to first row BrickGridView.FirstDisplayedScrollingRowIndex = curScrollRow; } IsUpdatingList = false; newBricks.RemoveRange(0, range.Count); if (onlyOnce) { break; } if (newBricks.Count > 0) { Application.DoEvents(); } } }
private void StartLoadingBricks() { if (BrickListCache.IsCacheDirty || BrickListCache.IsCacheEmpty) { LoadingProgressBar.Visible = true; LoadingProgressBar.Style = ProgressBarStyle.Marquee; //TotalBricksLoaded = 0; CTS = new CancellationTokenSource(); BrickLoadingTask = Task.Factory.StartNew(() => BrickListCache.RebuildCache(CTS.Token) ); RefreshTimer.Start(); } if (!BrickListCache.IsCacheEmpty) { BrickList.Clear(); FillValidatedParts(BrickLoadingTask != null); } }
// this is designed for pasting stuff copied in the workshop - no group support, no environment settings, only bricks public static BrickList ParseBRKBricks(string text) { List <BrickData> bricks = new List <BrickData>(); string[] lines = text.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < lines.Length; i++) { string line = lines[i].Trim(); if (line[0] != '+') { // defining brick BrickData brick = new BrickData(); float[] brickInfo = Helper.StringToFloatArray(line); brick.Position = new Vector3(brickInfo[0], brickInfo[1], brickInfo[2]); brick.Scale = new Vector3(brickInfo[3], brickInfo[4], brickInfo[5]); brick.ConvertTransformToUnity(); brick.BrickColor = new Color(brickInfo[6], brickInfo[7], brickInfo[8]); brick.Transparency = brickInfo[9]; bricks.Add(brick); } else { // defining brick properties BrickData brick = bricks[bricks.Count - 1]; if (line.StartsWith("+NAME")) { if (line.Length == 5) { // the brick doesn't have a name for some reason brick.Name = ""; } else { brick.Name = line.Substring(6); } } else if (line.StartsWith("+ROT")) { brick.Rotation = (int.Parse(line.Substring(5), CultureInfo.InvariantCulture) * -1).Mod(360); } else if (line.StartsWith("+SHAPE")) { brick.Shape = (int)BB.GetShape(line.Substring(7)); } else if (line.StartsWith("+NOCOLLISION")) { brick.Collision = false; } else if (line.StartsWith("+MODEL")) { brick.Model = line.Substring(7); } else if (line.StartsWith("+CLICKABLE")) { brick.Clickable = true; } bricks[bricks.Count - 1] = brick; // i guess i gotta do this } } BrickList returnBL = new BrickList(); returnBL.bricks = bricks.ToArray(); return(returnBL); }
public void Start() { Clipboard = new BrickList(); }