public int currentActionKey = 0; // Key used to access the sequential action's dictionary public void SetupSequentialAction(StaffAIAction action) { if (action.actionType == StaffAIAction.ActionType.sequence) { actions = action.actions; DoNext(); } }
public void TryNextAction() { if (!performingAction && queuedActions.Count > 0) { performingAction = true; currentAction = queuedActions.Dequeue(); pathfinding.ChangeStatus(StaffPathfinding.StaffAction.performingJobAction); pathfinding.SetupSequentialAction(currentAction); } }
IEnumerator TryAgain(StaffAIAction action) { yield return(new WaitForSecondsRealtime(.5f)); if (!(currentTry + 1 > maxNumberOfTries)) { currentTry++; TryToAssignStaff(); } else { currentTry = 0; CancelAction(action); } }
public void TryToAssignStaff() { if (queuedActions.Count > 0) { StaffAIAction toAssign = queuedActions.Dequeue(); switch (toAssign.preferredJob) { case Dispensary.JobType.StoreBudtender: Staff staff = GetStoreBudtender(); //print(staff.parentStaff.staffName); if (staff != null) { staff.AssignAction(toAssign); } else { StartCoroutine(TryAgain(toAssign)); } break; } } }
public void CancelAction(StaffAIAction action) { action.CancelAction(); }
public void AddActionToQueue(StaffAIAction newAction) { queuedActions.Enqueue(newAction); TryToAssignStaff(); }
public void AssignAction(StaffAIAction action) { action.staff = this; queuedActions.Enqueue(action); TryNextAction(); }