Show / Hide Table of Contents

Class LayoutController<TLayout, TNode, TConfiguration, TShapeContainer, TEnergyData>

Layout operations that compute energy based on given constraints.

Inheritance
System.Object
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>
LayoutController<TLayout, TNode, TConfiguration, TShapeContainer, TEnergyData>
Implements
IChainBasedLayoutOperations<TLayout, TNode>
ILayoutOperations<TLayout, TNode>
IRandomInjectable
Inherited Members
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.Random
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.ShapePerturbChance
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.DifferenceFromAverageScale
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AverageSize
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.LevelDescription
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.StageOneGraph
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.RoomShapesHandler
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.RoomShapeGeometry
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.InjectRandomGenerator(Random)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbShape(TLayout, TNode, Boolean)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbShape(TLayout, IList<TNode>, Boolean)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbPosition(TLayout, TNode, Boolean)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbPosition(TLayout, IList<TNode>, Boolean)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbLayout(TLayout, IList<TNode>, Boolean)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AddChain(TLayout, IList<TNode>, Boolean, Int32)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.TryCompleteChain(TLayout, IList<TNode>)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AreDifferentEnough(TLayout, TLayout)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AreDifferentEnough(TLayout, TLayout, IList<TNode>)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.IsLayoutValid(TLayout)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.IsLayoutValid(TLayout, IList<TNode>)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.GetEnergy(TLayout)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.UpdateLayout(TLayout)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AddNodeGreedily(TLayout, TNode, Int32)
AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.UpdateLayout(TLayout, TNode, TConfiguration)
Namespace: Edgar.GraphBasedGenerator.Common
Assembly: Edgar.dll
Syntax
public class LayoutController<TLayout, TNode, TConfiguration, TShapeContainer, TEnergyData> : AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>, IChainBasedLayoutOperations<TLayout, TNode>, ILayoutOperations<TLayout, TNode>, IRandomInjectable where TLayout : ILayout<TNode, TConfiguration>, ISmartCloneable<TLayout> where TConfiguration : IConfiguration<TShapeContainer, Vector2Int, TNode>, ISmartCloneable<TConfiguration>, IEnergyConfiguration<TEnergyData>, new()
    where TEnergyData : IEnergyData, new()
Type Parameters
Name Description
TLayout
TNode
TConfiguration
TShapeContainer
TEnergyData

Constructors

LayoutController(Int32, ILevelDescription<TNode>, ConstraintsEvaluator<TNode, TConfiguration, TEnergyData>, IRoomShapesHandler<TLayout, TNode, TShapeContainer>, Boolean, IConfigurationSpaces<TConfiguration, Vector2Int>, IRoomShapeGeometry<TConfiguration>)

Declaration
public LayoutController(int averageSize, ILevelDescription<TNode> levelDescription, ConstraintsEvaluator<TNode, TConfiguration, TEnergyData> constraintsEvaluator, IRoomShapesHandler<TLayout, TNode, TShapeContainer> roomShapesHandler, bool throwIfRepeatModeNotSatisfied, IConfigurationSpaces<TConfiguration, Vector2Int> simpleConfigurationSpaces, IRoomShapeGeometry<TConfiguration> roomShapeGeometry)
Parameters
Type Name Description
System.Int32 averageSize
ILevelDescription<TNode> levelDescription
ConstraintsEvaluator<TNode, TConfiguration, TEnergyData> constraintsEvaluator
IRoomShapesHandler<TLayout, TNode, TShapeContainer> roomShapesHandler
System.Boolean throwIfRepeatModeNotSatisfied
IConfigurationSpaces<TConfiguration, Vector2Int> simpleConfigurationSpaces
IRoomShapeGeometry<TConfiguration> roomShapeGeometry

Methods

AddChain(TLayout, IList<TNode>, Boolean, out Int32)

Greedily adds only non corridor nodes to the layout.

Declaration
public override void AddChain(TLayout layout, IList<TNode> chain, bool updateLayout, out int iterationsCount)
Parameters
Type Name Description
TLayout layout
System.Collections.Generic.IList<TNode> chain
System.Boolean updateLayout
System.Int32 iterationsCount
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AddChain(TLayout, System.Collections.Generic.IList<TNode>, System.Boolean, System.Int32)

AddCorridorGreedily(TLayout, TNode)

Adds corridor node greedily.

Declaration
public bool AddCorridorGreedily(TLayout layout, TNode node)
Parameters
Type Name Description
TLayout layout
TNode node
Returns
Type Description
System.Boolean

AddNodeGreedily(TLayout, TNode, out Int32)

Tries all shapes and positions from the maximum intersection to find a configuration with the lowest energy.

