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 HotConditionGenerator 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 normalIndex = context.starData.getHabZoneStart() - 1;
018                float veryIndex = context.starData.getHabZoneStart() - 3;
019                float eitherIndex = context.starData.getHabZoneStart() - 2;
020                
021                boolean matchVery = orbitIndex <= veryIndex;
022                boolean matchNormal = !matchVery && orbitIndex <= normalIndex;
023                boolean matchEither = orbitIndex == eitherIndex;
024                if (matchEither) {
025                        matchNormal = StarSystemGenerator.random.nextFloat() < 0.5f;
026                        matchVery = !matchNormal;
027                }
028
029                boolean hasNormal = conditionsSoFar.contains(Conditions.HOT);
030                boolean hasVery = conditionsSoFar.contains(Conditions.VERY_HOT);
031                
032                
033                // if there's a baked-in "very hot" condition, don't downgrade it to "hot"
034                if (matchNormal && !hasVery && !hasNormal &&
035                                 PlanetConditionGenerator.preconditionsMet(Conditions.HOT, conditionsSoFar)) {
036                        conditionsSoFar.add(Conditions.HOT);
037                        return;
038                }
039                
040                // can, howeved, upgrade a "hot" to a "very hot" provided preconditions are met
041                // (i.e. can't upgrade a desert/arid/jungle to "very hot" because "very hot" requires not habitable)
042                if (matchVery && !hasVery && 
043                                PlanetConditionGenerator.preconditionsMet(Conditions.VERY_HOT, conditionsSoFar)) {
044                        conditionsSoFar.remove(Conditions.HOT);
045                        conditionsSoFar.add(Conditions.VERY_HOT);
046                        return;
047                }
048        }
049
050}