001package com.fs.starfarer.api.impl.campaign.intel.raid;
002
003import com.fs.starfarer.api.campaign.CampaignFleetAPI;
004import com.fs.starfarer.api.campaign.FleetActionTextProvider;
005import com.fs.starfarer.api.campaign.FleetAssignment;
006import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
007import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
008import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
009import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
010import com.fs.starfarer.api.impl.campaign.procgen.themes.RouteFleetAssignmentAI;
011import com.fs.starfarer.api.util.Misc;
012
013public class RaidAssignmentAI extends RouteFleetAssignmentAI implements FleetActionTextProvider {
014
015        public RaidAssignmentAI(CampaignFleetAPI fleet, RouteData route, FleetActionDelegate delegate) {
016                super(fleet, route, delegate);
017                fleet.getAI().setActionTextProvider(this);
018        }
019        
020        @Override
021        public void advance(float amount) {
022                super.advance(amount, false);
023                
024                RouteSegment curr = route.getCurrent();
025                //if (!Misc.isBusy(fleet) && 
026                if (curr != null && 
027                                (
028                                        BaseRaidStage.STRAGGLER.equals(route.getCustom()) || 
029                                        AssembleStage.WAIT_STAGE.equals(curr.custom) || 
030                                        curr.isTravel())) {
031                        Misc.setFlagWithReason(fleet.getMemoryWithoutUpdate(), MemFlags.FLEET_BUSY, "raid_wait", true, 1);
032                }
033                
034                checkCapture(amount);
035                //checkBuild(amount);
036                
037                if (fleet.getMemoryWithoutUpdate().getBoolean(MemFlags.MEMORY_KEY_RAIDER)) {
038                        checkRaid(amount);
039                }
040        }
041
042        @Override
043        protected String getInSystemActionText(RouteSegment segment) {
044                if (AssembleStage.WAIT_STAGE.equals(segment.custom)) {
045                        return "waiting at rendezvous point";
046                }
047                String s = null;
048                if (delegate != null) s = delegate.getRaidInSystemText(fleet);
049                if (s == null) s = "raiding"; 
050                return s;
051        }
052
053        @Override
054        protected String getEndingActionText(RouteSegment segment) {
055                return super.getEndingActionText(segment);
056        }
057
058        @Override
059        protected String getStartingActionText(RouteSegment segment) {
060                if (AssembleStage.PREP_STAGE.equals(segment.custom)) {
061                        String s = null;
062                        if (delegate != null) s = delegate.getRaidPrepText(fleet, segment.from);
063                        if (s == null) s = "preparing for raid"; 
064                        return s;
065                }
066                if (segment.from == route.getMarket().getPrimaryEntity()) {
067                        return "orbiting " + route.getMarket().getName();
068                }
069                
070                String s = null;
071                if (delegate != null) s = delegate.getRaidDefaultText(fleet);
072                if (s == null) s = "raiding"; 
073                return s;
074        }
075
076        @Override
077        protected String getTravelActionText(RouteSegment segment) {
078                return super.getTravelActionText(segment);
079        }
080
081        public String getActionText(CampaignFleetAPI fleet) {
082                FleetAssignmentDataAPI curr = fleet.getCurrentAssignment();
083                if (curr != null && curr.getAssignment() == FleetAssignment.PATROL_SYSTEM &&
084                                curr.getActionText() == null) {
085                        
086                        String s = null;
087                        if (delegate != null) s = delegate.getRaidDefaultText(fleet);
088                        if (s == null) s = "raiding"; 
089                        return s;
090                        
091                }
092                return null;
093        }
094
095
096
097        
098        
099}