001package com.fs.starfarer.api.campaign.ai;
002
003
004
005import java.util.List;
006
007import org.lwjgl.util.vector.Vector2f;
008
009import com.fs.starfarer.api.campaign.BattleAPI;
010import com.fs.starfarer.api.campaign.CampaignFleetAPI;
011import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin;
012import com.fs.starfarer.api.campaign.SectorEntityToken;
013import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.ActionType;
014import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.BoardingActionDecision;
015import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.EncounterOption;
016import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.InitialBoardingResponse;
017import com.fs.starfarer.api.campaign.ai.CampaignFleetAIAPI.PursuitOption;
018import com.fs.starfarer.api.fleet.CrewCompositionAPI;
019import com.fs.starfarer.api.fleet.FleetMemberAPI;
020
021public interface TacticalModulePlugin {
022        
023        void advance(float days);
024        
025        
026        /**
027         * If set to non-null, tells the tactial module that reaching this destination
028         * is the goal.
029         * @param dest
030         */
031        void setTravelDestination(Vector2f dest, float duration);
032
033
034        /**
035         * Will not actually engage when followMode == true.
036         * @param priorityTarget
037         * @param duration
038         * @param followMode
039         */
040        void setPriorityTarget(SectorEntityToken priorityTarget, float duration, boolean followMode);
041        
042        boolean isFleeing();
043        SectorEntityToken getTarget();
044        SectorEntityToken getLargestEnemy();
045        boolean isBusy();
046
047
048        void performCrashMothballingPriorToEscape(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet);
049        EncounterOption pickEncounterOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet);
050        PursuitOption pickPursuitOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet);
051        BoardingActionDecision makeBoardingDecision(FleetEncounterContextPlugin context, FleetMemberAPI toBoard, CrewCompositionAPI maxAvailable);
052        InitialBoardingResponse pickBoardingResponse(FleetEncounterContextPlugin context, FleetMemberAPI toBoard, CampaignFleetAPI otherFleet);
053        List<FleetMemberAPI> pickBoardingTaskForce(FleetEncounterContextPlugin context, FleetMemberAPI toBoard, CampaignFleetAPI otherFleet);
054        void reportNearbyAction(ActionType type, SectorEntityToken actor, SectorEntityToken target, String responseVariable);
055        void notifyInteractedWith(CampaignFleetAPI other);
056
057
058        void setTarget(SectorEntityToken target);
059
060
061        void forceTargetReEval();
062
063
064        boolean wantsToJoin(BattleAPI battle, boolean playerInvolved);
065
066        boolean isMaintainingContact();
067
068        boolean isHostileTo(CampaignFleetAPI other);
069        boolean isHostileTo(CampaignFleetAPI other, boolean assumeTransponderOn);
070
071        EncounterOption pickEncounterOption(FleetEncounterContextPlugin context, CampaignFleetAPI otherFleet, boolean pureCheck);
072
073
074        boolean isStandingDown();
075
076
077        float getPursuitDays();
078
079
080        SectorEntityToken getPriorityTarget();
081}
082
083
084
085