private void Init() { List <ModuleInfo> filteredSetModules = new List <ModuleInfo>(); if (schemeColor == ObjectColor.green) { var moduleList = resource.ModuleTemplates.ModulesWithSet(workshop); foreach (var m in moduleList) { foreach (var sm in m.allowedSets) { var s = resource.Sets.Set(sm.Trim()); if (s != null) { if (s.UnlockLevel <= level && s.Workshop == workshop) { filteredSetModules.Add(m); } } } } if (filteredSetModules.Count == 0) { schemeColor = ObjectColor.yellow; } } //generate green module if (schemeColor == ObjectColor.green) { var targetModule = filteredSetModules[Rand.Int(0, filteredSetModules.Count - 1)]; List <ModuleSetData> sets = new List <ModuleSetData>(); foreach (var s in targetModule.allowedSets) { var set = resource.Sets.Set(s); if (set.UnlockLevel <= level && set.Workshop == workshop) { sets.Add(set); } } var defaultSet = sets.Where(s => s.IsDefault).FirstOrDefault(); if (defaultSet == null) { throw new Exception("default set not found for module " + targetModule.Id); } List <ModuleSetData> lstForArr = new List <ModuleSetData>(); foreach (var s in sets) { if (!s.IsDefault) { lstForArr.Add(s); } } lstForArr.Add(defaultSet); float[] weights = new float[lstForArr.Count]; float acc = 0f; for (int i = 0; i < weights.Length - 1; i++) { weights[i] = lstForArr[i].DropProb; acc += weights[i]; } weights[weights.Length - 1] = 1f - acc; int index = Rand.RandomIndex(weights); ModuleSetData finalSet = lstForArr[index]; templateId = targetModule.Id; set = finalSet.Id; } else { //generate non green module var module = resource.ModuleTemplates.RandomModule(workshop); templateId = module.Id; set = string.Empty; } this.SetCraftOreCount(this.schemeColor); var moduleData = resource.ModuleTemplates.Module(templateId); if (moduleData != null && resource.CraftingMaterials.Contains(level, moduleData.Type)) { craftingMaterials = resource.CraftingMaterials.GetCraftingMaterials(level, moduleData.Type, schemeColor); } else { this.craftingMaterials = resource.Materials.GenOres(2, this.craftOreCount.GetCount()); } }
public GeneratedSetInfo GenerateSet(int level, Workshop workshop, ShipModelSlotType slotType) { List <ModuleInfo> filteredModules = new List <ModuleInfo>(); var moduleList = resources.ModuleTemplates.ModulesWithSet(workshop, slotType); foreach (var module in moduleList) { foreach (var moduleSet in module.allowedSets) { var setResource = resources.Sets.Set(moduleSet.Trim()); if (setResource.UnlockLevel <= level && setResource.Workshop == workshop) { filteredModules.Add(module); } } } if (filteredModules.Count == 0) { return(new GeneratedSetInfo { setId = string.Empty, moduleTemplateId = string.Empty }); } var targetModule = filteredModules[Rand.Int(0, filteredModules.Count - 1)]; List <ModuleSetData> setList = new List <ModuleSetData>(); foreach (var set in targetModule.allowedSets) { var checkedSet = resources.Sets.Set(set); if (checkedSet.UnlockLevel <= level && checkedSet.Workshop == workshop) { setList.Add(checkedSet); } } var defaultSet = setList.Where(set => set.IsDefault).FirstOrDefault(); if (defaultSet == null) { return(new GeneratedSetInfo { setId = string.Empty, moduleTemplateId = string.Empty }); } List <ModuleSetData> tempList = new List <ModuleSetData>(); foreach (var set in setList) { if (false == set.IsDefault) { tempList.Add(set); } } tempList.Add(defaultSet); float[] weights = new float[tempList.Count]; float acc = 0f; for (int i = 0; i < weights.Length - 1; i++) { weights[i] = tempList[i].DropProb; acc += weights[i]; } weights[weights.Length - 1] = Mathf.ClampLess(1f - acc, 0f); int index = Rand.RandomIndex(weights); ModuleSetData finalSetModule = tempList[index]; return(new GeneratedSetInfo { setId = finalSetModule.Id, moduleTemplateId = targetModule.Id }); }