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);
        }
Пример #2
0
        // 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);
        }
Пример #3
0
        // 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);
        }
Пример #4
0
        // 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();
            });
        }