示例#1
0
    void BuildGroupInTheFloor(int floor)
    {
        groups.BeginRecord();
        for (var y = 0; y < voxelBuilder.CountY(); ++y)
        {
            var lines = GetLines(floor, y);
            for (var i = 0; i < lines.Count; ++i)  //1個line會對映到1個group
            {
                var group       = CreateGroup();
                var voxels      = lines[i];
                var elementList = new List <Element>();
                for (var k = 0; k < voxels.Length; ++k)
                {
                    var element = CreateElement();
                    var voxel   = voxels[k];
                    element.Set(voxel);
                    elementList.Add(element);

                    //為了之後建立relation方便
                    voxel.group   = group;
                    voxel.element = element;
                }
                var voxelBegin = voxels[0];
                var voxelEnd   = voxels[voxels.Length - 1];
                group.Setpos(voxelBegin);
                group.Set(voxelBegin.floor, voxelBegin.y, voxelBegin.x, voxelEnd.x);
                group.AddElements(elementList.ToArray());
                group.SetGroupRelationBuilder(this);
                groups.Add(group);
            }
        }
        groups.EndRecord(floor);
    }
    static void DrawMap(VoxelBuilder target)
    {
        var nowHeight = target.GetNowFlowerHeight();
        var original  = target.transform.position + nowHeight;

        //畫點
        var offsetX  = 0.5f * Vector3.right * VoxelBuilder.xUnit;
        var offsetY  = 0.5f * Vector3.forward * VoxelBuilder.yUnit;
        var offsetXY = offsetX + offsetY;

        var nowFloorIndex = target.GetNowFloorIndex();

        if (!target.IsValidatedFloorIndex(nowFloorIndex))
        {
            return;
        }

        var CountY = target.CountY(); var CountX = target.CountX();

        for (var y = 0; y < CountY; ++y)
        {
            var from = original + offsetXY + offsetY * y;
            for (var x = 0; x < CountX; ++x)
            {
                ChoseColor(target, nowFloorIndex, y, x);
                Gizmos.DrawSphere(from, PointR);
                from = from + offsetX;
            }
        }
    }