001package com.fs.starfarer.api.impl.hullmods;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.combat.BaseHullMod;
005import com.fs.starfarer.api.combat.CombatEngineAPI;
006import com.fs.starfarer.api.combat.MutableShipStatsAPI;
007import com.fs.starfarer.api.combat.ShipAPI;
008import com.fs.starfarer.api.combat.WeaponAPI;
009import com.fs.starfarer.api.combat.ShipAPI.HullSize;
010import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
011import com.fs.starfarer.api.util.IntervalUtil;
012
013public class PeriodicMissileReload extends BaseHullMod {
014
015        
016        public static String MR_DATA_KEY = "core_reload_data_key";
017        
018        public static class PeriodicMissileReloadData {
019                IntervalUtil interval = new IntervalUtil(10f, 15f);
020        }
021        
022        public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
023        }
024                
025        public String getDescriptionParam(int index, HullSize hullSize) {
026                return null;
027        }
028        
029        @Override
030        public void advanceInCombat(ShipAPI ship, float amount) {
031                super.advanceInCombat(ship, amount);
032
033                if (!ship.isAlive()) return;
034                
035                CombatEngineAPI engine = Global.getCombatEngine();
036                
037                String key = MR_DATA_KEY + "_" + ship.getId();
038                PeriodicMissileReloadData data = (PeriodicMissileReloadData) engine.getCustomData().get(key);
039                if (data == null) {
040                        data = new PeriodicMissileReloadData();
041                        engine.getCustomData().put(key, data);
042                }
043                
044                data.interval.advance(amount);
045                if (data.interval.intervalElapsed()) {
046                        for (WeaponAPI w : ship.getAllWeapons()) {
047                                if (w.getType() != WeaponType.MISSILE) continue;
048                                
049                                if (w.usesAmmo() && w.getAmmo() < w.getMaxAmmo()) {
050                                        w.setAmmo(w.getMaxAmmo());
051                                }
052                        }
053                }
054                
055        }
056        
057}
058
059
060
061
062
063
064
065
066
067
068