001package com.fs.starfarer.api.combat; 002 003import java.util.Collection; 004import java.util.EnumSet; 005import java.util.LinkedHashSet; 006import java.util.List; 007import java.util.Map; 008import java.util.Set; 009 010import org.json.JSONException; 011import org.json.JSONObject; 012 013import com.fs.starfarer.api.characters.MutableCharacterStatsAPI; 014import com.fs.starfarer.api.combat.ShipHullSpecAPI.ShipTypeHints; 015import com.fs.starfarer.api.loading.FighterWingSpecAPI; 016import com.fs.starfarer.api.loading.VariantSource; 017import com.fs.starfarer.api.loading.WeaponGroupSpec; 018import com.fs.starfarer.api.loading.WeaponSlotAPI; 019import com.fs.starfarer.api.loading.WeaponSpecAPI; 020 021public interface ShipVariantAPI { 022 ShipVariantAPI clone(); 023 024 ShipHullSpecAPI getHullSpec(); 025 026 String getDisplayName(); 027 String getDesignation(); 028 Collection<String> getHullMods(); 029 030 /** 031 * Doesn't clear out built-in hullmods (or permamods), as opposed to getHullMods().clear(). 032 */ 033 void clearHullMods(); 034 035 EnumSet<ShipTypeHints> getHints(); 036 037 void addMod(String modId); 038 void removeMod(String modId); 039 040 void addWeapon(String slotId, String weaponId); 041 042 int getNumFluxVents(); 043 int getNumFluxCapacitors(); 044 045 /** 046 * Only returns slots that have actual weapons in them, not empty slots. 047 * @return 048 */ 049 List<String> getNonBuiltInWeaponSlots(); 050 String getWeaponId(String slotId); 051 052 void setNumFluxCapacitors(int capacitors); 053 void setNumFluxVents(int vents); 054 void setSource(VariantSource source); 055 void clearSlot(String slotId); 056 057 058 WeaponSpecAPI getWeaponSpec(String slotId); 059 Collection<String> getFittedWeaponSlots(); 060 061 062 void autoGenerateWeaponGroups(); 063 boolean hasUnassignedWeapons(); 064 void assignUnassignedWeapons(); 065 WeaponGroupSpec getGroup(int index); 066 067 int computeOPCost(MutableCharacterStatsAPI stats); 068 int computeWeaponOPCost(MutableCharacterStatsAPI stats); 069 int computeHullModOPCost(); 070 int computeHullModOPCost(MutableCharacterStatsAPI stats); 071 072 VariantSource getSource(); 073 boolean isStockVariant(); 074 boolean isEmptyHullVariant(); 075 076 void setHullVariantId(String hullVariantId); 077 String getHullVariantId(); 078 079 List<WeaponGroupSpec> getWeaponGroups(); 080 void addWeaponGroup(WeaponGroupSpec group); 081 082 void setVariantDisplayName(String variantName); 083 084 ShipAPI.HullSize getHullSize(); 085 086 boolean isFighter(); 087 088 String getFullDesignationWithHullName(); 089 090 boolean hasHullMod(String id); 091 092 WeaponSlotAPI getSlot(String slotId); 093 094 boolean isCombat(); 095 boolean isStation(); 096 097 String getWingId(int index); 098 void setWingId(int index, String wingId); 099 List<String> getWings(); 100 List<String> getLaunchBaysSlotIds(); 101 102 List<String> getFittedWings(); 103 104 void setHullSpecAPI(ShipHullSpecAPI hullSpec); 105 106 Set<String> getPermaMods(); 107 void clearPermaMods(); 108 void removePermaMod(String modId); 109 void addPermaMod(String modId); 110 void addPermaMod(String modId, boolean isSMod); 111 112 boolean isCarrier(); 113 114 List<String> getSortedMods(); 115 116 Set<String> getSuppressedMods(); 117 void addSuppressedMod(String modId); 118 void removeSuppressedMod(String modId); 119 void clearSuppressedMods(); 120 121 boolean isGoalVariant(); 122 void setGoalVariant(boolean goalVariant); 123 124 Collection<String> getNonBuiltInHullmods(); 125 126 FighterWingSpecAPI getWing(int index); 127 128 int getUnusedOP(MutableCharacterStatsAPI stats); 129 130 boolean isCivilian(); 131 132 List<String> getModuleSlots(); 133 134 MutableShipStatsAPI getStatsForOpCosts(); 135 136 boolean isLiner(); 137 boolean isFreighter(); 138 boolean isTanker(); 139 140 /** 141 * Whether variant has any unsuppressed dmods. 142 * @return 143 */ 144 boolean isDHull(); 145 146 Map<String, String> getStationModules(); 147 148 List<String> getNonBuiltInWings(); 149 150 boolean hasTag(String tag); 151 void addTag(String tag); 152 void removeTag(String tag); 153 Collection<String> getTags(); 154 void clearTags(); 155 156 /** 157 * Removes everything non-built-in - weapons, fighters, hullmods - and sets vents/capacitors to 0. 158 */ 159 void clear(); 160 161 162 /** 163 * If autofitted, what the goal variant was. May or may not be set. Must be set for fleet.deflate() to work. 164 * @return 165 */ 166 String getOriginalVariant(); 167 168 /** 169 * If autofitted by a FleetInflater, what the goal variant was. May or may not be set. Must be set for fleet.deflate() to work. 170 */ 171 void setOriginalVariant(String targetVariant); 172 173 ShipVariantAPI getModuleVariant(String slotId); 174 void setModuleVariant(String slotId, ShipVariantAPI variant); 175 176 boolean isTransport(); 177 String getVariantFilePath(); 178 179 LinkedHashSet<String> getSMods(); 180 181 String getFullDesignationWithHullNameForShip(); 182 183 void refreshBuiltInWings(); 184 185 boolean hasDMods(); 186 187 LinkedHashSet<String> getSModdedBuiltIns(); 188 189 boolean isMayAutoAssignWeapons(); 190 void setMayAutoAssignWeapons(boolean mayAutoAssign); 191 192 String getFullDesignationForShip(); 193 194 JSONObject toJSONObject() throws JSONException; 195 196 197} 198 199 200 201 202 203 204 205 206 207