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