Editor/Walkway/ArchWalkwayBuilder.cs

Builder for creating an ArchWalkway.Link. Collects configuration (level, dimensions, pier type, rise, interior, cornice, skirting) and delegates actual creation to ArchWalkwayGenerationService.

using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;

namespace Sunless.Architecture;


public sealed class ArchWalkwayBuilder
{
	readonly ArchPlan plan;
	readonly ArchBuilding building;
	readonly ArchKit kit;
	Vector2 dragMin;
	Vector2 dragMax;
	Vector2 dragFrom;
	int level;
	float baseHeight;
	float width;
	float height;
	ArchPillarPart pier;
	int rise;
	WalkwayInterior interior = WalkwayInterior.None;
	bool cornice = true;
	bool skirting = true;

	public ArchWalkwayBuilder( ArchPlan plan, ArchBuilding building, ArchKit kit )
	{
		this.plan = plan;
		this.building = building;
		this.kit = kit;
	}

	public ArchWalkwayBuilder Between( int level, float baseHeight, Vector2 dragMin, Vector2 dragMax, Vector2 dragFrom )
	{
		this.level = level;
		this.baseHeight = baseHeight;
		this.dragMin = dragMin;
		this.dragMax = dragMax;
		this.dragFrom = dragFrom;

		return this;
	}

	public ArchWalkwayBuilder WithWidth( float width )
	{
		this.width = width;

		return this;
	}

	public ArchWalkwayBuilder WithHeight( float height )
	{
		this.height = height;

		return this;
	}

	public ArchWalkwayBuilder WithPiers( ArchPillarPart pier )
	{
		this.pier = pier;

		return this;
	}

	public ArchWalkwayBuilder WithRise( int rise )
	{
		this.rise = rise;

		return this;
	}

	public ArchWalkwayBuilder WithInterior( WalkwayInterior interior )
	{
		this.interior = interior;

		return this;
	}

	public ArchWalkwayBuilder WithCornice( bool cornice )
	{
		this.cornice = cornice;

		return this;
	}

	public ArchWalkwayBuilder WithSkirting( bool skirting )
	{
		this.skirting = skirting;

		return this;
	}

	public ArchWalkway.Link Create()
	{
		return new ArchWalkwayGenerationService( plan, building, kit )
			.Between( level, baseHeight, dragMin, dragMax, dragFrom )
			.WithWidth( width )
			.WithHeight( height )
			.WithPiers( pier )
			.WithRise( rise )
			.WithInterior( interior )
			.WithCornice( cornice )
			.WithSkirting( skirting )
			.Create();
	}
}