Skip to content

Conical Rooftops #73

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;
        }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions