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}