001package com.fs.starfarer.api.loading;
002
003import java.util.EnumSet;
004import java.util.List;
005import java.util.Set;
006
007import java.awt.Color;
008
009import org.lwjgl.util.vector.Vector2f;
010
011import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
012import com.fs.starfarer.api.combat.DamageType;
013import com.fs.starfarer.api.combat.MutableShipStatsAPI;
014import com.fs.starfarer.api.combat.WeaponAPI;
015import com.fs.starfarer.api.combat.WeaponAPI.DerivedWeaponStatsAPI;
016import com.fs.starfarer.api.combat.WeaponAPI.WeaponSize;
017import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
018
019public interface WeaponSpecAPI extends WithSourceMod {
020        float getOrdnancePointCost(MutableCharacterStatsAPI stats);
021        EnumSet<WeaponAPI.AIHints> getAIHints();
022        
023        WeaponType getType();
024        float getAmmoPerSecond();
025        
026        int getTier();
027        float getBaseValue();
028        boolean usesAmmo();
029        int getMaxAmmo();
030        String getWeaponId();
031        WeaponSize getSize();
032        String getWeaponName();
033        
034        int getBurstSize();
035        Set<String> getTags();
036        void addTag(String tag);
037        boolean hasTag(String tag);
038        float getRarity();
039        void setRarity(float rarity);
040        float getOrdnancePointCost(MutableCharacterStatsAPI stats, MutableShipStatsAPI shipStats);
041        DerivedWeaponStatsAPI getDerivedStats();
042        
043        List<Vector2f> getHardpointFireOffsets();
044        List<Float> getHardpointAngleOffsets();
045        List<Vector2f> getTurretFireOffsets();
046        List<Float> getTurretAngleOffsets();
047        List<Vector2f> getHiddenFireOffsets();
048        List<Float> getHiddenAngleOffsets();
049        
050        String getHardpointSpriteName();
051        String getTurretSpriteName();
052        String getHardpointUnderSpriteName();
053        String getTurretUnderSpriteName();
054        String getManufacturer();
055        void setManufacturer(String manufacturer);
056        String getAutofitCategory();
057        List<String> getAutofitCategoriesInPriorityOrder();
058        String getWeaponGroupTag();
059        void setWeaponGroupTag(String weaponGroupTag);
060        boolean isBeam();
061        String getPrimaryRoleStr();
062        void setPrimaryRoleStr(String primaryRoleStr);
063        String getSpeedStr();
064        void setSpeedStr(String speedStr);
065        String getTrackingStr();
066        void setTrackingStr(String trackingStr);
067        String getTurnRateStr();
068        void setTurnRateStr(String turnRateStr);
069        String getAccuracyStr();
070        void setAccuracyStr(String accuracyStr);
071        String getCustomPrimary();
072        void setCustomPrimary(String customPrimary);
073        String getCustomPrimaryHL();
074        void setCustomPrimaryHL(String customPrimaryHL);
075        String getCustomAncillary();
076        void setCustomAncillary(String customAncillary);
077        String getCustomAncillaryHL();
078        void setCustomAncillaryHL(String customAncillaryHL);
079        boolean isNoDPSInTooltip();
080        void setNoDPSInTooltip(boolean noDPSInTooltip);
081        Color getGlowColor();
082        boolean isInterruptibleBurst();
083        boolean isNoImpactSounds();
084        void setNoImpactSounds(boolean noImpactSounds);
085        DamageType getDamageType();
086        
087        boolean isRenderAboveAllWeapons();
088        void setRenderAboveAllWeapons(boolean renderAboveAllWeapons);
089        boolean isNoShieldImpactSounds();
090        void setNoShieldImpactSounds(boolean noShieldImpactSounds);
091        boolean isNoNonShieldImpactSounds();
092        void setNoNonShieldImpactSounds(boolean noNonShieldImpactSounds);
093        
094        float getMinSpread();
095        float getMaxSpread();
096        float getSpreadDecayRate();
097        float getSpreadBuildup();
098        void setMinSpread(float minSpread);
099        void setMaxSpread(float maxSpread);
100        void setSpreadDecayRate(float spreadDecayRate);
101        void setSpreadBuildup(float spreadBuildup);
102        
103        /**
104         * For beam weapons only.
105         * @return
106         */
107        float getBurstDuration();
108        float getAutofireAccBonus();
109        void setAutofireAccBonus(float autofireAccBonus);
110        Object getProjectileSpec();
111        float getBeamChargeupTime();
112        float getBeamChargedownTime();
113        boolean isUnaffectedByProjectileSpeedBonuses();
114        void setUnaffectedByProjectileSpeedBonuses(boolean unaffectedByProjectileSpeedBonuses);
115        float getChargeTime();
116        WeaponType getMountType();
117        void setMountType(WeaponType mountType);
118        float getExtraArcForAI();
119        void setExtraArcForAI(float extraArcForAI);
120        void setWeaponName(String weaponName);
121        float getMaxRange();
122        void setMaxRange(float maxRange);
123        void setOrdnancePointCost(float armamentCapacity);
124        boolean isShowDamageWhenDecorative();
125        boolean isBurstBeam();
126        boolean isStopPreviousFireSound();
127        void setStopPreviousFireSound(boolean stopPreviousFireSound);
128        boolean isPlayFullFireSoundOne();
129        void setPlayFullFireSoundOne(boolean playFullFireSoundOne);
130        void setBeamSpeed(float beamSpeed);
131        void setMaxAmmo(int maxAmmo);
132        void setAmmoPerSecond(float ammoPerSecond);
133        float getReloadSize();
134        void setReloadSize(float reloadSize);
135        void setProjectileSpeed(float projectileSpeed);
136        float getTurnRate();
137        void setTurnRate(float turnRate);
138        boolean isRestrictToSpecifiedMountType();
139        void setRestrictToSpecifiedMountType(boolean restrictToSpecifiedMountType);
140        float getFadePreviousFireSound();
141        void setFadePreviousFireSound(float fadePreviousFireSound);
142        void setDamageType(DamageType damageType);
143}