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}