public void UpdateTiles(IEnumerable <TesseraTileInstance> tileInstances) { foreach (var i in tileInstances) { TesseraGenerator.Instantiate(i, transform); } }
public void UpdateTiles(IEnumerable <TesseraTileInstance> tileInstances) { foreach (var i in tileInstances) { foreach (var go in TesseraGenerator.Instantiate(i, transform)) { Undo.RegisterCreatedObjectUndo(go, GenerateTiles); } } }
public void UpdateTiles(IEnumerable <TesseraTileInstance> tileInstances) { foreach (var i in tileInstances) { foreach (var p in i.Cells) { Clear(p); } instantiated[i.Cells.First()] = TesseraGenerator.Instantiate(i, transform); } }
public TileList(TesseraGenerator generator, string title, SerializedProperty list, bool allowSingleTile = true, bool allowCheckboxes = true, bool allowList = true) { this.generator = generator; this.title = title; this.list = list; this.allowSingleTile = allowSingleTile; this.allowCheckboxes = allowCheckboxes; this.allowList = allowList; // Pick display type if (SingleTileEnabled) { displayType = TileListDisplayType.SingleTile; } else if (CheckboxesEnabled) { displayType = TileListDisplayType.Checkboxes; } else { displayType = TileListDisplayType.List; } }
private ITesseraTileOutput GetTileOutput(TesseraGenerator generator) { var tileOutput = generator.GetComponent <ITesseraTileOutput>(); if (tileOutput is TesseraTilemapOutput tmo) { return(new RegisterUndo(tmo?.tilemap?.gameObject, tmo)); } if (tileOutput is TesseraMeshOutput tmo2) { // TODO: Manually handle mesh serialization for undo // https://answers.unity.com/questions/607527/is-this-possible-to-apply-undo-to-meshfiltermesh.html return(tmo2); } if (tileOutput == null) { return(new EditorTileOutout(generator.transform)); } else { // Something custom, just use it verbatim return(tileOutput); } }
// Wraps generation with a progress bar and cancellation button. private void Generate(TesseraGenerator generator) { var cts = new CancellationTokenSource(); string progressText = ""; float progress = 0.0f; var tileOutput = GetTileOutput(generator); void OnComplete(TesseraCompletion completion) { if (!completion.success) { if (completion.contradictionLocation != null) { var loc = completion.contradictionLocation; Debug.LogError($"Failed to complete generation, issue at tile {loc}"); } else { Debug.LogError("Failed to complete generation"); } return; } if (tileOutput != null) { tileOutput.UpdateTiles(completion.tileInstances); } else { } } var enumerator = generator.StartGenerate(new TesseraGenerateOptions { onComplete = OnComplete, progress = (t, p) => { progressText = t; progress = p; }, cancellationToken = cts.Token }); var last = DateTime.Now; // Update progress this frequently. // Too fast and it'll slow down generation. var freq = TimeSpan.FromSeconds(0.1); try { while (enumerator.MoveNext()) { var a = enumerator.Current; if (last + freq < DateTime.Now) { last = DateTime.Now; if (EditorUtility.DisplayCancelableProgressBar("Generating", progressText, progress)) { cts.Cancel(); EditorUtility.ClearProgressBar(); } } } } catch (TaskCanceledException) { // Ignore } catch (OperationCanceledException) { // Ignore } EditorUtility.ClearProgressBar(); GUIUtility.ExitGUI(); }