Segmented Formation
private FormationLayoutProvider layoutProvider;
private void Awake()
{
// Create an instance of formation provider with either regular positions
// or formation slots.
layoutProvider = new FormationLayoutProvider(CreateFormationSlots);
}
// Single formation
private Vector3[] CreateFormationPositions(int count)
{
return CurrentFormation.GetPositions(count);
}
// Segmented formation (multiple formations)
private FormationSlot[] CreateFormationSlots(FormationSlotRequest[] slotRequests)
{
// Create formation group for each type requested by the system/manager.
var groups = slotRequests.Select(request => new GroupingRectFormation.Group
{
// Specify custom column count and spacing for each group
ColumnCount = 6,
Spacing = 2,
Type = request.Type,
UnitCount = request.Count
});
// Use GroupingRectFormation to create the segmented formation
// (internally using RectangleFormation)
var slots = GroupingRectFormation.CreatePositions(groups.ToArray());
// Convert slots to the expected type.
return slots.Select(slot => new FormationSlot(slot.type, slot.position)).ToArray();
}Last updated