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 ColdConditionGenerator 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() + 2; 018 float veryIndex = context.starData.getHabZoneStart() + 4; 019 float eitherIndex = context.starData.getHabZoneStart() + 3; 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.COLD); 030 boolean hasVery = conditionsSoFar.contains(Conditions.VERY_COLD); 031 032 033 // if there's a baked-in "very cold" condition, don't downgrade it to "cold" 034 if (matchNormal && !hasVery && !hasNormal && 035 PlanetConditionGenerator.preconditionsMet(Conditions.COLD, conditionsSoFar)) { 036 conditionsSoFar.add(Conditions.COLD); 037 return; 038 } 039 040 // can, howeved, upgrade a "cold" to a "very cold" provided preconditions are met 041 // (i.e. can't upgrade a tundra to "very cold" because "very cold" requires not habitable) 042 if (matchVery && !hasVery && 043 PlanetConditionGenerator.preconditionsMet(Conditions.VERY_COLD, conditionsSoFar)) { 044 conditionsSoFar.remove(Conditions.COLD); 045 conditionsSoFar.add(Conditions.VERY_COLD); 046 return; 047 } 048 } 049 050}