public static void MakeOptions(TextMeshProUGUI eventDescription, SGEventPanel sgEventPanel, DataManager dataManager, RectTransform optionParent, List <SGEventOption> optionsList) { void set_info(SGEventOption option, string text, UnityAction <SimGameEventOption> action) { Traverse.Create(option).Field <TextMeshProUGUI>("description").Value.SetText(text); option.OptionSelected.RemoveAllListeners(); option.OptionSelected.AddListener(action); } void set_add_part(SGEventOption option, int num) { if (num < used_parts.Count) { var info = used_parts[num]; if (info.used < info.count) { if (info.cbills > 0) { set_info(option, $"Add <color=#20ff20>{info.mechname}</color> for <color=#ffff00>{SimGameState.GetCBillString(info.cbills)}</color>, {info.count - info.used} {(info.count - info.used == 1 ? "part" : "parts") } parts left", arg => { info.used += 1; MakeOptions(eventDescription, sgEventPanel, dataManager, optionParent, optionsList); }); } else { set_info(option, $"Add <color=#20ff20>{info.mechname}</color> {info.count - info.used} {(info.count - info.used == 1 ? "part" : "parts") } left", arg => { info.used += 1; MakeOptions(eventDescription, sgEventPanel, dataManager, optionParent, optionsList); }); } } else { set_info(option, $"<i><color=#a0a0a0>{info.mechname}</color>: <color=#ff4040>All parts used</color></i>", arg => { }); } } else { set_info(option, "---", arg => { }); } } int count = used_parts.Sum(i => i.used); eventDescription.SetText(GetCurrentDescription()); if (count < mechBay.Sim.Constants.Story.DefaultMechPartMax) { if (used_parts.Count > 5) { set_add_part(optionsList[0], 1 + page * 3); set_add_part(optionsList[1], 2 + page * 3); set_add_part(optionsList[2], 3 + page * 3); set_info(optionsList[3], "Next Page >>", arg => { page = (page + 1) % ((used_parts.Count - 1) / 3 + 1); MakeOptions(eventDescription, sgEventPanel, dataManager, optionParent, optionsList); }); } else { set_add_part(optionsList[0], 1); set_add_part(optionsList[1], 2); set_add_part(optionsList[2], 3); set_add_part(optionsList[3], 4); } } else { int funds = mechBay.Sim.Funds; int total = used_parts.Sum(i => i.cbills * i.used); if (funds >= total) { set_info(optionsList[0], "Confirm", arg => { CompeteMech(); sgEventPanel.Dismiss(); }); } else { set_info(optionsList[0], "<color=#ff2020><i>Not enough C-Bills</i></color>", arg => { sgEventPanel.Dismiss(); }); } set_info(optionsList[1], "Cancel", arg => { sgEventPanel.Dismiss(); }); set_info(optionsList[2], "---", arg => { }); set_info(optionsList[3], "---", arg => { }); } }