001package com.fs.starfarer.api.impl.campaign.abilities; 002 003import com.fs.starfarer.api.Global; 004import com.fs.starfarer.api.campaign.CampaignFleetAPI; 005import com.fs.starfarer.api.campaign.FleetAssignment; 006import com.fs.starfarer.api.campaign.JumpPointAPI; 007import com.fs.starfarer.api.campaign.StarSystemAPI; 008import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel; 009import com.fs.starfarer.api.campaign.rules.MemoryAPI; 010import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseAssignmentAI; 011import com.fs.starfarer.api.util.Misc; 012 013public class DistressCallResponseAssignmentAI extends BaseAssignmentAI { 014 015 protected StarSystemAPI system; 016 017 protected float elapsed = 0f; 018 protected float dur = 30f + (float) Math.random() * 20f; 019 protected boolean contactedPlayer = false; 020 021 protected final JumpPointAPI inner; 022 protected final JumpPointAPI outer; 023 024 public DistressCallResponseAssignmentAI(CampaignFleetAPI fleet, StarSystemAPI system, JumpPointAPI inner, JumpPointAPI outer) { 025 super(); 026 this.fleet = fleet; 027 this.system = system; 028 this.inner = inner; 029 this.outer = outer; 030 031 giveInitialAssignments(); 032 } 033 034 @Override 035 protected void giveInitialAssignments() { 036 if (fleet.isInHyperspace()) { 037 fleet.addAssignment(FleetAssignment.GO_TO_LOCATION, outer, 20f); 038 } 039 fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, inner, 10f + 5f * (float) Math.random()); 040 } 041 042 @Override 043 protected void pickNext() { 044 MemoryAPI memory = fleet.getMemoryWithoutUpdate(); 045 memory.unset("$distressResponse"); 046 Misc.makeUnimportant(fleet, "distressResponse"); 047// Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(), MemFlags.ENTITY_MISSION_IMPORTANT, 048// "distressResponse", false, 1000f); 049 Misc.giveStandardReturnToSourceAssignments(fleet); 050 } 051 052 @Override 053 public void advance(float amount) { 054 super.advance(amount); 055 056 if (fleet.isInCurrentLocation() && !contactedPlayer) { 057 VisibilityLevel level = fleet.getVisibilityLevelOfPlayerFleet(); 058 if (level != VisibilityLevel.NONE && level != VisibilityLevel.SENSOR_CONTACT) { 059 contactedPlayer = true; 060 fleet.addAssignmentAtStart(FleetAssignment.INTERCEPT, Global.getSector().getPlayerFleet(), 3f, "approaching your fleet", null); 061 } 062 } 063 } 064 065} 066 067 068 069 070 071 072 073 074 075 076 077