001package com.fs.starfarer.api.impl.campaign.procgen;
002
003import java.util.Set;
004
005import com.fs.starfarer.api.campaign.PlanetAPI;
006import com.fs.starfarer.api.impl.campaign.ids.Conditions;
007import com.fs.starfarer.api.impl.campaign.procgen.PlanetConditionGenerator.ConditionGenerator;
008import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator.GenContext;
009
010public class LightConditionGenerator implements ConditionGenerator {
011        
012        public void addConditions(Set<String> conditionsSoFar, GenContext context, PlanetAPI planet) {
013
014                int orbitIndex = context.orbitIndex;
015                if (context.parent != null) orbitIndex = context.parentOrbitIndex;
016                
017                float hab = context.starData.getHabZoneStart();
018                
019                // want low-light conditions in neutron star systems
020//              if (context.starData.getId().equals(StarTypes.NEUTRON_STAR)) {
021//                      hab = 0;
022//              }
023                
024                float normalIndex = hab + 4;
025                float veryIndex = hab + 8;
026                float eitherIndex = hab + 5;
027                
028                boolean matchVery = orbitIndex >= veryIndex;
029                boolean matchNormal = !matchVery && orbitIndex >= normalIndex;
030                boolean matchEither = orbitIndex == eitherIndex;
031                if (matchEither) {
032                        matchNormal = StarSystemGenerator.random.nextFloat() < 0.5f;
033                        matchVery = !matchNormal;
034                }
035
036                boolean hasNormal = conditionsSoFar.contains(Conditions.POOR_LIGHT);
037                boolean hasVery = conditionsSoFar.contains(Conditions.DARK);
038                
039                
040                // if there's a baked-in "darkness" condition, don't downgrade it to "poor light"
041                if (matchNormal && !hasVery && !hasNormal &&
042                                 PlanetConditionGenerator.preconditionsMet(Conditions.POOR_LIGHT, conditionsSoFar)) {
043                        conditionsSoFar.add(Conditions.POOR_LIGHT);
044                        return;
045                }
046                
047                // can, howeved, upgrade a "poor light" to a "darkness" provided preconditions are met
048                if (matchVery && !hasVery && 
049                                PlanetConditionGenerator.preconditionsMet(Conditions.DARK, conditionsSoFar)) {
050                        conditionsSoFar.remove(Conditions.POOR_LIGHT);
051                        conditionsSoFar.add(Conditions.DARK);
052                        return;
053                }
054        }
055
056}