← Files UnityARCHIVED FILE

skills/tilemap-ruletile-createfromsegment/scripts/ManualWorkflowExample.cs

2.25 KB · Oct 2, 2026 · 00:33 UTC

↓ Download file

using System.Collections.Generic;
using System.Linq;
using UnityEngine;

/// <summary>
/// Example: Manual two-step workflow for more control over the analysis step.
/// </summary>
public static class ManualWorkflowExample
{
    public static void RunManualWorkflow(List<Sprite> sprites, RuleTile myRuleTile,
        bool filterToKnownPatterns = true)
    {
        // Step 1: Run sprite-segment-3x3grid on each sprite, filter, and deduplicate
        var seenPatterns = new HashSet<string>();
        var uniquePatterns = new List<(string pattern, Sprite sprite)>();

        foreach (var sprite in sprites)
        {
            // Apply sprite-segment-3x3grid analysis
            string pattern = SpriteSegment3x3Grid.AnalyzeSpriteGrid(
                sprite,
                matchThreshold: 0.75f,
                colorTolerance: 0.04f
            );

            // Discard patterns not in the known set
            if (filterToKnownPatterns &&
                !TilemapRuleTileCreateFromSegment.IsKnownPattern(pattern))
            {
                Debug.Log($"Sprite '{sprite.name}' skipped (unknown pattern: {pattern})");
                continue;
            }

            // Skip duplicates
            if (seenPatterns.Contains(pattern))
            {
                Debug.Log($"Sprite '{sprite.name}' skipped (duplicate pattern: {pattern})");
                continue;
            }

            seenPatterns.Add(pattern);
            Debug.Log($"Sprite '{sprite.name}' pattern: {pattern}");
            uniquePatterns.Add((pattern, sprite));
        }

        // Step 2: Create TilingRules from unique patterns
        var rules = new List<(RuleTile.TilingRule rule, int specificity)>();
        foreach (var (pattern, sprite) in uniquePatterns)
        {
            var result = TilemapRuleTileCreateFromSegment.CreateTilingRuleFromPattern(pattern, sprite);
            rules.Add(result);
        }

        // Sort by specificity
        rules.Sort((a, b) => b.specificity.CompareTo(a.specificity));

        // Apply to RuleTile
        var sortedRules = rules.Select(r => r.rule).ToList();
        TilemapRuleTileCreateFromSegment.ApplyRulesToTile(myRuleTile, sortedRules);

        Debug.Log($"Created {sortedRules.Count} unique rules from {sprites.Count} sprites");
    }
}

SHA-256: df0e0a0aad25ce9da1acff22f612dea97df5c404ece238de3a4feb0e354b7426