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