001package com.fs.starfarer.api.impl.combat; 002 003import java.awt.Color; 004import java.util.ArrayList; 005import java.util.EnumSet; 006import java.util.List; 007 008import com.fs.starfarer.api.Global; 009import com.fs.starfarer.api.combat.MutableShipStatsAPI; 010import com.fs.starfarer.api.combat.ShipAPI; 011import com.fs.starfarer.api.combat.WeaponAPI.WeaponType; 012import com.fs.starfarer.api.util.Misc; 013 014public class TargetingFeedStats extends BaseShipSystemScript { 015 public static final Object KEY_JITTER = new Object(); 016 017 public static final float DAMAGE_INCREASE_PERCENT = 50; 018 019 public static final Color JITTER_UNDER_COLOR = new Color(255,50,0,125); 020 public static final Color JITTER_COLOR = new Color(255,50,0,75); 021 022 023 public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) { 024 ShipAPI ship = null; 025 if (stats.getEntity() instanceof ShipAPI) { 026 ship = (ShipAPI) stats.getEntity(); 027 } else { 028 return; 029 } 030 031 032 if (effectLevel > 0) { 033 float jitterLevel = effectLevel; 034 float maxRangeBonus = 5f; 035 float jitterRangeBonus = jitterLevel * maxRangeBonus; 036 for (ShipAPI fighter : getFighters(ship)) { 037 if (fighter.isHulk()) continue; 038 MutableShipStatsAPI fStats = fighter.getMutableStats(); 039// fStats.getBallisticWeaponDamageMult().modifyPercent(id, DAMAGE_INCREASE_PERCENT * effectLevel); 040// fStats.getEnergyWeaponDamageMult().modifyPercent(id, DAMAGE_INCREASE_PERCENT * effectLevel); 041// fStats.getMissileWeaponDamageMult().modifyPercent(id, DAMAGE_INCREASE_PERCENT * effectLevel); 042 043 fStats.getBallisticWeaponDamageMult().modifyMult(id, 1f + 0.01f * DAMAGE_INCREASE_PERCENT * effectLevel); 044 fStats.getEnergyWeaponDamageMult().modifyMult(id, 1f + 0.01f * DAMAGE_INCREASE_PERCENT * effectLevel); 045 fStats.getMissileWeaponDamageMult().modifyMult(id, 1f + 0.01f * DAMAGE_INCREASE_PERCENT * effectLevel); 046 047 if (jitterLevel > 0) { 048 //fighter.setWeaponGlow(effectLevel, new Color(255,50,0,125), EnumSet.allOf(WeaponType.class)); 049 fighter.setWeaponGlow(effectLevel, Misc.setAlpha(JITTER_UNDER_COLOR, 255), EnumSet.allOf(WeaponType.class)); 050 051 fighter.setJitterUnder(KEY_JITTER, JITTER_COLOR, jitterLevel, 5, 0f, jitterRangeBonus); 052 fighter.setJitter(KEY_JITTER, JITTER_UNDER_COLOR, jitterLevel, 2, 0f, 0 + jitterRangeBonus * 1f); 053 Global.getSoundPlayer().playLoop("system_targeting_feed_loop", ship, 1f, 1f, fighter.getLocation(), fighter.getVelocity()); 054 } 055 } 056 } 057 } 058 059 private List<ShipAPI> getFighters(ShipAPI carrier) { 060 List<ShipAPI> result = new ArrayList<ShipAPI>(); 061 062// this didn't catch fighters returning for refit 063// for (FighterLaunchBayAPI bay : carrier.getLaunchBaysCopy()) { 064// if (bay.getWing() == null) continue; 065// result.addAll(bay.getWing().getWingMembers()); 066// } 067 068 for (ShipAPI ship : Global.getCombatEngine().getShips()) { 069 if (!ship.isFighter()) continue; 070 if (ship.getWing() == null) continue; 071 if (ship.getWing().getSourceShip() == carrier) { 072 result.add(ship); 073 } 074 } 075 076 return result; 077 } 078 079 080 public void unapply(MutableShipStatsAPI stats, String id) { 081 ShipAPI ship = null; 082 if (stats.getEntity() instanceof ShipAPI) { 083 ship = (ShipAPI) stats.getEntity(); 084 } else { 085 return; 086 } 087 for (ShipAPI fighter : getFighters(ship)) { 088 if (fighter.isHulk()) continue; 089 MutableShipStatsAPI fStats = fighter.getMutableStats(); 090 fStats.getBallisticWeaponDamageMult().unmodify(id); 091 fStats.getEnergyWeaponDamageMult().unmodify(id); 092 fStats.getMissileWeaponDamageMult().unmodify(id); 093 } 094 } 095 096 097 public StatusData getStatusData(int index, State state, float effectLevel) { 098 float percent = DAMAGE_INCREASE_PERCENT * effectLevel; 099 if (index == 0) { 100 //return new StatusData("+" + (int)percent + "% fighter damage", false); 101 return new StatusData("" + Misc.getRoundedValueMaxOneAfterDecimal(1f + DAMAGE_INCREASE_PERCENT * effectLevel * 0.01f) + "x fighter damage", false); 102 } 103 return null; 104 } 105 106 107} 108 109 110 111 112 113 114 115