Declaration
public override void AddNodeGreedily(TLayout layout, TNode node, out int iterationsCount)
Parameters
Type Name Description
TLayout layout
TNode node
System.Int32 iterationsCount
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.AddNodeGreedily(TLayout, TNode, System.Int32)

CreateConfiguration(TShapeContainer, Vector2Int, TNode)

Creates a configuration with a given shape container and position.

Declaration
protected TConfiguration CreateConfiguration(TShapeContainer shapeContainer, Vector2Int position, TNode node)
Parameters
Type Name Description
TShapeContainer shapeContainer
Vector2Int position
TNode node
Returns
Type Description
TConfiguration

GetEnergy(TLayout)

Gets an energy of a given layout by summing energies of individual nodes.

Declaration
public override float GetEnergy(TLayout layout)
Parameters
Type Name Description
TLayout layout
Returns
Type Description
System.Single
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.GetEnergy(TLayout)

IsLayoutValid(TLayout)

Checks if a given layout is valid by first checking whether the layout itself is valid and then checking whether all configurations of nodes are valid.

Declaration
public override bool IsLayoutValid(TLayout layout)
Parameters
Type Name Description
TLayout layout
Returns
Type Description
System.Boolean
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.IsLayoutValid(TLayout)

IsLayoutValid(TLayout, IList<TNode>)

TODO: should it check if all nodes are laid out? Checks if a given layout is valid by first checking whether the layout itself is valid and then checking whether all configurations of nodes are valid.

Declaration
public override bool IsLayoutValid(TLayout layout, IList<TNode> chain)
Parameters
Type Name Description
TLayout layout
System.Collections.Generic.IList<TNode> chain
Returns
Type Description
System.Boolean
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.IsLayoutValid(TLayout, System.Collections.Generic.IList<TNode>)

PerturbLayout(TLayout, IList<TNode>, Boolean)

Perturbs non corridor rooms until a valid layout is found. Then tries to use a greedy algorithm to lay out corridor rooms.

Declaration
public override void PerturbLayout(TLayout layout, IList<TNode> chain, bool updateLayout)
Parameters
Type Name Description
TLayout layout
System.Collections.Generic.IList<TNode> chain
System.Boolean updateLayout
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbLayout(TLayout, System.Collections.Generic.IList<TNode>, System.Boolean)

PerturbPosition(TLayout, TNode, Boolean)

Declaration
public override void PerturbPosition(TLayout layout, TNode node, bool updateLayout)
Parameters
Type Name Description
TLayout layout
TNode node
System.Boolean updateLayout
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbPosition(TLayout, TNode, System.Boolean)

PerturbShape(TLayout, TNode, Boolean)

Declaration
public override void PerturbShape(TLayout layout, TNode node, bool updateLayout)
Parameters
Type Name Description
TLayout layout
TNode node
System.Boolean updateLayout
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbShape(TLayout, TNode, System.Boolean)

PerturbShape(TLayout, IList<TNode>, Boolean)

Declaration
public override void PerturbShape(TLayout layout, IList<TNode> chain, bool updateLayout)
Parameters
Type Name Description
TLayout layout
System.Collections.Generic.IList<TNode> chain
System.Boolean updateLayout
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.PerturbShape(TLayout, System.Collections.Generic.IList<TNode>, System.Boolean)

TryCompleteChain(TLayout, IList<TNode>)

Tries to add corridors.

Declaration
public override bool TryCompleteChain(TLayout layout, IList<TNode> chain)
Parameters
Type Name Description
TLayout layout
System.Collections.Generic.IList<TNode> chain
Returns
Type Description
System.Boolean
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.TryCompleteChain(TLayout, System.Collections.Generic.IList<TNode>)

UpdateLayout(TLayout)

Updates a given layout by computing energies of all nodes.

Declaration
public override void UpdateLayout(TLayout layout)
Parameters
Type Name Description
TLayout layout
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.UpdateLayout(TLayout)
Remarks

Energies are computed from constraints.

UpdateLayout(TLayout, TNode, TConfiguration)

Declaration
protected override void UpdateLayout(TLayout layout, TNode perturbedNode, TConfiguration configuration)
Parameters
Type Name Description
TLayout layout
TNode perturbedNode
TConfiguration configuration
Overrides
Edgar.GraphBasedGenerator.Common.AbstractLayoutController<TLayout, TNode, TConfiguration, TShapeContainer>.UpdateLayout(TLayout, TNode, TConfiguration)

Implements

IChainBasedLayoutOperations<TLayout, TNode>
ILayoutOperations<TLayout, TNode>
IRandomInjectable
Back to top Generated by DocFX