001package com.fs.starfarer.api.impl.campaign.graid; 002 003import java.awt.Color; 004import java.util.Random; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.CargoAPI; 008import com.fs.starfarer.api.campaign.CargoStackAPI; 009import com.fs.starfarer.api.campaign.SpecialItemData; 010import com.fs.starfarer.api.campaign.SpecialItemSpecAPI; 011import com.fs.starfarer.api.campaign.TextPanelAPI; 012import com.fs.starfarer.api.campaign.CargoAPI.CargoItemType; 013import com.fs.starfarer.api.campaign.econ.Industry; 014import com.fs.starfarer.api.campaign.econ.MarketAPI; 015import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.MarketCMD.RaidDangerLevel; 016import com.fs.starfarer.api.ui.TooltipMakerAPI; 017import com.fs.starfarer.api.util.Misc; 018 019public class SpecialItemRaidObjectivePluginImpl extends BaseGroundRaidObjectivePluginImpl { 020 021 protected String data; 022 023 public SpecialItemRaidObjectivePluginImpl(MarketAPI market, String id, String data, Industry source) { 024 super(market, id); 025 this.data = data; 026 setSource(source); 027 } 028 029 @Override 030 public void setSource(Industry source) { 031 super.setSource(source); 032 RaidDangerLevel level = getDangerLevel(); 033 int marines = level.marineTokens; 034 if (source != null) { 035 marines = source.adjustMarineTokensToRaidItem(id, data, marines); 036 } 037 setMarinesRequired(marines); 038 } 039 040 public String getData() { 041 return data; 042 } 043 044 public void setData(String data) { 045 this.data = data; 046 } 047 048 public float getQuantity(int marines) { 049 return 1; 050 } 051 052 public int getValue(int marines) { 053 return (int) (getQuantity(marines) * getItemSpec().getBasePrice()); 054 } 055 056 public int getCargoSpaceNeeded() { 057 return (int) getItemSpec().getCargoSpace(); 058 } 059 060 public int getFuelSpaceNeeded() { 061 return 0; 062 } 063 064 public int getProjectedCreditsValue() { 065 return (int) getItemSpec().getBasePrice(); 066 } 067 068 public int getDeficitCaused() { 069 return 0; 070 } 071 072 public SpecialItemSpecAPI getItemSpec() { 073 return Global.getSettings().getSpecialItemSpec(id); 074 } 075 076 public RaidDangerLevel getDangerLevel() { 077 RaidDangerLevel level = getItemSpec().getBaseDanger(); 078 if (source != null) { 079 level = source.adjustItemDangerLevel(id, null, level); 080 } 081 return level; 082 } 083 084 public float getQuantitySortValue() { 085 SpecialItemSpecAPI spec = getItemSpec(); 086 float add = 0; 087 if (spec != null) { 088 add = spec.getOrder(); 089 } 090 return QUANTITY_SORT_TIER_2 + add + 1000; 091 } 092 093 public String getName() { 094 return getItemSpec().getName(); 095 } 096 097 public CargoStackAPI getStackForIcon() { 098 CargoStackAPI stack = Global.getFactory().createCargoStack(CargoItemType.SPECIAL, 099 new SpecialItemData(getId(), getData()), null); 100 return stack; 101 } 102 103 public int performRaid(CargoAPI loot, Random random, float lootMult, TextPanelAPI text) { 104 if (marinesAssigned <= 0) return 0; 105 106 if (source != null) { 107 SpecialItemData sid = source.getSpecialItem(); 108 if ((getId() == null || getId().equals(sid.getId())) && 109 (getData() == null || getData().equals(sid.getData()))) { 110 source.setSpecialItem(null); 111 } 112 } 113 loot.addSpecial(new SpecialItemData(getId(), getData()), 1); 114 115 int xpGained = (int) (1 * getItemSpec().getBasePrice() * XP_GAIN_VALUE_MULT); 116 return xpGained; 117 } 118 119 @Override 120 public boolean hasTooltip() { 121 return true; 122 } 123 124 @Override 125 public void createTooltip(TooltipMakerAPI t, boolean expanded) { 126 float opad = 10f; 127 float pad = 3f; 128 Color h = Misc.getHighlightColor(); 129 Color bad = Misc.getNegativeHighlightColor(); 130 Color good = Misc.getPositiveHighlightColor(); 131 132 //Description desc = Global.getSettings().getDescription(id, Type.RESOURCE); 133 134 t.addPara(getItemSpec().getDescFirstPara(), 0f); 135 136 t.addPara("Base value: %s per unit", opad, h, Misc.getDGSCredits(getItemSpec().getBasePrice())); 137 } 138} 139 140 141 142