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