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); }
public void GatherResourceNode(ResourceNode node) { if (node == null) { return; } StopCurrentState(); var gatherState = new GatherNodeState(unit, node); PushNewStateHandler(gatherState); }
private void GatherNodeStateFinishedHandler(State state) { gatherNodeState = null; }