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.Factions;
012import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel;
013import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel;
014import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission;
015import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn;
016import com.fs.starfarer.api.util.Misc;
017
018public class SlipstreamMercenaryEPEC extends BaseEPEncounterCreator {
019        
020        @Override
021        public void createEncounter(EncounterManager manager, EncounterPoint point) {
022                Random random = manager.getRandom();
023                
024                float f = getProximityFactor(point.getLocInHyper());
025                
026                int difficulty = 0;
027                difficulty += (int) Math.round(f * 5f);
028                difficulty += random.nextInt(6);
029                
030                FleetCreatorMission m = new FleetCreatorMission(random);
031                m.beginFleet();
032                
033                Vector2f loc = point.getLocInHyper();
034                m.createQualityFleet(difficulty, Factions.MERCENARY, loc);
035                m.triggerFleetAllowLongPursuit();
036                m.triggerSetFleetFaction(Factions.INDEPENDENT);
037                m.triggerMakeNoRepImpact();
038                m.triggerFleetSetAllWeapons();
039                
040                CampaignFleetAPI fleet = m.createFleet();
041                if (fleet != null) {
042                        point.where.addEntity(fleet);
043                        fleet.setLocation(point.loc.x, point.loc.y);
044                        Vector2f spawnLoc = Misc.getPointWithinRadius(point.loc, 1000f);
045                        SectorEntityToken e = point.where.createToken(spawnLoc);
046                        fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, e, 30f * random.nextFloat(), "laying in wait");
047                        fleet.removeScriptsOfClass(MissionFleetAutoDespawn.class);
048                        fleet.addScript(new MissionFleetAutoDespawn(null, fleet));
049                }
050        }
051
052        public float getFrequencyForPoint(EncounterManager manager, EncounterPoint point) {
053                if (!EncounterManager.EP_TYPE_SLIPSTREAM.equals(point.type)) return 0f;
054                
055                float f = getProximityFactor(point.getLocInHyper());
056                if (f > 0) {
057                        f = 0.25f + 0.75f * f;
058                }
059                return 10f * f;
060        }
061        
062        public static float getProximityFactor(Vector2f locInHyper) {
063                LuddicPathBaseIntel intel = getClosestLuddicPathBase(locInHyper);
064                float f1 = getLuddicPathBaseProximityFactor(intel, locInHyper);
065                
066                PirateBaseIntel intel2 = getClosestPirateBase(locInHyper);
067                float f2 = getPirateBaseProximityFactor(intel2, locInHyper);
068                
069                float result = Math.max(f1, f2);
070                
071                StarSystemAPI ruins = getClosestSystemWithRuins(locInHyper);
072                float f3 = getRuinsProximityFactor(ruins, locInHyper);
073                f3 *= 0.25f;
074                result = Math.max(result, f3);
075                
076                return result;
077        }
078        
079}
080
081
082
083
084