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