/// <summary> /// The initial generation of the dictionary of dialog replacement based on the currently randomized item locations /// </summary> /// <returns>A Dictionary containing keys of locationdialogID and values of replacementdialogID</returns> /// public static Dictionary <string, string> GenerateDialogMappingforItems() { Dictionary <string, string> dialogmap = new Dictionary <string, string>(); Dictionary <EItems, string> itemToDialogIDMap = GetDialogIDtoItems(); Dictionary <LocationRO, RandoItemRO> current = RandomizerStateManager.Instance.CurrentLocationToItemMapping; /* OLD * foreach (KeyValuePair<LocationRO, RandoItemRO> KVP in current) * { * Console.WriteLine($"Dialog mapping -- {KVP.Key.PrettyLocationName}"); * EItems LocationChecked = (EItems)Enum.Parse(typeof(EItems), KVP.Key.PrettyLocationName); * RandoItemRO ItemActuallyFound = KVP.Value; * * if (ItemtoDialogIDMap.ContainsKey(LocationChecked) && ItemtoDialogIDMap.ContainsKey(ItemActuallyFound.Item)) * { * dialogmap.Add(ItemtoDialogIDMap[LocationChecked], ItemtoDialogIDMap[ItemActuallyFound.Item]); * Console.WriteLine($"We mapped item dialog {ItemtoDialogIDMap[ItemActuallyFound.Item]} to the location {ItemtoDialogIDMap[LocationChecked]}"); * } * } */ //I am gonna keep the mappings limited to basic locations since the advanced locations are handled by another process. foreach (LocationRO location in RandomizerConstants.GetRandoLocationList()) { Console.WriteLine($"Dialog mapping -- {location.PrettyLocationName}"); EItems locationChecked = (EItems)Enum.Parse(typeof(EItems), location.PrettyLocationName); RandoItemRO itemActuallyFound = current[location]; if (itemToDialogIDMap.ContainsKey(locationChecked) && itemToDialogIDMap.ContainsKey(itemActuallyFound.Item)) { dialogmap.Add(itemToDialogIDMap[locationChecked], itemToDialogIDMap[itemActuallyFound.Item]); Console.WriteLine($"We mapped item dialog {itemToDialogIDMap[itemActuallyFound.Item]} to the location {itemToDialogIDMap[locationChecked]}"); } } return(dialogmap); }
/// <summary> /// Parses the mappings string from the seed to create the mappings collection for this seed. /// </summary> /// <param name="seed">Seed whos mappings we wish to parse.</param> /// <returns>Collection of mappings.</returns> public static Dictionary <LocationRO, RandoItemRO> ParseLocationToItemMappings(SeedRO seed) { //Prep Dictionary <LocationRO, RandoItemRO> mappings = new Dictionary <LocationRO, RandoItemRO>(); Dictionary <string, LocationRO> officialLocations = new Dictionary <string, LocationRO>(); Dictionary <string, RandoItemRO> officialItems = new Dictionary <string, RandoItemRO>(); //Fill official collections for easy searching foreach (LocationRO location in RandomizerConstants.GetRandoLocationList()) { officialLocations.Add(location.LocationName, location); } foreach (RandoItemRO item in RandomizerConstants.GetRandoItemList()) { officialItems.Add(item.Name, item); } foreach (RandoItemRO item in RandomizerConstants.GetNotesList()) { officialItems.Add(item.Name, item); } //loading for advanced seeds if (seed.Settings[SettingType.Difficulty].Equals(SettingValue.Advanced)) { //locations foreach (LocationRO location in RandomizerConstants.GetAdvancedRandoLocationList()) { officialLocations.Add(location.LocationName, location); } //items foreach (RandoItemRO item in RandomizerConstants.GetAdvancedRandoItemList()) { officialItems.Add(item.Name, item); } } //Split up all the mappings string[] mappingsArr = seed.MappingInfo.Split(','); foreach (string mappingStr in mappingsArr) { //Split off the location and item string string[] mappingArr = mappingStr.Split('~'); LocationRO location = null; RandoItemRO item = new RandoItemRO(); //Get the LocationRO and RandoItemRO from the list of known items if (officialLocations.ContainsKey(mappingArr[0])) { location = officialLocations[mappingArr[0]]; } else { //If for some reason something that could not be mapped to an official location, let's fail for now. throw new RandomizerException($"Location named '{mappingArr[0]}' could not be located in collection of official locations."); } if (officialItems.ContainsKey(mappingArr[1])) { item = officialItems[mappingArr[1]]; } else { //If for some reason something that could not be mapped to an official location, let's fail for now. throw new RandomizerException($"Item named '{mappingArr[1]}' could not be located in collection of official items."); } //We get here, then we are good. Save off this mapping and move on. mappings.Add(location, item); } Console.WriteLine("Mapping parsed successfully!"); return(mappings); }