001package com.fs.starfarer.api.impl.campaign.skills; 002 003import com.fs.starfarer.api.characters.ShipSkillEffect; 004import com.fs.starfarer.api.combat.MutableShipStatsAPI; 005import com.fs.starfarer.api.combat.ShipAPI.HullSize; 006import com.fs.starfarer.api.impl.campaign.ids.Stats; 007 008public class CarrierCommand { 009 010 public static final float FIGHTER_CREW_LOSS_REDUCTION = 20f; 011 public static final float FIGHTER_RAMAGE_REDUCTION = 20f; 012 public static final float FIGHTER_REPLACEMENT_RATE_BONUS = 20f; 013 014 015 016 public static class Level1 implements ShipSkillEffect { 017 018 public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) { 019 stats.getDynamic().getStat(Stats.FIGHTER_CREW_LOSS_MULT).modifyMult(id, 1f - FIGHTER_CREW_LOSS_REDUCTION / 100f); 020 } 021 022 public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) { 023 stats.getDynamic().getStat(Stats.FIGHTER_CREW_LOSS_MULT).unmodify(id); 024 } 025 026 public String getEffectDescription(float level) { 027 return "-" + (int)(FIGHTER_CREW_LOSS_REDUCTION) + "% crew lost due to fighter losses in combat"; 028 } 029 030 public String getEffectPerLevelDescription() { 031 return null; 032 } 033 034 public ScopeDescription getScopeDescription() { 035 return ScopeDescription.PILOTED_SHIP; 036 } 037 } 038 039 public static class Level2 implements ShipSkillEffect { 040 public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) { 041 stats.getHullDamageTakenMult().modifyMult(id, 1f - FIGHTER_RAMAGE_REDUCTION / 100f); 042 stats.getArmorDamageTakenMult().modifyMult(id, 1f - FIGHTER_RAMAGE_REDUCTION / 100f); 043 stats.getShieldDamageTakenMult().modifyMult(id, 1f - FIGHTER_RAMAGE_REDUCTION / 100f); 044 } 045 046 public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) { 047 stats.getHullDamageTakenMult().unmodify(id); 048 stats.getArmorDamageTakenMult().unmodify(id); 049 stats.getShieldDamageTakenMult().unmodify(id); 050 } 051 052 public String getEffectDescription(float level) { 053 return "-" + (int)(FIGHTER_RAMAGE_REDUCTION) + "% damage taken"; 054 } 055 056 public String getEffectPerLevelDescription() { 057 return null; 058 } 059 060 public ScopeDescription getScopeDescription() { 061 return ScopeDescription.SHIP_FIGHTERS; 062 } 063 } 064 065 public static class Level3 implements ShipSkillEffect { 066 067 public void apply(MutableShipStatsAPI stats, HullSize hullSize, String id, float level) { 068 float timeMult = 1f / ((100f + FIGHTER_REPLACEMENT_RATE_BONUS) / 100f); 069 stats.getFighterRefitTimeMult().modifyMult(id, timeMult); 070 } 071 072 public void unapply(MutableShipStatsAPI stats, HullSize hullSize, String id) { 073 stats.getFighterRefitTimeMult().unmodify(id); 074 } 075 076 public String getEffectDescription(float level) { 077 return "" + (int)(FIGHTER_REPLACEMENT_RATE_BONUS) + "% faster fighter replacements"; 078 } 079 080 public String getEffectPerLevelDescription() { 081 return null; 082 } 083 084 public ScopeDescription getScopeDescription() { 085 return ScopeDescription.PILOTED_SHIP; 086 } 087 } 088 089}