001package com.fs.starfarer.api.campaign.ai;
002
003import java.util.List;
004
005import com.fs.starfarer.api.Script;
006import com.fs.starfarer.api.campaign.BattleAPI;
007import com.fs.starfarer.api.campaign.CampaignFleetAPI;
008import com.fs.starfarer.api.campaign.FleetActionTextProvider;
009import com.fs.starfarer.api.campaign.FleetAssignment;
010import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin;
011import com.fs.starfarer.api.campaign.SectorEntityToken;
012import com.fs.starfarer.api.fleet.CrewCompositionAPI;
013import com.fs.starfarer.api.fleet.FleetMemberAPI;
014
015public interface CampaignFleetAIAPI {
016        
017        public static enum ActionType {
018                CANCEL,
019                HOSTILE,
020        }
021        
022        public static enum EncounterOption {
023                ENGAGE,
024                DISENGAGE,
025                HOLD,
026                HOLD_VS_STRONGER,
027        }
028        
029//      public static enum PostEngagementOption {
030//              MAINTAIN_CONTACT,
031//              STAND_DOWN,
032//      }
033        
034        public static enum PursuitOption {
035                PURSUE,
036                HARRY,
037                LET_THEM_GO,
038        }
039        
040        public static enum InitialBoardingResponse {
041                BOARD,
042                ENGAGE,
043                LET_IT_GO,
044        }
045        
046        public static enum BoardingActionType {
047                HARD_DOCK,
048                LAUNCH,
049                ABORT,
050        }
051        
052        public static class BoardingActionDecision {
053                private BoardingActionType type;
054                private CrewCompositionAPI party;
055        }
056        
057        
058        void advance(float amount);
059        
060        
061        /*
062        Whether *wants* to attack, if it were able to
063        Engage, flee, or a "let them go, but engage if they engage" behavior
064        After a battle, whether it wants to harry, salvage, or stand down       
065        */
066        boolean isHostileTo(CampaignFleetAPI other);
067        EncounterOption pickEncounterOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet);
068        
069        boolean wantsToJoin(BattleAPI battle, boolean playerInvolved);
070        
071        //PostEngagementOption pickPostEngagementOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet);
072        
073        PursuitOption pickPursuitOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet);
074        
075        InitialBoardingResponse pickBoardingResponse(FleetEncounterContextPlugin context, FleetMemberAPI toBoard, CampaignFleetAPI otherFleet);
076        List<FleetMemberAPI> pickBoardingTaskForce(FleetEncounterContextPlugin context, FleetMemberAPI toBoard, CampaignFleetAPI otherFleet);
077        BoardingActionDecision makeBoardingDecision(FleetEncounterContextPlugin context, FleetMemberAPI toBoard, CrewCompositionAPI maxAvailable);
078        
079        void performCrashMothballingPriorToEscape(FleetEncounterContextPlugin context, CampaignFleetAPI playerFleet);
080        
081        void reportNearbyAction(ActionType type, SectorEntityToken actor, SectorEntityToken target, String responseVariable);
082        
083        String getActionTextOverride();
084        void setActionTextOverride(String actionTextOverride);
085        
086        FleetAssignmentDataAPI getCurrentAssignment();
087        List<FleetAssignmentDataAPI> getAssignmentsCopy();
088        
089        
090        void addAssignmentAtStart(FleetAssignment assignment,
091                        SectorEntityToken target, float maxDurationInDays,
092                        Script onCompletion);
093        void removeFirstAssignment();
094        void addAssignmentAtStart(FleetAssignment assignment,
095                        SectorEntityToken target, float maxDurationInDays,
096                        String actionText, Script onCompletion);
097        void removeFirstAssignmentIfItIs(FleetAssignment assignment);
098        boolean isCurrentAssignment(FleetAssignment assignment);
099        void addAssignment(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, Script onCompletion);
100        void addAssignment(FleetAssignment assignment, SectorEntityToken target, float maxDurationInDays, String actionText, Script onCompletion);
101        boolean isFleeing();
102        void removeAssignment(FleetAssignmentDataAPI assignment);
103
104
105        void clearAssignments();
106
107
108        void dumpResourcesIfNeeded();
109
110        void notifyInteractedWith(CampaignFleetAPI otherFleet);
111
112        FleetAssignment getCurrentAssignmentType();
113        
114        void doNotAttack(SectorEntityToken other, float durDays);
115
116
117        EncounterOption pickEncounterOption(FleetEncounterContextPlugin context,
118                        CampaignFleetAPI otherFleet, boolean pureCheck);
119
120
121        FleetActionTextProvider getActionTextProvider();
122        void setActionTextProvider(FleetActionTextProvider actionTextProvider);
123
124
125        void addAssignment(FleetAssignment assignment, SectorEntityToken target,
126                                           float maxDurationInDays, String actionText, boolean addTimeToNext,
127                                           Script onStart, Script onCompletion);
128
129
130        boolean isMaintainingContact();
131}
132
133
134
135
136
137
138
139
140
141