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.impl.campaign.procgen.themes.BaseAssignmentAI;
010import com.fs.starfarer.api.util.Misc;
011
012public class DistressCallResponsePirateAssignmentAI extends BaseAssignmentAI {
013
014        protected StarSystemAPI system;
015        
016        protected float elapsed = 0f;
017        protected float dur = 30f + (float) Math.random() * 20f;
018        protected boolean contactedPlayer = false;
019
020        protected final JumpPointAPI inner;
021        protected final JumpPointAPI outer;
022        
023        public DistressCallResponsePirateAssignmentAI(CampaignFleetAPI fleet, StarSystemAPI system, JumpPointAPI inner, JumpPointAPI outer) {
024                super();
025                this.fleet = fleet;
026                this.system = system;
027                this.inner = inner;
028                this.outer = outer;
029                
030                giveInitialAssignments();
031        }
032
033        @Override
034        protected void giveInitialAssignments() {
035                if (fleet.isInHyperspace()) {
036                        fleet.addAssignment(FleetAssignment.GO_TO_LOCATION, outer, 20f);
037                }
038                fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, inner, 10f + 5f * (float) Math.random());
039        }
040
041        @Override
042        protected void pickNext() {
043                Misc.giveStandardReturnToSourceAssignments(fleet);
044        }
045
046        @Override
047        public void advance(float amount) {
048                super.advance(amount);
049                
050                if (fleet.isInCurrentLocation() && !contactedPlayer) {
051                        VisibilityLevel level = fleet.getVisibilityLevelOfPlayerFleet();
052                        if (level != VisibilityLevel.NONE && level != VisibilityLevel.SENSOR_CONTACT) {
053                                contactedPlayer = true;
054                                fleet.addAssignmentAtStart(FleetAssignment.INTERCEPT, Global.getSector().getPlayerFleet(), 3f, "approaching your fleet", null);
055                        }
056                }
057        }
058
059}
060
061
062
063
064
065
066
067
068
069
070
071