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}