001package com.fs.starfarer.api.impl.campaign.fleets;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.campaign.econ.MarketAPI;
005import com.fs.starfarer.api.characters.PersonAPI;
006import com.fs.starfarer.api.combat.ShipVariantAPI;
007import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent;
008import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent.SkillPickPreference;
009import com.fs.starfarer.api.impl.campaign.ids.Conditions;
010import com.fs.starfarer.api.impl.campaign.ids.Industries;
011import com.fs.starfarer.api.impl.campaign.ids.Personalities;
012import com.fs.starfarer.api.impl.campaign.ids.Ranks;
013
014public abstract class SDFBase extends PersonalFleetScript {
015
016        // list of all relevant fleet commander skills, for reference
017//      m.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1);
018//      m.triggerFleetAddCommanderSkill(Skills.TACTICAL_DRILLS, 1);
019//      m.triggerFleetAddCommanderSkill(Skills.CREW_TRAINING, 1);
020//      m.triggerFleetAddCommanderSkill(Skills.CARRIER_GROUP, 1);
021//      m.triggerFleetAddCommanderSkill(Skills.FIGHTER_UPLINK, 1);
022//      m.triggerFleetAddCommanderSkill(Skills.WOLFPACK_TACTICS, 1);
023//      m.triggerFleetAddCommanderSkill(Skills.OFFICER_TRAINING, 1);
024//      m.triggerFleetAddCommanderSkill(Skills.SUPPORT_DOCTRINE, 1);
025//      m.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1);
026//      m.triggerFleetAddCommanderSkill(Skills.PHASE_CORPS, 1);
027//      m.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1);
028//      m.triggerFleetAddCommanderSkill(Skills.CYBERNETIC_AUGMENTATION, 1);
029//      m.triggerFleetAddCommanderSkill(Skills.DERELICT_CONTINGENT, 1);
030        
031        protected PersonAPI person;
032        
033        public SDFBase() {
034                super(null); // when/if there's a specific person, comment out anything using "person" here
035                setMinRespawnDelayDays(10f);
036                setMaxRespawnDelayDays(20f);
037                
038                person = createOrGetPerson();
039                setDefeatTrigger(getDefeatTriggerToUse());
040        }
041        
042        protected abstract String getFactionId();
043        
044        protected String getDefeatTriggerToUse() {
045                return null;
046        }
047
048        protected SkillPickPreference getCommanderShipSkillPreference() {
049                return SkillPickPreference.ANY;
050        }
051        
052        protected PersonAPI createOrGetPerson() {
053                int commanderLevel = 7;
054                SkillPickPreference pref = getCommanderShipSkillPreference();
055                PersonAPI commander = OfficerManagerEvent.createOfficer(Global.getSector().getFaction(getFactionId()),
056                                                                commanderLevel, pref, false, null, true, true, -1, random);
057                if (commander.getPersonalityAPI().getId().equals(Personalities.TIMID)) {
058                        commander.setPersonality(Personalities.CAUTIOUS);
059                }
060                commander.setRankId(Ranks.SPACE_ADMIRAL);
061                commander.setPostId(Ranks.POST_FLEET_COMMANDER);
062                return commander;
063        }
064
065        @Override
066        public PersonAPI getPerson() {
067                return person;
068        }
069
070        public ShipVariantAPI getVariant(String id) {
071                return Global.getSettings().getVariant(id);
072        }
073
074        @Override
075        public boolean canSpawnFleetNow() {
076                MarketAPI source = getSourceMarket();
077                if (source == null || source.hasCondition(Conditions.DECIVILIZED)) return false;
078                if (!source.hasIndustry(Industries.MILITARYBASE) &&
079                                !source.hasIndustry(Industries.HIGHCOMMAND)) return false;
080                if (!source.getFactionId().equals(getFactionId())) return false;
081                return true;
082        }
083
084        @Override
085        public boolean shouldScriptBeRemoved() {
086                return false;
087        }
088
089}
090
091
092
093