public override AbstractPreMenu AskPreDayMenu(ref AbstractDay day) { var choices = preMenu.availableChoices.FindAll(x => x.count > 0 && x.ShowBeforeDay()); if (choices.Count == 0) { Console.WriteLine("Skipping Pre Day menu because no options available"); return(preMenu); } int selectedChoice = -1; Console.WriteLine("\n////////////Pre day menu////////////////"); Console.WriteLine("This menu allows you to choose some options before starting the planning"); var taskCount = (day.tasks != null) ? day.tasks.Count : 0; ConsoleRoadmap r = new ConsoleRoadmap(this); r.ShowRoadmap(); int curIndex = 1; foreach (var choice in choices) { if (choice.IsSelectable(out string msg)) { Console.WriteLine(curIndex + ")\t" + choice.GetName() + $" {choice.count}/{choice.maxCount}"); } else { Console.WriteLine("[Locked]\t" + choice.GetName()); Console.WriteLine("\t\t|\t" + msg); } curIndex++; } int quitChoice = curIndex; Console.WriteLine(quitChoice + ")\tClose the menu and continue"); selectedChoice = SecureIntInput(1, curIndex, "Choose your option before starting the day"); if (selectedChoice != quitChoice) { Console.WriteLine("Using choice ..."); if (choices[selectedChoice - 1].IsSelectable(out string errorMsg)) { choices[selectedChoice - 1].Use(ref day, null); AskPreDayMenu(ref day); } else { Console.WriteLine("This feature cannot be used at the moment, try something else :\n" + errorMsg); AskPreDayMenu(ref day); } } return(preMenu); }
public override AbstractPreMenu AskPreTaskMenu(ref AbstractDay d, AbstractTask t) { var choices = preMenu.availableChoices.FindAll(x => x.count > 0 && x.ShowBeforeTask()); if (choices.Count == 0) { Console.WriteLine("Skipping Pre Day menu because no options available"); return(preMenu); } int selectedChoice = -1; Console.WriteLine("\n//////////////Pre Task menu////////////////"); Console.WriteLine("This menu allows you to choose some options before starting the planning"); int curIndex = 1; ConsoleRoadmap r = new ConsoleRoadmap(this); r.ShowRoadmapDay(d); foreach (var choice in choices) { if (choice.IsSelectable(out string msg)) { Console.WriteLine(curIndex + ")\t" + choice.GetName() + $" {choice.count}/{choice.maxCount}"); } else { Console.WriteLine("[Locked]\t" + choice.GetName()); Console.WriteLine("\t|\t" + msg); } curIndex++; } int quitChoice = curIndex; Console.WriteLine(quitChoice + ")\tClose the menu and start task"); selectedChoice = SecureIntInput(1, curIndex, "Choose your option before starting the task : " + t.Infos.name); if (selectedChoice != quitChoice) { Console.WriteLine("Using choice ..."); choices[selectedChoice - 1].Use(ref d, t); AskPreTaskMenu(ref d, t); } return(preMenu); }