1package com.fs.starfarer.api.impl.hullmods;
3import org.lwjgl.util.vector.Vector2f;
5import com.fs.starfarer.api.campaign.CampaignUIAPI.CoreUITradeMode;
6import com.fs.starfarer.api.campaign.econ.MarketAPI;
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.MissileAPI;
13import com.fs.starfarer.api.combat.MutableShipStatsAPI;
14import com.fs.starfarer.api.combat.ShipAPI;
15import com.fs.starfarer.api.combat.WeaponAPI;
16import com.fs.starfarer.api.combat.ShipAPI.HullSize;
17import com.fs.starfarer.api.combat.WeaponAPI.AIHints;
18import com.fs.starfarer.api.combat.listeners.DamageDealtModifier;
19import com.fs.starfarer.api.impl.campaign.ids.Stats;
20import com.fs.starfarer.api.loading.WeaponSpecAPI;
28 stats.getDynamic().getMod(Stats.SMALL_PD_MOD).modifyFlat(
id, -
OP_REDUCTION);
33 ship.addListener(
new PDIDamageDealtMod());
49 if (ship ==
null || ship.getVariant() ==
null)
return true;
50 if (!ship.getVariant().hasHullMod(
"pdintegration"))
return true;
52 for (String slotId : ship.getVariant().getFittedWeaponSlots()) {
53 WeaponSpecAPI spec = ship.getVariant().getWeaponSpec(slotId);
54 if (spec.getAIHints().contains(AIHints.PD))
return false;
61 return "Can not remove while ship has point-defense weapons installed";
66 public static class PDIDamageDealtMod
implements DamageDealtModifier {
67 public String modifyDamageDealt(Object param,
68 CombatEntityAPI target, DamageAPI damage,
69 Vector2f point,
boolean shieldHit) {
70 WeaponAPI weapon =
null;
71 if (param instanceof DamagingProjectileAPI) {
72 weapon = ((DamagingProjectileAPI)param).getWeapon();
73 }
else if (param instanceof BeamAPI) {
74 weapon = ((BeamAPI)param).getWeapon();
75 }
else if (param instanceof MissileAPI) {
76 weapon = ((MissileAPI)param).getWeapon();
79 if (weapon ==
null)
return null;
80 if (!weapon.hasAIHint(AIHints.PD))
return null;
82 String
id =
"pdi_dam_mod";
static float DAMAGE_BONUS_PERCENT
void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
String getDescriptionParam(int index, HullSize hullSize, ShipAPI ship)
boolean canBeAddedOrRemovedNow(ShipAPI ship, MarketAPI marketOrNull, CoreUITradeMode mode)
void applyEffectsAfterShipCreation(ShipAPI ship, String id)
String getCanNotBeInstalledNowReason(ShipAPI ship, MarketAPI marketOrNull, CoreUITradeMode mode)