001package com.fs.starfarer.api.characters;
002
003import java.util.List;
004
005import com.fs.starfarer.api.campaign.CampaignFleetAPI;
006import com.fs.starfarer.api.campaign.TextPanelAPI;
007import com.fs.starfarer.api.campaign.econ.MarketAPI;
008import com.fs.starfarer.api.combat.MutableStat;
009import com.fs.starfarer.api.combat.StatBonus;
010import com.fs.starfarer.api.util.DynamicStatsAPI;
011
012public interface MutableCharacterStatsAPI {
013
014        public static interface SkillLevelAPI {
015                float getLevel();
016                void setLevel(float level);
017                SkillSpecAPI getSkill();
018        }
019        
020        int getLevel();
021        long getXP();
022        
023        
024//      int getSkillPoints();
025//      int getAptitudePoints();
026//      void setSkillPoints(int points);
027//      void setAptitudePoints(int points);
028        
029//      void addAptitudePoints(int points);
030//      void addSkillPoints(int points);
031        void increaseSkill(String id);
032        void increaseAptitude(String id);
033        
034        void setSkillLevel(String id, float level);
035        void setAptitudeLevel(String id, float level);
036        float getAptitudeLevel(String id);
037        
038        /**
039         * Only returns whole numbers. Float is used for convenience to avoid some extra casting. Other methods work likewise.
040         * @param id
041         * @return
042         */
043        float getSkillLevel(String id);
044        
045        void addXP(long xp, TextPanelAPI textPanel, boolean withMessage, boolean allowBonusXP, boolean withLevelUp);
046        void addXP(long xp, TextPanelAPI textPanel, boolean withMessage);
047        void addXP(long xp, TextPanelAPI textPanel);
048        void addXP(long xp);
049        
050        
051        MutableStat getWeaponOPCostMult();
052        StatBonus getShipOrdnancePointBonus();
053        
054        StatBonus getSmallWeaponOPCost();
055        StatBonus getMediumWeaponOPCost();
056        StatBonus getLargeWeaponOPCost();
057        
058        MutableStat getRepairRateMult();
059        
060        MutableStat getCommandPoints();
061        
062        MutableStat getMarineEffectivnessMult();
063        //MutableStat getCrewXPGainMult();
064        
065        //MutableStat getFleetSizeTravelPenaltyMult();
066        //StatBonus getCombatDeploymentCost();
067        
068        StatBonus getMaxCapacitorsBonus();
069        StatBonus getMaxVentsBonus();
070        
071        //StatBonus getTravelSpeedBonus();
072        
073        void levelUpIfNeeded();
074        void levelUpIfNeeded(TextPanelAPI textPanel);
075        
076        DynamicStatsAPI getDynamic();
077        
078        int getPoints();
079        void setPoints(int points);
080        void addPoints(int points);
081        MutableStat getOfficerNumber();
082        CampaignFleetAPI getFleet();
083        void setFleet(CampaignFleetAPI fleet);
084        void refreshCharacterStatsEffects();
085        boolean isSkipRefresh();
086        void setSkipRefresh(boolean skipRefresh);
087        List<SkillLevelAPI> getSkillsCopy();
088        List<String> getGrantedAbilityIds();
089        MutableStat getAdminNumber();
090        MutableStat getOutpostNumber();
091        
092        void refreshGovernedOutpostEffects(MarketAPI market);
093        void refreshAllOutpostsEffects(MarketAPI market);
094        void refreshAllOutpostsEffectsForPlayerOutposts();
095        long getBonusXp();
096        void setBonusXp(long bonusXp);
097        void addBonusXP(long bonusXp, boolean withMessage, TextPanelAPI textPanel, boolean topScreenMessage);
098        
099        /**
100         * Defaults to no bonus XP being granted.
101         * @param points
102         * @param withMessage
103         * @param textPanel
104         * @param topScreenMessage
105         */
106        void spendStoryPoints(int points, boolean withMessage, TextPanelAPI textPanel, boolean topScreenMessage, String logText);
107        void spendStoryPoints(int points, boolean withMessage, TextPanelAPI textPanel, boolean topScreenMessage, float bonusXPFraction, String logText);
108        int getStoryPoints();
109        void setStoryPoints(int storyPoints);
110        void addStoryPoints(int storyPoints);
111        void addXP(long xp, TextPanelAPI textPanel, boolean withMessage, boolean allowBonusXP);
112        
113        /**
114         * Will be gained on reaching maximum level. Increased by using story points before maximum level is reached.
115         * @return
116         */
117        long getDeferredBonusXp();
118        void setDeferredBonusXp(long deferredBonusXp);
119        void setLevel(int level);
120        boolean isPlayerStats();
121        void addStoryPoints(int points, TextPanelAPI textPanel, boolean makeCharTabFlash);
122        long getBonusXPForSpendingStoryPointBeforeSpendingIt();
123        long getTotalBonusAndDeferredXPForStoryPoint();
124        long getBonusXPUsed(long normalXP);
125        void setOnlyAddBonusXPDoNotSpendStoryPoints(boolean onlyAddBonusXPDoNotSpendStoryPoints);
126        void decreaseSkill(String id);
127        boolean hasSkill(String id);
128        void refreshCharacterStatsEffects(boolean withColonyEffects);
129        void setBonusXPGainReason(String bonusXPGainReason);
130        void setXP(long xp);
131        
132
133}