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