001package com.fs.starfarer.api.impl.combat.threat;
002
003import java.awt.Color;
004
005import com.fs.starfarer.api.combat.MutableShipStatsAPI;
006import com.fs.starfarer.api.combat.ShipAPI;
007import com.fs.starfarer.api.combat.ShipCommand;
008import com.fs.starfarer.api.combat.ShipwideAIFlags.AIFlags;
009import com.fs.starfarer.api.combat.WeaponGroupAPI;
010import com.fs.starfarer.api.impl.combat.BaseShipSystemScript;
011import com.fs.starfarer.api.util.Misc;
012
013public abstract class BaseEnergyLashActivatedSystem extends BaseShipSystemScript implements EnergyLashActivatedSystem {
014        
015        protected boolean inited = false;
016        
017        protected void init(ShipAPI ship) {
018                ship.getSystem().setAmmo(0);
019        }
020        
021        public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) {
022                ShipAPI ship = null;
023                //boolean player = false;
024                if (stats.getEntity() instanceof ShipAPI) {
025                        ship = (ShipAPI) stats.getEntity();
026                        //player = ship == Global.getCombatEngine().getPlayerShip();
027                } else {
028                        return;
029                }
030                if (ship.getSystem() == null) return;
031                
032                if (!inited) {
033                        init(ship);
034                        inited = true;
035                }
036                
037                applyImpl(ship, stats, id, state, effectLevel);
038        }
039        
040        protected abstract void applyImpl(ShipAPI ship, MutableShipStatsAPI stats, String id, State state, float effectLevel);
041        
042        
043        @Override
044        public void hitWithEnergyLash(ShipAPI overseer, ShipAPI ship) {
045                if (ship.getSystem() == null) return;
046                
047                ship.getSystem().setAmmo(1);
048                ship.giveCommand(ShipCommand.USE_SYSTEM, null, 0);
049        }
050
051        protected void setStandardJitter(ShipAPI ship, State state, float effectLevel) {
052                if (ship.isHulk()) return;
053                
054                float jitterLevel = effectLevel;
055                jitterLevel = 0.5f + 0.5f * jitterLevel;
056                if (state == State.OUT) {
057                        jitterLevel *= jitterLevel;
058                }
059                Color base = VoltaicDischargeOnFireEffect.EMP_FRINGE_COLOR;
060                Color overColor = Misc.setAlpha(base, 255);;
061                ship.setJitter(this, overColor, jitterLevel, 1, 0f, 4f);
062                ship.setJitterShields(false);
063                ship.setCircularJitter(true);
064        }
065        
066        protected void makeAllGroupsAutofireOneFrame(ShipAPI ship) {
067                for (WeaponGroupAPI g : ship.getWeaponGroupsCopy()) {
068                        if (!g.isAutofiring()) {
069                                g.toggleOn();
070                        }
071                }
072                ship.resetSelectedGroup();
073                ship.blockCommandForOneFrame(ShipCommand.TOGGLE_AUTOFIRE);
074                ship.blockCommandForOneFrame(ShipCommand.SELECT_GROUP);
075                ship.blockCommandForOneFrame(ShipCommand.USE_SELECTED_GROUP);
076                ship.blockCommandForOneFrame(ShipCommand.FIRE);
077                
078                Object test = ship.getAIFlags().getCustom(AIFlags.MANEUVER_TARGET);
079                if (test instanceof ShipAPI) {
080                        ShipAPI target = (ShipAPI) test;
081                        ship.setShipTarget(target);
082                }
083        }
084        
085}
086
087
088
089
090
091
092
093