001package com.fs.starfarer.api.impl.campaign.graid; 002 003import java.awt.Color; 004import java.util.Random; 005 006import com.fs.starfarer.api.campaign.CargoAPI; 007import com.fs.starfarer.api.campaign.TextPanelAPI; 008import com.fs.starfarer.api.campaign.econ.Industry; 009import com.fs.starfarer.api.campaign.econ.Industry.IndustryTooltipMode; 010import com.fs.starfarer.api.campaign.econ.MarketAPI; 011import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator; 012import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel; 013import com.fs.starfarer.api.loading.IndustrySpecAPI; 014import com.fs.starfarer.api.ui.TooltipMakerAPI; 015import com.fs.starfarer.api.util.Misc; 016 017public class DisruptIndustryRaidObjectivePluginImpl extends BaseGroundRaidObjectivePluginImpl { 018 019 public static float DISRUPTION_DAYS_XP_MULT = 300; 020 021 public DisruptIndustryRaidObjectivePluginImpl(MarketAPI market, Industry target) { 022 super(market, target.getId()); 023 setSource(target); 024 } 025 026 @Override 027 public void setSource(Industry source) { 028 super.setSource(source); 029// RaidDangerLevel level = getDangerLevel(); 030// int marines = level.marineTokens; 031// if (source != null) { 032// marines = source.adjustMarineTokensToRaidItem(id, data, marines); 033// } 034// setMarinesRequired(marines); 035 } 036 037 @Override 038 public String getQuantityString(int marines) { 039 float days = source.getDisruptedDays(); 040 if (days > 0 && days < 1) days = 1; 041 days = Math.round(days); 042 if (days > 0) { 043 return "" + (int) days; 044 } 045 return ""; 046 } 047 048 @Override 049 public Color getQuantityColor(int marines) { 050 //if (getQuantityString(marines).isEmpty()) return Misc.getGrayColor(); 051 return Misc.getHighlightColor(); 052 } 053 054 public int getDisruptionDaysSort(int marines) { 055 marines = Math.max(1, marines); 056 return (int) getBaseDisruptDuration(marines); 057 } 058 059 public String getDisruptionDaysString(int marines) { 060 marines = Math.max(1, marines); 061 return "" + (int) getBaseDisruptDuration(marines); 062 } 063 064 public float getQuantity(int marines) { 065 return 0; 066 } 067 068 public int getValue(int marines) { 069 return 0; 070 } 071 072 public int getProjectedCreditsValue() { 073 return 0; 074 } 075 076 public IndustrySpecAPI getSpec() { 077 return getSource().getSpec(); 078 } 079 080 public RaidDangerLevel getDangerLevel() { 081 RaidDangerLevel level = getSpec().getDisruptDanger(); 082 return level; 083 } 084 085 public float getQuantitySortValue() { 086 IndustrySpecAPI spec = getSpec(); 087 float add = spec.getOrder(); 088 return QUANTITY_SORT_TIER_4 + add + 1000; 089 } 090 091 public String getName() { 092 return getSource().getCurrentName(); 093 } 094 095 @Override 096 public String getIconName() { 097 return getSource().getCurrentImage(); 098 } 099 100 protected float addedDisruptionDays = 0f; 101 public float getAddedDisruptionDays() { 102 return addedDisruptionDays; 103 } 104 105 public void setAddedDisruptionDays(float addedDisruptionDays) { 106 this.addedDisruptionDays = addedDisruptionDays; 107 } 108 109 public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) { 110 if (marinesAssigned <= 0) return 0; 111 112 float dur = getBaseDisruptDuration(marinesAssigned); 113 dur *= lootMult; 114 dur *= StarSystemGenerator.getNormalRandom(random, 1f, 1.1f); 115 if (dur < 2) dur = 2; 116 float already = source.getDisruptedDays(); 117 source.setDisrupted(already + dur); 118 addedDisruptionDays = dur; 119 120 //text.addPara("The raid was successful in disrupting " + source.getNameForModifier() + " operations." + 121 text.addPara("The raid was successful in disrupting " + source.getCurrentName() + " operations." + 122 " It will take at least %s days for normal operations to resume.", 123 Misc.getHighlightColor(), "" + (int) Math.round(source.getDisruptedDays())); 124 125 int xpGained = (int) (dur * DISRUPTION_DAYS_XP_MULT); 126 return xpGained; 127 } 128 129 public float getBaseDisruptDuration(int marines) { 130 if (marines <= 0) return 0f; 131 float already = source.getDisruptedDays(); 132 //float dur = marines * Global.getSettings().getFloat("raidDisruptDurationPerMarineToken"); 133 float dur = marines * source.getSpec().getDisruptDanger().disruptionDays; 134 dur *= dur / (dur + already); 135 return dur; 136 } 137 138 @Override 139 public boolean hasTooltip() { 140 return true; 141 } 142 143 @Override 144 public float getTooltipWidth() { 145 return getSource().getTooltipWidth(); 146 } 147 148 @Override 149 public void createTooltip(TooltipMakerAPI t, boolean expanded) { 150 getSource().createTooltip(IndustryTooltipMode.NORMAL, t, expanded); 151// float opad = 10f; 152// float pad = 3f; 153// Color h = Misc.getHighlightColor(); 154// Color bad = Misc.getNegativeHighlightColor(); 155// Color good = Misc.getPositiveHighlightColor(); 156// 157// //Description desc = Global.getSettings().getDescription(id, Type.RESOURCE); 158// 159// t.addPara(getItemSpec().getDescFirstPara(), 0f); 160// 161// t.addPara("Base value: %s per unit", opad, h, Misc.getDGSCredits(getItemSpec().getBasePrice())); 162 } 163} 164 165 166 167