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