001package com.fs.starfarer.api.impl.campaign.missions.hub;
002
003import java.util.HashSet;
004import java.util.List;
005import java.util.Set;
006
007import com.fs.starfarer.api.EveryFrameScript;
008import com.fs.starfarer.api.Global;
009import com.fs.starfarer.api.campaign.CampaignFleetAPI;
010import com.fs.starfarer.api.campaign.FleetAssignment;
011import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
012import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
013import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
014import com.fs.starfarer.api.util.Misc;
015
016public class MissionFleetStopPursuingPlayer implements EveryFrameScript {
017
018        protected CampaignFleetAPI fleet;
019        protected BaseHubMission mission;
020        protected Set<Object> stages = new HashSet<Object>();
021        protected boolean done = false;
022        
023        
024        public MissionFleetStopPursuingPlayer(CampaignFleetAPI fleet, BaseHubMission mission, List<Object> stages) {
025                this.mission = mission;
026                this.fleet = fleet;
027                this.stages.addAll(stages);
028        }
029        
030        public void advance(float amount) {
031                if (done) return;
032                Object stage = mission.getCurrentStage();
033                
034                if (!stages.contains(stage)) {
035                        if (fleet.getAI() instanceof ModularFleetAIAPI) {
036                                ModularFleetAIAPI ai = (ModularFleetAIAPI) fleet.getAI();
037                                if (ai.getAssignmentModule() != null) {
038                                        FleetAssignmentDataAPI curr = ai.getAssignmentModule().getCurrentAssignment();
039                                        if (curr != null && curr.getTarget() == Global.getSector().getPlayerFleet() &&
040                                                        (curr.getAssignment() == FleetAssignment.INTERCEPT ||
041                                                        curr.getAssignment() == FleetAssignment.FOLLOW)) {
042                                                ai.getAssignmentModule().removeFirstAssignment();
043                                        }
044                                }
045                        }
046                        if (fleet.getAI() != null && fleet.getAI().getAssignmentsCopy().isEmpty()) {
047                                Misc.giveStandardReturnToSourceAssignments(fleet, true);
048                        }
049                        Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(), MemFlags.MEMORY_KEY_MAKE_HOSTILE,
050                                        mission.getReason(), false, -1f);
051                        done = true;
052                }
053
054        }
055        
056        public boolean isDone() {
057                return done;
058        }
059
060        public boolean runWhilePaused() {
061                return false;
062        }
063        
064
065}
066
067
068
069
070
071
072
073
074
075