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