//
        public IStoryLayoutInstance ArrangeAndDecorate(IStoryGraph sg)
        {
            var placementAlgorithm = new BuildingStoryLayoutPlacementAlgorithm(coroutineService, x => ArrangeAndDecorateInternal(sg.Root, x, new List <BuildingWallSegment>()), sg);

            placementAlgorithm.Run();
            var collisionSegments = new List <BuildingWallSegment>();

            ArrangeAndDecorateInternal(sg.Root, placementAlgorithm, collisionSegments);
            var floors = sg.Children[sg.Root]
                         .Select(x => new AaBox(placementAlgorithm.RelativeTransforms[x].Offset, placementAlgorithm.HalfSizes[x]))
                         .ToArray();
            var zonesWithProperties   = floors.Select(x => Tuples.Pair(x, new StoryLayoutZoneProperties(-15f))).ToArray();
            var defaultZoneProperties = new StoryLayoutZoneProperties(0);
            var zoning = new AaBoxStoryLayoutZoning(zonesWithProperties, defaultZoneProperties);
            var buildingCollisionMesh = new CollisionMesh(collisionSegments, floors, zoning);

            return(new BuildingStoryLayoutInstance(inputService, placementAlgorithm, buildingCollisionMesh, zoning));
        }
Esempio n. 2
0
 public AaBoxStoryLayoutZoning(IReadOnlyList <Pair <AaBox, StoryLayoutZoneProperties> > zonesWithProperties, StoryLayoutZoneProperties defaultZoneProperties)
 {
     this.zonesWithProperties   = zonesWithProperties;
     this.defaultZoneProperties = defaultZoneProperties;
 }