1package com.fs.starfarer.api.impl.hullmods;
5import org.lwjgl.util.vector.Vector2f;
7import com.fs.starfarer.api.combat.BaseHullMod;
8import com.fs.starfarer.api.combat.BeamAPI;
9import com.fs.starfarer.api.combat.CombatEntityAPI;
10import com.fs.starfarer.api.combat.DamageAPI;
11import com.fs.starfarer.api.combat.DamagingProjectileAPI;
12import com.fs.starfarer.api.combat.MutableShipStatsAPI;
13import com.fs.starfarer.api.combat.ShipAPI;
14import com.fs.starfarer.api.combat.ShipAPI.HullSize;
15import com.fs.starfarer.api.combat.WeaponAPI;
16import com.fs.starfarer.api.combat.listeners.DamageDealtModifier;
17import com.fs.starfarer.api.combat.listeners.WeaponBaseRangeModifier;
18import com.fs.starfarer.api.impl.campaign.ids.HullMods;
19import com.fs.starfarer.api.ui.Alignment;
20import com.fs.starfarer.api.ui.TooltipMakerAPI;
21import com.fs.starfarer.api.util.Misc;
38 return !ship.getVariant().getHullMods().contains(HullMods.ADVANCEDOPTICS);
42 if (ship.getVariant().getHullMods().contains(HullMods.ADVANCEDOPTICS)) {
43 return "Incompatible with Advanced Optics";
50 boolean sMod = isSMod(stats);
80 if (index == 0)
return "" + (int) Math.round(
SMOD_MODIFIER) +
"%";
87 ship.addListener(
new HighScatterAmpDamageDealtMod(ship));
88 ship.addListener(
new HighScatterAmpRangeMod());
108 public static class HighScatterAmpDamageDealtMod
implements DamageDealtModifier {
109 protected ShipAPI ship;
110 public HighScatterAmpDamageDealtMod(ShipAPI ship) {
114 public String modifyDamageDealt(Object param,
115 CombatEntityAPI target, DamageAPI damage,
116 Vector2f point,
boolean shieldHit) {
118 if (!(param instanceof DamagingProjectileAPI) && param instanceof BeamAPI) {
119 damage.setForceHardFlux(
true);
125 public static class HighScatterAmpRangeMod
implements WeaponBaseRangeModifier {
126 public HighScatterAmpRangeMod() {
128 public float getWeaponBaseRangePercentMod(ShipAPI ship, WeaponAPI weapon) {
131 public float getWeaponBaseRangeMultMod(ShipAPI ship, WeaponAPI weapon) {
134 public float getWeaponBaseRangeFlatMod(ShipAPI ship, WeaponAPI weapon) {
135 if (weapon.isBeam()) {
136 float range = weapon.getSpec().getMaxRange();
186 Color h = Misc.getHighlightColor();
187 Color bad = Misc.getNegativeHighlightColor();
189 tooltip.addPara(
"Beam weapons deal %s more damage and deal hard flux damage to shields.", opad, h,
193 tooltip.addPara(
"Reduces the portion of the range of beam weapons that is above %s units by %s. The base range is affected.", opad, h,
195 "" + (
int)Math.round((1f -
RANGE_MULT) * 100f) +
"%"
204 tooltip.addSectionHeading(
"Interactions with other modifiers", Alignment.MID, opad);
205 tooltip.addPara(
"The base range is reduced, thus percentage and multiplicative modifiers - such as from Integrated Targeting Unit, "
206 +
"skills, or similar sources - apply to the reduced base value.", opad);
static float RANGE_THRESHOLD
boolean isApplicableToShip(ShipAPI ship)
void applyEffectsAfterShipCreation(ShipAPI ship, String id)
static float DAMAGE_BONUS_PERCENT
void addPostDescriptionSection(TooltipMakerAPI tooltip, HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec)
String getSModDescriptionParam(int index, HullSize hullSize, ShipAPI ship)
boolean shouldAddDescriptionToTooltip(HullSize hullSize, ShipAPI ship, boolean isForModSpec)
void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
static float SMOD_MODIFIER
String getDescriptionParam(int index, HullSize hullSize)
String getUnapplicableReason(ShipAPI ship)