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