private void LoadLogic(string logicString) { logicString = Migrator.ApplyMigrations(logicString); var logic = LogicFile.FromJson(logicString); try { var itemsById = logic.Logic.ToDictionary(item => item.Id); VerifyLogic(logic, itemsById); _logic = logic; _itemsById = itemsById; _singleItemSelectorForm.SetLogicFile(_logic); _multiItemSelectorForm.SetLogicFile(_logic); nItem.Maximum = _logic.Logic.Count - 1; SetIndex((int)nItem.Value); } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public ToggleTricksForm(LogicMode logicMode, string userLogicFilename, IEnumerable <string> tricksEnabled) { InitializeComponent(); Result = tricksEnabled.ToHashSet(); LogicFile = LogicUtils.ReadRulesetFromResources(logicMode, userLogicFilename); Write_Tricks(); }
public static LogicFile ReadRulesetFromResources(LogicMode mode, string userLogicFileName) { if (mode == LogicMode.Casual) { return(LogicFile.FromJson(Properties.Resources.REQ_CASUAL)); } else if (mode == LogicMode.Glitched) { return(LogicFile.FromJson(Properties.Resources.REQ_GLITCH)); } else if (mode == LogicMode.UserLogic) { using (StreamReader Req = new StreamReader(File.OpenRead(userLogicFileName))) { var logic = Req.ReadToEnd(); var logicConfiguration = Configuration.FromJson(logic); if (logicConfiguration.GameplaySettings != null) { logic = logicConfiguration.GameplaySettings.Logic; } return(LogicFile.FromJson(logic)); } } return(null); }
public LogicItemSelectorForm(LogicFile logic, bool checkboxes) { _logic = logic; InitializeComponent(); SetHighlightedItems(null); SetSelectedItems(null); UpdateItems(); this.ActiveControl = textBoxFilter; lItems.CheckBoxes = checkboxes; }
private void Reset() { _logic = new LogicFile { Logic = Enum.GetValues <Item>().Where(item => item >= 0).Select(item => new JsonFormatLogicItem { Id = item.ToString(), RequiredItems = new List <string>(), ConditionalItems = new List <List <string> >(), TimeAvailable = TimeOfDay.None, TimeNeeded = TimeOfDay.None, IsTrick = false, TrickTooltip = string.Empty, }).ToList(), }; _singleItemSelectorForm?.SetLogicFile(_logic); _multiItemSelectorForm?.SetLogicFile(_logic); _itemsById = _logic.Logic.ToDictionary(item => item.Id); }
/// <summary> /// Populates the item list using the lines from a logic file, processes them 4 lines per item. /// </summary> /// <param name="data">The lines from a logic file</param> public static ItemList PopulateItemListFromLogicData(LogicFile logicFile) { var itemList = new ItemList(); if (logicFile.Version != Migrator.CurrentVersion) { throw new Exception("Logic file is out of date or invalid. Open it in the Logic Editor to bring it up to date."); } var logic = logicFile.Logic; for (var i = 0; i < logic.Count; i++) { var logicItem = logic[i]; itemList.Add(new ItemObject { ID = i, Name = logicItem.Id, TimeNeeded = (int)logicItem.TimeNeeded, TimeAvailable = logicItem.TimeAvailable > 0 ? (int)logicItem.TimeAvailable : 63, TimeSetup = (int)logicItem.TimeSetup, IsTrick = logicItem.IsTrick, TrickTooltip = logicItem.TrickTooltip, DependsOnItems = logicItem.RequiredItems.Select(item => (Item)logic.FindIndex(li => li.Id == item)).ToList(), Conditionals = logicItem.ConditionalItems.Select(c => c.Select(item => (Item)logic.FindIndex(li => li.Id == item)).ToList()).ToList(), TrickCategory = logicItem.TrickCategory }); } foreach (var io in itemList) { if (io.DependsOnItems.Any(item => itemList[item].IsTrick)) { throw new Exception($"Dependencies of {io.Name} are not valid. Cannot have tricks as Dependencies."); } if (io.Conditionals.Any() && io.Conditionals.All(c => c.Any(item => itemList[item].IsTrick))) { throw new Exception($"Conditionals of {io.Name} are not valid. Must have at least one conditional that isn't a trick."); } } return(itemList); }
private void VerifyLogic(LogicFile logic, Dictionary <string, JsonFormatLogicItem> itemsById) { foreach (var item in _logic.Logic) { foreach (var requiredItem in item.RequiredItems) { if (!_itemsById.ContainsKey(requiredItem)) { throw new Exception($"Item '{requiredItem}' not found."); } } foreach (var conditionals in item.ConditionalItems) { foreach (var conditionalItem in conditionals) { if (!_itemsById.ContainsKey(conditionalItem)) { throw new Exception($"Item '{conditionalItem}' not found."); } } } } }
public static LogicFile ReadRulesetFromResources(LogicMode mode, string userLogicFileName) { if (mode == LogicMode.Casual) { return(LogicFile.FromJson(Properties.Resources.REQ_CASUAL)); } else if (mode == LogicMode.Glitched) { return(LogicFile.FromJson(Properties.Resources.REQ_GLITCH)); } else if (mode == LogicMode.UserLogic) { using (StreamReader Req = new StreamReader(File.OpenRead(userLogicFileName))) { var logic = Req.ReadToEnd(); return(LogicFile.FromJson(logic)); // TODO handle logic within settings file } } return(null); }
public void SetLogicFile(LogicFile logic) { _logic = logic; }