1package com.fs.starfarer.api.impl.campaign.skills;
3import org.lwjgl.util.vector.Vector2f;
5import com.fs.starfarer.api.GameState;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.characters.AfterShipCreationSkillEffect;
8import com.fs.starfarer.api.characters.MutableCharacterStatsAPI;
9import com.fs.starfarer.api.characters.ShipSkillEffect;
10import com.fs.starfarer.api.characters.SkillSpecAPI;
11import com.fs.starfarer.api.combat.BeamAPI;
12import com.fs.starfarer.api.combat.CombatEntityAPI;
13import com.fs.starfarer.api.combat.DamageAPI;
14import com.fs.starfarer.api.combat.DamagingProjectileAPI;
15import com.fs.starfarer.api.combat.MutableShipStatsAPI;
16import com.fs.starfarer.api.combat.ShipAPI;
17import com.fs.starfarer.api.combat.ShipAPI.HullSize;
18import com.fs.starfarer.api.combat.WeaponAPI;
19import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
20import com.fs.starfarer.api.combat.listeners.AdvanceableListener;
21import com.fs.starfarer.api.combat.listeners.DamageDealtModifier;
22import com.fs.starfarer.api.ui.TooltipMakerAPI;
23import com.fs.starfarer.api.util.Misc;
39 public void applyEffectsAfterShipCreation(
ShipAPI ship, String
id) {
43 public void unapplyEffectsAfterShipCreation(
ShipAPI ship, String
id) {
56 public String getEffectDescription(
float level) {
65 info.
addPara(
"Energy weapons deal up to %s damage at close range as the firing ship's flux level increases above %s",
71 info.
addPara(
"Energy weapons deal up to %s damage at close range, based on the firing ship's flux level",
76 info.
addPara(
indent +
"Full bonus damage at %s range and below, " +
77 "no bonus damage at %s range and above",
84 public ScopeDescription getScopeDescription() {
85 return ScopeDescription.PILOTED_SHIP;
98 public String getEffectDescription(
float level) {
99 return "-" + (int)Math.round((1f -
FLUX_COST_MULT) * 100f) +
"% flux generated by energy weapons";
102 public String getEffectPerLevelDescription() {
106 public ScopeDescription getScopeDescription() {
107 return ScopeDescription.PILOTED_SHIP;
116 public EWMDamageDealtMod(
ShipAPI ship) {
120 public void advance(
float amount) {
125 if (damageBonus > 0) {
128 "Energy weapon mastery",
129 "+" + damageBonus +
"% energy weapon damage",
false);
135 public String modifyDamageDealt(Object param,
137 Vector2f point,
boolean shieldHit) {
141 Vector2f from =
null;
143 if (param instanceof DamagingProjectileAPI) {
144 from = ((DamagingProjectileAPI)param).getSpawnLocation();
145 weapon = ((DamagingProjectileAPI)param).getWeapon();
146 }
else if (param instanceof BeamAPI) {
147 from = ((BeamAPI)param).getFrom();
148 weapon = ((BeamAPI)param).getWeapon();
153 if (weapon ==
null || ship ==
null)
return null;
157 if (mag <= 0)
return null;
159 float dist = Misc.getDistance(from, point);
174 String
id =
"ewm_dam_mod";
175 damage.getModifier().modifyPercent(
id, (mag * f) * 100f);
static SettingsAPI getSettings()
static CombatEngineAPI getCombatEngine()
static GameState getCurrentState()
void modifyFlat(String source, float value)
void unmodifyFlat(String source)
void modifyMult(String source, float value)
void init(MutableCharacterStatsAPI stats, SkillSpecAPI skill)
static float FLUX_COST_MULT
static float ENERGY_DAMAGE_MIN_FLUX_LEVEL
static float ENERGY_DAMAGE_PERCENT
static Object DAM_BONUS_STATUS_KEY
String getSpriteName(String category, String id)
void maintainStatusForPlayerShip(Object key, String spriteName, String title, String data, boolean isDebuff)
MutableStat getEnergyWeaponFluxBasedBonusDamageMinLevel()
StatBonus getEnergyWeaponFluxCostMod()
MutableStat getEnergyWeaponFluxBasedBonusDamageMagnitude()
void removeListenerOfClass(Class<?> c)
void addListener(Object listener)
float getFluxBasedEnergyWeaponDamageMultiplier()