예제 #1
0
        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());
            }
        }
예제 #2
0
        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
            });
        }