001package com.fs.starfarer.api.impl.campaign.intel.group; 002 003import java.util.Random; 004 005import org.lwjgl.util.vector.Vector2f; 006 007import com.fs.starfarer.api.Global; 008import com.fs.starfarer.api.campaign.CampaignFleetAPI; 009import com.fs.starfarer.api.impl.campaign.ids.FleetTypes; 010import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 011import com.fs.starfarer.api.impl.campaign.intel.PerseanLeagueMembership; 012import com.fs.starfarer.api.impl.campaign.intel.events.EstablishedPolityScript; 013import com.fs.starfarer.api.impl.campaign.missions.FleetCreatorMission; 014import com.fs.starfarer.api.util.IntervalUtil; 015import com.fs.starfarer.api.util.Misc; 016 017 018 019public class PerseanLeaguePunitiveExpedition extends GenericRaidFGI { 020 021 public static final String PLPE_FLEET = "$PLPE_fleet"; 022 023 public static String KEY = "$PLPE_ref"; 024 public static PerseanLeaguePunitiveExpedition get() { 025 return (PerseanLeaguePunitiveExpedition) Global.getSector().getMemoryWithoutUpdate().get(KEY); 026 } 027 028 029 protected IntervalUtil interval = new IntervalUtil(0.1f, 0.3f); 030 031 032 public PerseanLeaguePunitiveExpedition(GenericRaidParams params) { 033 super(params); 034 035 Global.getSector().getMemoryWithoutUpdate().set(KEY, this); 036 } 037 038 @Override 039 protected void notifyEnding() { 040 super.notifyEnding(); 041 042 Global.getSector().getMemoryWithoutUpdate().unset(KEY); 043 } 044 045 @Override 046 protected void notifyEnded() { 047 super.notifyEnded(); 048 } 049 050 051 @Override 052 public String getNoun() { 053 return "punitive expedition"; 054 } 055 056 @Override 057 public String getForcesNoun() { 058 return super.getForcesNoun(); 059 } 060 061 062 @Override 063 public String getBaseName() { 064 return Misc.ucFirst(getFaction().getPersonNamePrefix()) + " " + "Punitive Expedition"; 065 } 066 067 068 @Override 069 protected CampaignFleetAPI createFleet(int size, float damage) { 070 071 Random r = getRandom(); 072 073 Vector2f loc = origin.getLocationInHyperspace(); 074 075 FleetCreatorMission m = new FleetCreatorMission(r); 076 m.setFleetTypeMedium(FleetTypes.TASK_FORCE); // default would be "Patrol", don't want that 077 m.beginFleet(); 078 079 m.createFleet(params.style, size, params.factionId, loc); 080 if (size >= 8) { 081 m.triggerSetFleetDoctrineOther(5, 0); // more capitals in large fleets 082 } 083 m.triggerSetFleetFlag(PLPE_FLEET); 084 085 m.setFleetSource(params.source); 086 setFleetCreatorQualityFromRoute(m); 087 m.setFleetDamageTaken(damage); 088 089 m.triggerSetWarFleet(); 090 m.triggerMakeLowRepImpact(); 091 //m.triggerMakeHostile(); 092 m.triggerMakeAlwaysSpreadTOffHostility(); 093 094 CampaignFleetAPI fleet = m.createFleet(); 095 096 return fleet; 097 } 098 099 @Override 100 public void abort() { 101 if (!isAborted()) { 102 PerseanLeagueMembership.setDefeatedPunEx(true); 103 new EstablishedPolityScript(); 104 105 for (CampaignFleetAPI curr : getFleets()) { 106 curr.getMemoryWithoutUpdate().unset(PLPE_FLEET); 107 } 108 } 109 super.abort(); 110 } 111 112 113 114 @Override 115 public void advance(float amount) { 116 super.advance(amount); 117 118 float days = Misc.getDays(amount); 119 interval.advance(days); 120 121 if (interval.intervalElapsed()) { 122 if (isCurrent(PAYLOAD_ACTION)) { 123 String reason = "PLPunEx"; 124 for (CampaignFleetAPI curr : getFleets()) { 125 Misc.setFlagWithReason(curr.getMemoryWithoutUpdate(), MemFlags.MEMORY_KEY_MAKE_HOSTILE, 126 reason, true, 1f); 127 } 128 129 } 130 } 131 } 132 133 134 135} 136 137 138 139