001package com.fs.starfarer.api.impl.combat; 002 003import java.util.HashMap; 004import java.util.Map; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.combat.MutableShipStatsAPI; 008import com.fs.starfarer.api.combat.ShipAPI; 009import com.fs.starfarer.api.combat.ShipAPI.HullSize; 010import com.fs.starfarer.api.combat.ShipSystemAPI; 011import com.fs.starfarer.api.impl.campaign.ids.Tags; 012 013public class DamperFieldStats extends BaseShipSystemScript { 014 015 private static Map mag = new HashMap(); 016 static { 017 mag.put(HullSize.FIGHTER, 0.33f); 018 mag.put(HullSize.FRIGATE, 0.33f); 019 mag.put(HullSize.DESTROYER, 0.33f); 020 mag.put(HullSize.CRUISER, 0.5f); 021 mag.put(HullSize.CAPITAL_SHIP, 0.5f); 022 } 023 024 protected Object STATUSKEY1 = new Object(); 025 026 //public static final float INCOMING_DAMAGE_MULT = 0.25f; 027 //public static final float INCOMING_DAMAGE_CAPITAL = 0.5f; 028 029 public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) { 030 effectLevel = 1f; 031 032 float mult = (Float) mag.get(HullSize.CRUISER); 033 if (stats.getVariant() != null) { 034 mult = (Float) mag.get(stats.getVariant().getHullSize()); 035 } 036 stats.getHullDamageTakenMult().modifyMult(id, 1f - (1f - mult) * effectLevel); 037 stats.getArmorDamageTakenMult().modifyMult(id, 1f - (1f - mult) * effectLevel); 038 stats.getEmpDamageTakenMult().modifyMult(id, 1f - (1f - mult) * effectLevel); 039 040 041 ShipAPI ship = null; 042 boolean player = false; 043 if (stats.getEntity() instanceof ShipAPI) { 044 ship = (ShipAPI) stats.getEntity(); 045 player = ship == Global.getCombatEngine().getPlayerShip(); 046 } 047 if (player) { 048 ShipSystemAPI system = getDamper(ship); 049 if (system != null) { 050 float percent = (1f - mult) * effectLevel * 100; 051 Global.getCombatEngine().maintainStatusForPlayerShip(STATUSKEY1, 052 system.getSpecAPI().getIconSpriteName(), system.getDisplayName(), 053 (int) Math.round(percent) + "% less damage taken", false); 054 } 055 } 056 } 057 058 public static ShipSystemAPI getDamper(ShipAPI ship) { 059// ShipSystemAPI system = ship.getSystem(); 060// if (system != null && system.getId().equals("damper")) return system; 061// if (system != null && system.getId().equals("damper_omega")) return system; 062// if (system != null && system.getSpecAPI() != null && system.getSpecAPI().hasTag(Tags.SYSTEM_USES_DAMPER_FIELD_AI)) return system; 063// return ship.getPhaseCloak(); 064 ShipSystemAPI system = ship.getPhaseCloak(); 065 if (system != null && system.getId().equals("damper")) return system; 066 if (system != null && system.getId().equals("damper_omega")) return system; 067 if (system != null && system.getSpecAPI() != null && system.getSpecAPI().hasTag(Tags.SYSTEM_USES_DAMPER_FIELD_AI)) return system; 068 return ship.getSystem(); 069 } 070 071 public void unapply(MutableShipStatsAPI stats, String id) { 072 stats.getHullDamageTakenMult().unmodify(id); 073 stats.getArmorDamageTakenMult().unmodify(id); 074 stats.getEmpDamageTakenMult().unmodify(id); 075 } 076 077 078// public StatusData getStatusData(int index, State state, float effectLevel) { 079// float mult = (Float) mag.get(HullSize.CRUISER); 080// if (stats.getVariant() != null) { 081// mult = (Float) mag.get(stats.getVariant().getHullSize()); 082// } 083// effectLevel = 1f; 084// float percent = (1f - INCOMING_DAMAGE_MULT) * effectLevel * 100; 085// if (index == 0) { 086// return new StatusData((int) percent + "% less damage taken", false); 087// } 088// return null; 089// } 090}