Пример #1
0
        public override void Update()
        {
            var basePosition          = unit.UnitTeam.baseBuilding.transform.position;
            var priorityGatherRadius  = unit.CurrentJob.priorityGatherRadius;
            var possibleResourceNodes = Map.Instance.GetResourceNodesOfType(resourceType);

            if (possibleResourceNodes.Count == 0)
            {
                StopState();
                return;
            }

            var nodeDistances     = possibleResourceNodes.ToDictionary(node => node, node => Vector3.Distance(node.transform.position, basePosition));
            var nodesToChooseFrom = nodeDistances.Where(n => n.Value <= priorityGatherRadius).Select(k => k.Key).ToList();

            if (nodesToChooseFrom.Count == 0)
            {
                resourceNode = nodeDistances.OrderBy(n => n.Value).First().Key;
            }
            else
            {
                resourceNode = nodesToChooseFrom[Random.Range(0, nodesToChooseFrom.Count)];
            }
            gatherNodeState = new GatherNodeState(unit, resourceNode);
            gatherNodeState.OnStateFinish += GatherNodeStateFinishedHandler;
            PushState(gatherNodeState);
        }
Пример #2
0
        public void GatherResourceNode(ResourceNode node)
        {
            if (node == null)
            {
                return;
            }
            StopCurrentState();
            var gatherState = new GatherNodeState(unit, node);

            PushNewStateHandler(gatherState);
        }
Пример #3
0
 private void GatherNodeStateFinishedHandler(State state)
 {
     gatherNodeState = null;
 }