001package com.fs.starfarer.api.impl.campaign.skills; 002 003import java.awt.Color; 004 005import com.fs.starfarer.api.campaign.FleetDataAPI; 006import com.fs.starfarer.api.characters.FleetStatsSkillEffect; 007import com.fs.starfarer.api.characters.FleetTotalItem; 008import com.fs.starfarer.api.characters.FleetTotalSource; 009import com.fs.starfarer.api.characters.MutableCharacterStatsAPI; 010import com.fs.starfarer.api.characters.ShipSkillEffect; 011import com.fs.starfarer.api.characters.SkillSpecAPI; 012import com.fs.starfarer.api.combat.MutableShipStatsAPI; 013import com.fs.starfarer.api.combat.ShipAPI.HullSize; 014import com.fs.starfarer.api.fleet.MutableFleetStatsAPI; 015import com.fs.starfarer.api.impl.campaign.ids.Stats; 016import com.fs.starfarer.api.ui.TooltipMakerAPI; 017import com.fs.starfarer.api.util.Misc; 018 019public class TacticalDrills { 020 021 public static float DAMAGE_PERCENT = 5; 022 023 public static int ATTACK_BONUS = 50; 024 public static float CASUALTIES_MULT = 0.75f; 025 026 027 public static class Level1 extends BaseSkillEffectDescription implements ShipSkillEffect, FleetTotalSource { 028 029 public FleetTotalItem getFleetTotalItem() { 030 return getCombatOPTotal(); 031 } 032 033 public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) { 034 if (!isCivilian(stats)) { 035 float damBonus = computeAndCacheThresholdBonus(stats, "td_dam", DAMAGE_PERCENT, ThresholdBonusType.OP); 036 stats.getBallisticWeaponDamageMult().modifyPercent(id, damBonus); 037 stats.getEnergyWeaponDamageMult().modifyPercent(id, damBonus); 038 stats.getMissileWeaponDamageMult().modifyPercent(id, damBonus); 039 } 040 } 041 042 public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) { 043 stats.getBallisticWeaponDamageMult().unmodifyPercent(id); 044 stats.getEnergyWeaponDamageMult().unmodifyPercent(id); 045 stats.getMissileWeaponDamageMult().unmodifyPercent(id); 046 } 047 048 public String getEffectDescription(float level) { 049 return null; 050 } 051 052 public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 053 TooltipMakerAPI info, float width) { 054 init(stats, skill); 055 056 FleetDataAPI data = getFleetData(null); 057 float damBonus = computeAndCacheThresholdBonus(data, stats, "td_dam", DAMAGE_PERCENT, ThresholdBonusType.OP); 058 059 info.addPara("+%s weapon damage for combat ships (maximum: %s)", 0f, hc, hc, 060 "" + (int) damBonus + "%", 061 "" + (int) DAMAGE_PERCENT + "%"); 062 addOPThresholdInfo(info, data, stats, OP_THRESHOLD); 063 064 //info.addSpacer(5f); 065 } 066 067 public ScopeDescription getScopeDescription() { 068 return ScopeDescription.ALL_SHIPS; 069 } 070 } 071 072 073 public static class Level2 extends BaseSkillEffectDescription implements FleetStatsSkillEffect { 074 public void apply(MutableFleetStatsAPI stats, String id, float level) { 075 stats.getDynamic().getMod(Stats.PLANETARY_OPERATIONS_MOD).modifyPercent(id, ATTACK_BONUS, "Tactical drills"); 076 } 077 078 public void unapply(MutableFleetStatsAPI stats, String id) { 079 stats.getDynamic().getMod(Stats.PLANETARY_OPERATIONS_MOD).unmodifyPercent(id); 080 } 081 082 public void createCustomDescription(MutableCharacterStatsAPI stats, SkillSpecAPI skill, 083 TooltipMakerAPI info, float width) { 084 init(stats, skill); 085 086 float opad = 10f; 087 Color c = Misc.getBasePlayerColor(); 088 //info.addPara("Affects: %s", opad + 5f, Misc.getGrayColor(), c, "fleet"); 089 info.addPara("Affects: %s", opad + 5f, Misc.getGrayColor(), c, "ground operations"); 090 info.addSpacer(opad); 091 info.addPara("+%s effectiveness of ground operations such as raids", 0f, hc, hc, 092 "" + (int) ATTACK_BONUS + "%"); 093 } 094 095 public String getEffectDescription(float level) { 096 return "+" + (int)(ATTACK_BONUS) + "% effectiveness of ground operations such as raids"; 097 } 098 099 public String getEffectPerLevelDescription() { 100 return null; 101 } 102 103 public ScopeDescription getScopeDescription() { 104 return ScopeDescription.FLEET; 105 } 106 } 107 108 public static class Level3 implements FleetStatsSkillEffect { 109 public void apply(MutableFleetStatsAPI stats, String id, float level) { 110 stats.getDynamic().getStat(Stats.PLANETARY_OPERATIONS_CASUALTIES_MULT).modifyMult(id, CASUALTIES_MULT, "Tactical drills"); 111 } 112 113 public void unapply(MutableFleetStatsAPI stats, String id) { 114 stats.getDynamic().getStat(Stats.PLANETARY_OPERATIONS_CASUALTIES_MULT).unmodifyMult(id); 115 } 116 117 public String getEffectDescription(float level) { 118 return "-" + (int)Math.round((1f - CASUALTIES_MULT) * 100f) + "% marine casualties suffered during ground operations such as raids"; 119 } 120 121 public String getEffectPerLevelDescription() { 122 return null; 123 } 124 125 public ScopeDescription getScopeDescription() { 126 return ScopeDescription.FLEET; 127 } 128 } 129} 130 131 132 133 134