Starsector API
Loading...
Searching...
No Matches
PDIntegration.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.hullmods;
2
3import org.lwjgl.util.vector.Vector2f;
4
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;
21
22public class PDIntegration extends BaseHullMod {
23
24 public static int OP_REDUCTION = 3;
25 public static float DAMAGE_BONUS_PERCENT = 25f;
26
27 public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id) {
28 stats.getDynamic().getMod(Stats.SMALL_PD_MOD).modifyFlat(id, -OP_REDUCTION);
29 }
30
31 @Override
32 public void applyEffectsAfterShipCreation(ShipAPI ship, String id) {
33 ship.addListener(new PDIDamageDealtMod());
34 }
35
36 public String getDescriptionParam(int index, HullSize hullSize, ShipAPI ship) {
37 if (index == 0) return "" + OP_REDUCTION;
38 if (index == 1) return "" + (int) Math.round(DAMAGE_BONUS_PERCENT) + "%";
39 return null;
40 }
41
42 @Override
43 public boolean affectsOPCosts() {
44 return true;
45 }
46
47 @Override
48 public boolean canBeAddedOrRemovedNow(ShipAPI ship, MarketAPI marketOrNull, CoreUITradeMode mode) {
49 if (ship == null || ship.getVariant() == null) return true; // autofit
50 if (!ship.getVariant().hasHullMod("pdintegration")) return true; // can always add
51
52 for (String slotId : ship.getVariant().getFittedWeaponSlots()) {
53 WeaponSpecAPI spec = ship.getVariant().getWeaponSpec(slotId);
54 if (spec.getAIHints().contains(AIHints.PD)) return false;
55 }
56 return true;
57 }
58
59 @Override
60 public String getCanNotBeInstalledNowReason(ShipAPI ship, MarketAPI marketOrNull, CoreUITradeMode mode) {
61 return "Can not remove while ship has point-defense weapons installed";
62 }
63
64
65
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();
77 }
78
79 if (weapon == null) return null;
80 if (!weapon.hasAIHint(AIHints.PD)) return null;
81
82 String id = "pdi_dam_mod";
83 damage.getModifier().modifyPercent(id, DAMAGE_BONUS_PERCENT);
84
85 return id;
86 }
87 }
88
89}
90
91
92
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)