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