public static ClusterController StartBuildingCluster(MapPresentation presentation, Vector2Int startingPosition) { if (presentation == null) { throw new ArgumentNullException(nameof(presentation)); } // Instantiate cluster. ClusterController controller = MakeEmptyCluster(); // Start building cluster. controller.StartBuilding(presentation, startingPosition); return(controller); }
// Static. public static async Task <LayoutCore> CreateLayoutAsync( MapPresentation map, float regionRadius, float bodyRadius, float toleranceRadius, CancellationToken cancellation) { if (map == null) { throw new ArgumentNullException(nameof(map)); } var layout = new LayoutCore(); await layout.ReadNodes(map, cancellation); await layout.BuildNodeGraph(regionRadius, bodyRadius, toleranceRadius, cancellation); //await layout.BuildRegions(cancellation); return(layout); }
// Support method. private UnitCore BuildUnit(System.Random random, Vector2Int position, MapPresentation map, ref int added) { // Initialize unit. UnitCore unit; if (UnitTemplates == null || UnitTemplates.Length == 0) { unit = new UnitCore(); } else { unit = UnitTemplates[random.Next(UnitTemplates.Length)].Clone(); } // Place unit. unit.Name = $"Unit {added++}"; Vector3 point = new Vector3(position.x, map[position].Height, position.y); unit.Move(new MovementAction(point - unit.Body.Position, adjustVelocity: false)); return(unit); }
// Building methods. private async Task ReadNodes(MapPresentation map, CancellationToken cancellation) { if (map is null) { throw new ArgumentNullException(nameof(map)); } cancellation.ThrowIfCancellationRequested(); // Place nodes. await Task.Run(() => { nodes = new LayoutNode[map.Size.x, map.Size.y]; foreach (var position in Enumerables.InRange2(NodeCount)) { if (map[position].Type != MapNode.NodeType.Common) { continue; } nodes[position.x, position.y] = new LayoutNode(position); } cancellation.ThrowIfCancellationRequested(); }); }