public void UpdateTiles(IEnumerable <TesseraTileInstance> tileInstances)
 {
     foreach (var i in tileInstances)
     {
         TesseraGenerator.Instantiate(i, transform);
     }
 }
Beispiel #2
0
 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);
     }
 }
Beispiel #4
0
 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;
     }
 }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        // 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();
        }