001package com.fs.starfarer.api.campaign;
002
003import java.util.ArrayList;
004import java.util.List;
005import java.util.Map;
006import java.util.Random;
007
008import com.fs.starfarer.api.characters.OfficerDataAPI;
009import com.fs.starfarer.api.characters.PersonAPI;
010import com.fs.starfarer.api.fleet.FleetMemberAPI;
011
012public interface FleetDataAPI {
013        /**
014         * Returns:
015         * "logistical priority" members first, then non-mothballed, then mothballed.
016         * Retains normal order within each category.
017         * @return
018         */
019        List<FleetMemberAPI> getMembersInPriorityOrder();
020        
021        List<FleetMemberAPI> getMembersListCopy();
022        List<FleetMemberAPI> getCombatReadyMembersListCopy();
023        float getFleetPointsUsed();
024        void addFleetMember(FleetMemberAPI member);
025        void removeFleetMember(FleetMemberAPI member);
026        
027        void clear();
028        
029        /**
030         * Removes from the fleet, adds fuel/supplies gained from scuttling, adds
031         * any equipped weapons to cargo.
032         * @param member
033         */
034        void scuttle(FleetMemberAPI member);
035        
036        /**
037         * Maximum burn level of fastest ship in the fleet. Includes getStats().getFleetwideMaxBurnMod().
038         * Does NOT include mothballed ships.
039         * @return
040         */
041        float getMaxBurnLevel();
042        
043        /**
044         * Maximum burn level of slowest ship in the fleet. Includes getStats().getFleetwideMaxBurnMod()
045         * @return
046         */
047        float getMinBurnLevel();
048        
049        
050        /**
051         * Effective burn level this fleet can go at; includes effect of being in deep hyperspace (where getMinBurnLevel() does not).
052         * @return
053         */
054        float getBurnLevel();
055
056        /**
057         * Will also set the captains of all the other ships to a new person with all-0 stats.
058         * @param flagship
059         */
060        void setFlagship(FleetMemberAPI flagship);
061
062        
063        CampaignFleetAPI getFleet();
064
065        
066        /**
067         * In pixels/second. There are 10 real seconds in a day.
068         * @return
069         */
070        float getTravelSpeed();
071
072        
073        /**
074         * Makes a copy of the current fleet members.  The snapshot is transient and will
075         * not be in the save file.
076         */
077        void takeSnapshot();
078        
079        /**
080         * Returns fleet members at time snapshot was taken.
081         * Useful to get the state of the fleet before a battle/prior to it being destroyed/etc.
082         * @return
083         */
084        ArrayList<FleetMemberAPI> getSnapshot();
085
086        boolean areAnyShipsPerformingRepairs();
087
088        void sort();
089
090        List<OfficerDataAPI> getOfficersCopy();
091        void addOfficer(PersonAPI person);
092        void removeOfficer(PersonAPI person);
093        OfficerDataAPI getOfficerData(PersonAPI person);
094        FleetMemberAPI getMemberWithCaptain(PersonAPI captain);
095
096        int getNumMembers();
097
098        void syncMemberLists();
099        boolean isOnlySyncMemberLists();
100        void setOnlySyncMemberLists(boolean onlySyncMemberLists);
101
102        void syncIfNeeded();
103
104        void setSyncNeeded();
105
106        List<FleetMemberAPI> getMembersListWithFightersCopy();
107
108        PersonAPI getCommander();
109
110        float getMinCrew();
111
112        void ensureHasFlagship();
113
114        FleetMemberAPI addFleetMember(String variantId);
115
116        void addOfficer(OfficerDataAPI officer);
117
118        void updateCargoCapacities();
119
120        String pickShipName(FleetMemberAPI member, Random random);
121
122        float getEffectiveStrength();
123
124        /**
125         * Useful for skills that need to do some computations to figure out effect magnitude,
126         * but where the values might change if the fleet composition changed.
127         * @return
128         */
129        Map<String, Object> getCacheClearedOnSync();
130
131        float getMinBurnLevelUnmodified();
132
133        Random getShipNameRandom();
134
135        void setShipNameRandom(Random shipNameRandom);
136
137        void sortToMatchOrder(List<FleetMemberAPI> originalOrder);
138
139        boolean isForceNoSync();
140
141        void setForceNoSync(boolean forceNoSync);
142
143}
144
145
146