001package com.fs.starfarer.api.impl.campaign.procgen.themes; 002 003import java.util.ArrayList; 004import java.util.Collections; 005import java.util.Comparator; 006import java.util.List; 007 008import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator; 009 010public class SectorThemeGenerator { 011 012 public static List<ThemeGenerator> generators = new ArrayList<ThemeGenerator>(); 013 014 static { 015 //generators.add(new SpecialThemeGenerator()); 016 generators.add(new DerelictThemeGenerator()); 017 generators.add(new RemnantThemeGenerator()); 018 generators.add(new RuinsThemeGenerator()); 019 generators.add(new MiscellaneousThemeGenerator()); 020 } 021 022 public static void generate(ThemeGenContext context) { 023 Collections.sort(generators, new Comparator<ThemeGenerator>() { 024 public int compare(ThemeGenerator o1, ThemeGenerator o2) { 025 int result = o1.getOrder() - o2.getOrder(); 026 if (result == 0) return o1.getThemeId().compareTo(o2.getThemeId()); 027 return result; 028 } 029 }); 030 031 float totalWeight = 0f; 032 for (ThemeGenerator g : generators) { 033 totalWeight += g.getWeight(); 034 g.setRandom(StarSystemGenerator.random); 035 } 036 037 for (ThemeGenerator g : generators) { 038 float w = g.getWeight(); 039 040 float f = 0f; 041 if (totalWeight > 0) { 042 f = w / totalWeight; 043 } else { 044 if (w > 0) f = 1f; 045 } 046 //g.setRandom(StarSystemGenerator.random); 047 g.generateForSector(context, f); 048 049 //float used = context.majorThemes.size(); 050 totalWeight -= w; 051 052 } 053 } 054 055 056 057 058}