Editor/Tunnel/ArchTunnelShapeBuilder.cs
using System;
using System.Collections.Generic;
using Sandbox;

namespace Sunless.Architecture;

public sealed class ArchTunnelShapeBuilder {
	ArchRoadPart road;
	ArchTunnelPart part;
	ArchCurve curve;
	IReadOnlyList<ArchFrame> frames;
	ArchKit kit;
	ArchGround ground;
	ArchPlan plan;

	public ArchTunnelShapeBuilder On( ArchRoadPart road, ArchTunnelPart part ) {
		this.road = road;
		this.part = part;

		return this;
	}

	public ArchTunnelShapeBuilder Along( ArchCurve curve ) {
		this.curve = curve;

		return this;
	}

	public ArchTunnelShapeBuilder WithFrames( IReadOnlyList<ArchFrame> frames ) {
		this.frames = frames;

		return this;
	}

	public ArchTunnelShapeBuilder WithKit( ArchKit kit ) {
		this.kit = kit;

		return this;
	}

	public ArchTunnelShapeBuilder Under( ArchGround ground ) {
		this.ground = ground;

		return this;
	}

	// Optional: handed no plan nothing is carved, which is what a designer stage and a bare test want.
	public ArchTunnelShapeBuilder In( ArchPlan plan ) {
		this.plan = plan;

		return this;
	}

	public ArchTunnelShape Create() {
		return ArchTunnel.ResolveCore( road, part, curve, frames, kit, ground, plan );
	}
}