Beispiel #1
0
    private bool SetBlockFace(Tile3D.Block block, Vector3 normal, Tile3D.Face brush)
    {
        Undo.RecordObject(target, "SetBlockFaces");

        for (int i = 0; i < Tile3D.Faces.Length; i++)
        {
            if (Vector3.Dot(normal, Tile3D.Faces[i]) > 0.8f)
            {
                if (!brush.Hidden)
                {
                    if (brush != block.Faces[i])
                    {
                        block.Faces[i] = brush;
                        return(true);
                    }
                }
                else if (!block.Faces[i].Hidden)
                {
                    block.Faces[i].Hidden = true;
                    return(true);
                }
            }
        }

        return(false);
    }
Beispiel #2
0
        private bool FillBlockFace(Tile3D.Block block, Tile3D.Face face)
        {
            Vector3Int perp1, perp2;

            GetPerpendiculars(hover.Face, out perp1, out perp2);

            var active     = new List <Tile3D.Block>();
            var filled     = new HashSet <Tile3D.Block>();
            var directions = new Vector3Int[4] {
                perp1, perp1 * -1, perp2, perp2 * -1
            };
            var outwards = hover.Face.Int();
            var changed  = false;

            filled.Add(block);
            active.Add(block);
            SetBlockFace(block, hover.Face, brush);

            while (active.Count > 0)
            {
                var from = active[0];
                active.RemoveAt(0);

                for (int i = 0; i < 4; i++)
                {
                    var next = tiler.At(from.Tile + directions[i]);
                    if (next != null && !filled.Contains(next) &&
                        tiler.At(from.Tile + directions[i] + outwards) == null &&
                        GetBlockFace(next, hover.Face).Tile == face.Tile)
                    {
                        filled.Add(next);
                        active.Add(next);
                        if (SetBlockFace(next, hover.Face, brush))
                        {
                            changed = true;
                        }
                    }
                }
            }

            return(changed);
        }