Skip to content

Conical Rooftops #73

@PositivPy

Description

@PositivPy

Add this to ./Building/Runtime/ProceduralRoof.cs

    public class ProceduralConicalRoof : ProceduralRoof 
    {
        public ProceduralConicalRoof(List<Vector2> foundationPolygon, RoofConfig roofConfig, Color roofColor)
            : base(foundationPolygon, roofConfig, roofColor)
        {
        }

        public override MeshDraft Construct(Vector2 parentLayoutOrigin)
        {
            var roofDraft = ConstructRoofBase(out List<Vector2> roofPolygon2, out List<Vector3> roofPolygon3);
            List<Vector3> upperRing = roofPolygon2.ConvertAll(v => v.ToVector3XZ() + Vector3.up * roofConfig.thickness);

            var centerPoint = FindCenter(upperRing);

            /// Arbitrary: roof height is radius of the base ///
            float centerPointHeight = Vector3.Distance(centerPoint, upperRing[0]); 

            centerPoint += Vector3.up * centerPointHeight;
            
            for (int i = 0; i < upperRing.Count - 1; i++)
            {
                roofDraft.AddTriangle(upperRing[i], upperRing[i+1], centerPoint, true);
            }
            // Add last triangle ([end] to [start])
            roofDraft.AddTriangle(upperRing[upperRing.Count - 1] , upperRing[0], centerPoint, true);

            return roofDraft.Paint(roofColor);
        }

        private Vector3 FindCenter(List<Vector3> polygon)
        {
            Vector3 pos = Vector3.zero;
            foreach(Vector3 v in polygon)
            {
                pos += v;
            }
            return pos / polygon.Count;
        }

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions