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