001package com.fs.starfarer.api.plugins;
002
003import java.util.List;
004import java.util.Random;
005
006import com.fs.starfarer.api.campaign.CampaignFleetAPI;
007import com.fs.starfarer.api.campaign.CargoAPI;
008import com.fs.starfarer.api.campaign.FactionAPI;
009import com.fs.starfarer.api.campaign.econ.MarketAPI;
010import com.fs.starfarer.api.campaign.econ.SubmarketAPI;
011import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
012import com.fs.starfarer.api.combat.MutableShipStatsAPI;
013import com.fs.starfarer.api.combat.ShipAPI;
014import com.fs.starfarer.api.combat.ShipVariantAPI;
015import com.fs.starfarer.api.fleet.FleetMemberAPI;
016import com.fs.starfarer.api.loading.FighterWingSpecAPI;
017import com.fs.starfarer.api.loading.WeaponSlotAPI;
018import com.fs.starfarer.api.loading.WeaponSpecAPI;
019
020
021
022
023public interface AutofitPlugin {
024        public interface AvailableWeapon {
025                String getId();
026                WeaponSpecAPI getSpec();
027                float getPrice();
028                CargoAPI getSource();
029                SubmarketAPI getSubmarket();
030                int getQuantity();
031                void setQuantity(int quantity);
032                float getOPCost(MutableCharacterStatsAPI stats, MutableShipStatsAPI shipStats);
033        }
034        
035        public interface AvailableFighter {
036                String getId();
037                FighterWingSpecAPI getWingSpec();
038                float getPrice();
039                CargoAPI getSource();
040                SubmarketAPI getSubmarket();
041                int getQuantity();
042                void setQuantity(int quantity);
043        }
044        
045        public interface AutofitPluginDelegate {
046                void fitFighterInSlot(int index, AvailableFighter fighter, ShipVariantAPI variant);
047                void clearFighterSlot(int index, ShipVariantAPI variant);
048                void fitWeaponInSlot(WeaponSlotAPI slot, AvailableWeapon weapon, ShipVariantAPI variant);
049                void clearWeaponSlot(WeaponSlotAPI slot, ShipVariantAPI variant);
050                
051                List<AvailableWeapon> getAvailableWeapons();
052                List<AvailableFighter> getAvailableFighters();
053                
054                boolean isPriority(WeaponSpecAPI weapon);
055                boolean isPriority(FighterWingSpecAPI wing);
056                
057                List<String> getAvailableHullmods();
058                void syncUIWithVariant(ShipVariantAPI variant);
059                
060                //void syncUIWithVariant();
061                
062                ShipAPI getShip();
063                
064                FactionAPI getFaction();
065                
066                boolean isAllowSlightRandomization();
067                
068                boolean isPlayerCampaignRefit();
069                boolean canAddRemoveHullmodInPlayerCampaignRefit(String modId);
070                
071                MarketAPI getMarket();
072                FleetMemberAPI getFleetMember();
073        }
074        
075
076        
077        
078        public static class AutofitOption {
079                public String id;
080                public String text;
081                public boolean checked;
082                public String tooltip;
083                public AutofitOption(String id, String text, boolean checked, String tooltip) {
084                        this.id = id;
085                        this.text = text;
086                        this.checked = checked;
087                        this.tooltip = tooltip;
088                }
089        }
090        
091        
092        //void init(AutofitPluginDelegate delegate);
093        List<AutofitOption> getOptions();
094        void doFit(ShipVariantAPI current, ShipVariantAPI target, int maxSMods, AutofitPluginDelegate delegate);
095        float getRating(ShipVariantAPI current, ShipVariantAPI target, AutofitPluginDelegate delegate);
096        int getCreditCost();
097        
098
099        String getQuickActionText();
100        void doQuickAction(ShipVariantAPI current, AutofitPluginDelegate delegate);
101        String getQuickActionTooltip();
102        
103        
104        void autoAssignOfficers(CampaignFleetAPI fleet);
105        boolean isQuickActionEnabled(ShipVariantAPI currentVariant);
106        void setRandom(Random random);
107}
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124