Editor/Walkway/ArchWalkwayBuilder.cs
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();
}
}