001package com.fs.starfarer.api.impl.campaign.enc;
002
003import java.util.Random;
004
005import org.lwjgl.util.vector.Vector2f;
006
007import com.fs.starfarer.api.campaign.CampaignFleetAPI;
008import com.fs.starfarer.api.campaign.FleetAssignment;
009import com.fs.starfarer.api.campaign.SectorEntityToken;
010import com.fs.starfarer.api.campaign.StarSystemAPI;
011import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
012import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
013import com.fs.starfarer.api.impl.campaign.procgen.themes.RuinsFleetRouteManager;
014import com.fs.starfarer.api.impl.campaign.procgen.themes.ScavengerPiracyScript;
015import com.fs.starfarer.api.util.Misc;
016import com.fs.starfarer.api.util.WeightedRandomPicker;
017
018public class SlipstreamScavengerEPEC extends BaseEPEncounterCreator {
019        
020        @Override
021        public void createEncounter(EncounterManager manager, EncounterPoint point) {
022                Random random = manager.getRandom();
023                boolean pirate = random.nextBoolean();
024                pirate = true; // seems like legit scavengers wouldn't spend too much time waiting in ambush
025                
026                WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>(random);
027                picker.add(FleetTypes.SCAVENGER_SMALL, 5f);
028                picker.add(FleetTypes.SCAVENGER_MEDIUM, 15f);
029                picker.add(FleetTypes.SCAVENGER_LARGE, 10f);
030                String type = picker.pick();
031                
032                CampaignFleetAPI fleet = RuinsFleetRouteManager.createScavenger(type, point.getLocInHyper(), 
033                                                                                                                                                null, null, pirate, random);
034                
035                if (fleet != null) {
036                        point.where.addEntity(fleet);
037                        fleet.setLocation(point.loc.x, point.loc.y);
038                        Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
039                        SectorEntityToken e = point.where.createToken(spawnLoc);
040                        fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 30f * random.nextFloat(), "waiting");
041                        fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
042                        fleet.addScript(new MissionFleetAutoDespawn(null, fleet));
043                        fleet.addScript(new ScavengerPiracyScript(fleet));
044                }
045        }
046
047        public float getFrequencyForPoint(EncounterManager manager, EncounterPoint point) {
048                if (!EncounterManager.EP_TYPE_SLIPSTREAM.equals(point.type)) return 0f;
049                
050                float f = getProximityFactor(point.getLocInHyper());
051                if (f > 0) {
052                        f = 0.25f + 0.75f * f;
053                }
054                return 10f * f;
055        }
056        
057        
058        public static float getProximityFactor(Vector2f locInHyper) {
059                StarSystemAPI ruins = getClosestSystemWithRuins(locInHyper);
060                float f = getRuinsProximityFactor(ruins, locInHyper);
061                return f;
062        }
063        
064        
065}
066
067
068
069
070