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 GravityConditionGenerator implements ConditionGenerator { 011 012 public void addConditions(Set<String> conditionsSoFar, GenContext context, PlanetAPI planet) { 013 014 if (conditionsSoFar.contains(Conditions.LOW_GRAVITY)) return; 015 if (conditionsSoFar.contains(Conditions.HIGH_GRAVITY)) return; 016 017 float radius = planet.getRadius(); 018 019 float min = StarSystemGenerator.MIN_MOON_RADIUS; 020 float max = 250f; 021 022 if (radius < min) radius = min; 023 if (radius > max) radius = max; 024 025 if (radius < 100 && PlanetConditionGenerator.preconditionsMet(Conditions.LOW_GRAVITY, conditionsSoFar)) { 026 float range = 100 - min; 027 float chance = 0f; 028 if (range > 0) { 029 chance = 0.2f + 0.8f * ((100f - radius) / range); 030 } 031 if (StarSystemGenerator.random.nextFloat() < chance) { 032 conditionsSoFar.add(Conditions.LOW_GRAVITY); 033 } 034 return; 035 } 036 037 if (radius > 140 && PlanetConditionGenerator.preconditionsMet(Conditions.HIGH_GRAVITY, conditionsSoFar)) { 038 float range = max - 140; 039 float chance = 0f; 040 if (range > 0) { 041 chance = 0.1f + 0.9f * (1f - ((max - radius) / range)); 042 } 043 if (StarSystemGenerator.random.nextFloat() < chance) { 044 conditionsSoFar.add(Conditions.HIGH_GRAVITY); 045 } 046 return; 047 } 048 049 050 051 052 053 054 } 055 056}