public static void LogOrders() { ArrayList recipes = OrderUtil.GetOrders(ObjectUtil.GetFlowController()); foreach (var t in recipes) { Logger.Log($"Order: {t}"); } }
public bool Update() { // Check if we have sequential actions that are no longer idle foreach (ISequentialAction sequentialAction in idleActionIngredients.Keys) { if (!sequentialAction.IsIdle()) { Logger.Log("Sequential action no longer idle"); // Sequential action is not idle anymore, resume it as soon as possible if (currentAction is IPausableAction pausableAction) { if (pausableAction.Pause()) { Logger.Log("Pausing current action"); // Action can be paused pausedActionIngredients.Add(pausableAction, currentIngredient); Logger.Log("Resuming non-idle sequential action after PausableAction"); currentIngredient = idleActionIngredients[sequentialAction]; currentAction = sequentialAction; idleActionIngredients.Remove(sequentialAction); state = 1; } else { Logger.Log("Can not currently pause PausableAction"); } } else if (currentAction == null) { Logger.Log("Resuming non-idle sequential action after null action"); currentIngredient = idleActionIngredients[sequentialAction]; currentAction = sequentialAction; idleActionIngredients.Remove(sequentialAction); state = 1; } else { Logger.Log("Current action is not PausableAction"); } break; } } switch (state) { case 0: // If we have any actions that are paused, resume one of them foreach (Action pausedAction in pausedActionIngredients.Keys) { Logger.Log("Found action that was paused, resuming instead of getting new ingredient"); currentIngredient = pausedActionIngredients[pausedAction]; currentAction = pausedAction; pausedActionIngredients.Remove(pausedAction); state = 1; return(false); } // Make a list of ingredients that are we do not need to start making List <string> possibleIngredients = new List <string>(orderData.ingredientsDone); // Add the ingredients of the sequential actions possibleIngredients.AddRange(idleActionIngredients.Values); // Query a possible ingredient to start on currentIngredient = OrderUtil.GetRemainingIngredientFromOrder( orderData.orderName, possibleIngredients ); // If no more ingredients to do if (currentIngredient.Equals("")) { // If we have no idle actions remaining if (idleActionIngredients.Count == 0) { Logger.Log("No new ingredients"); // No ingredients left, we are done state = 2; currentAction = new DeliverPlateAction(player, orderData.plate); return(false); } state = -1; return(false); } Logger.Log($"New ingredient found: {currentIngredient}"); state = 1; currentAction = new HandleIngredientAction(player, currentIngredient, orderData); return(false); case 1: // If we have a sequential action that is idle if (currentAction is ISequentialAction sequentialAction) { if (sequentialAction.IsIdle()) { Logger.Log("Sequential action is idle"); List <string> ingredientsDone = new List <string>(orderData.ingredientsDone); ingredientsDone.Add(currentIngredient); string newCurrentIngredient = OrderUtil.GetRemainingIngredientFromOrder(orderData.orderName, ingredientsDone); // If there are other ingredients to work on in the mean time if (!newCurrentIngredient.Equals("")) { Logger.Log($"Other ingredient found to work on: {newCurrentIngredient}"); // Store this action and go work on other ingredient idleActionIngredients.Add(sequentialAction, currentIngredient); currentIngredient = newCurrentIngredient; currentAction = new HandleIngredientAction(player, newCurrentIngredient, orderData); } } } if (currentAction.Update()) { currentAction.End(); currentAction = null; state = 0; orderData.ingredientsDone.Add(currentIngredient); } return(false); case 2: if (currentAction.Update()) { currentAction.End(); return(true); } return(false); default: return(false); } }