Heulen
October 20, 2013, 1:13pm
1
Flood Fill in a 3d Surface
Hi, I´m trying to made a flood fill (for path finding) and i have 2d version of flood fill, but now i must to modify my code, because i have to flood hills and ramps. I have no idea where to start…i have been reading something on internet. But nothing clear.
Here is my 2d flood fill code
Heulen
October 20, 2013, 1:17pm
2
Here is my flood fill code
using System;
using System.Linq;
using UnityEngine;
using System.Collections.Generic;
public class FloodFill
{
private static FloodFill _instance;
public static FloodFill Instance { get { return _instance ?? (_instance = new FloodFill()); } }
private FloodFill(){ }
private List<GameObject> Inicialize(GameObject seed)
{
return new List<GameObject> { CreateNode(seed.transform, seed.transform.position, 0) };
}
private GameObject CreateNode(Transform parent, Vector3 nextPosition, int currentLevel)
{
var tile = new GameObject(Tags.Tile, typeof(SphereCollider), typeof(Tile)) { tag = Tags.Tile };
tile.transform.position = nextPosition;
tile.transform.parent = parent;
tile.transform.rotation = Quaternion.identity;
tile.GetComponent<Tile>().Level = currentLevel;
return tile;
}
public GameObject[] FlowerFill(int limit, GameObject seed)
{
var tiles = Inicialize(seed);
GameObject[] nodes;
var d = new[] { seed.transform.forward, seed.transform.right, -seed.transform.forward, -seed.transform.right };
var level = 0;
do
{
nodes = (from tile in tiles where tile.GetComponent<Tile>().Level == level select tile).ToArray();
var length = nodes.Length;
for (var i = 0; i < length; i++)
{
var levelNode = nodes[i];
var t = levelNode.transform.position;
for (var j = 0; j < 4; j++)
{
var dir = d[j];
var nextPosition = t + dir;
if (!Physics.Linecast(t, nextPosition + 0.45F * dir))
tiles.Add(CreateNode(seed.transform, nextPosition, level + 1));
}
}
level++;
} while (level < limit nodes.Length > 0);
return tiles.ToArray();
}
}