Starsector API
Loading...
Searching...
No Matches
BaseHistorianOfferWithLocation.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.intel.bar.events.historian;
2
3import java.awt.Color;
4import java.util.Set;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CargoAPI;
10import com.fs.starfarer.api.campaign.InteractionDialogAPI;
11import com.fs.starfarer.api.campaign.PlanetAPI;
12import com.fs.starfarer.api.campaign.SectorEntityToken;
13import com.fs.starfarer.api.campaign.listeners.ExtraSalvageShownListener;
14import com.fs.starfarer.api.combat.ShipHullSpecAPI;
15import com.fs.starfarer.api.impl.campaign.ids.Factions;
16import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
17import com.fs.starfarer.api.impl.campaign.ids.Tags;
18import com.fs.starfarer.api.impl.campaign.missions.DelayedFleetEncounter;
19import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
20import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
21import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial;
22import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BreadcrumbSpecial;
23import com.fs.starfarer.api.ui.Alignment;
24import com.fs.starfarer.api.ui.SectorMapAPI;
25import com.fs.starfarer.api.ui.TooltipMakerAPI;
26import com.fs.starfarer.api.util.Misc;
27
28public abstract class BaseHistorianOfferWithLocation extends BaseHistorianOffer implements ExtraSalvageShownListener {
29
30 private SectorEntityToken entity;
31
32 public BaseHistorianOfferWithLocation(SectorEntityToken entity) {
33 super();
34 this.entity = entity;
35 }
36
37 @Override
38 public void init(InteractionDialogAPI dialog) {
39 super.init(dialog);
40
41 setDone(true);
42 setRemove(true);
44
45 Global.getSector().getIntelManager().addIntel(this, false, text);
46 Global.getSector().getListenerManager().addListener(this);
47
48 Misc.makeImportant(entity, getClass().getSimpleName());
49
50 CargoAPI cargo = Global.getFactory().createCargo(true);
51 addItemToCargo(cargo);
52 BaseSalvageSpecial.addExtraSalvage(cargo, entity.getMemoryWithoutUpdate(), -1);
53 }
54
55
56 public void reportExtraSalvageShown(SectorEntityToken entity) {
57 if (this.entity != entity) return;
58
59 Misc.makeUnimportant(entity, getClass().getSimpleName());
60 endIntel();
61 }
62
63 protected void endIntel() {
65 Global.getSector().addScript(this);
66
67 if (Misc.random.nextFloat() < 0.5f) return;
68 if (this instanceof WeaponBlueprintOffer) return;
69 if (this instanceof FighterBlueprintOffer) return;
70
71 DelayedFleetEncounter e = new DelayedFleetEncounter(null, "hist");
72 e.setDelayNone();
73 //e.setEncounterInHyper();
74 e.setLocationAnywhere(true, Factions.LUDDIC_PATH);
75 e.beginCreate();
76 e.triggerCreateFleet(FleetSize.LARGE, FleetQuality.DEFAULT, Factions.LUDDIC_PATH, FleetTypes.PATROL_LARGE, new Vector2f());
77
78 float q = 0f;
79 if (this instanceof ShipBlueprintOffer) {
80 ShipHullSpecAPI spec = Global.getSettings().getHullSpec(((ShipBlueprintOffer)this).data);
81 if (spec != null) {
82 q = Math.min(1f, (float)spec.getFleetPoints() / 20f);
83 }
84 } else if (this instanceof SpecialItemOffer) {
85 q = 1f;
86 }
87// else if (this instanceof WeaponBlueprintOffer) {
88// WeaponSpecAPI spec = Global.getSettings().getWeaponSpec(((WeaponBlueprintOffer)this).data);
89// if (spec != null) {
90// q = Math.min(0.5f, (float)spec.getOrdnancePointCost(null) / 40f);
91// }
92// } else if (this instanceof FighterBlueprintOffer) {
93// FighterWingSpecAPI spec = Global.getSettings().getFighterWingSpec(((FighterBlueprintOffer)this).data);
94// if (spec != null) {
95// q = Math.min(0.5f, (float)spec.getOpCost(null) / 40f);
96// }
97// }
98
99 e.triggerSetAdjustStrengthBasedOnQuality(true, q);
100 e.triggerSetStandardAggroInterceptFlags();
101 e.triggerSetFleetGenericHailPermanent("HistorianPatherHail");
102 e.triggerFleetPatherNoDefaultTithe();
103 e.endCreate();
104 }
105
106
107 protected abstract void addItemToCargo(CargoAPI loot);
108 public abstract String getName();
109
110
111 protected void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode) {
112 }
113
114
115 @Override
116 public void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode) {
117 if (!entity.isAlive()) {
118 endIntel();
119 }
120
121 Color c = getTitleColor(mode);
122 info.addPara(getName(), c, 0f);
123
124 addBulletPoints(info, mode);
125 }
126
127
128 public String getSmallDescriptionTitle() {
129 return getName();
130 }
131
132
133 @Override
134 public void createSmallDescription(TooltipMakerAPI info, float width, float height) {
135 Color h = Misc.getHighlightColor();
136 Color g = Misc.getGrayColor();
137 //Color c = getTitleColor(mode);
138 Color tc = Misc.getTextColor();
139 float pad = 3f;
140 float opad = 10f;
141
143
144 info.addPara("The historian, " + hd.getPerson().getNameString() + ", has given you information about " +
145 "the location of a valuable item.", opad);
146
147 info.addSectionHeading("Item", Alignment.MID, opad);
148
149 CargoAPI cargo = Global.getFactory().createCargo(true);
150 addItemToCargo(cargo);
151 info.showCargo(cargo, 10, true, opad);
152
153 info.addSectionHeading("Location", Alignment.MID, opad);
154 if (isEnding()) {
155 info.addPara("You have recovered this item.", opad);
156 } else {
157 String located = BreadcrumbSpecial.getLocatedString(entity, true);
158 if (entity instanceof PlanetAPI) {
159 PlanetAPI planet = (PlanetAPI) entity;
160 info.addPara("The item is in the ruins found on a " +
161 planet.getTypeNameWithLowerCaseWorld().toLowerCase() + " " + located + ".", opad);
162
163 info.addPara("A full survey will need to be run before the ruins can be explored.", opad);
164
165 info.showFullSurveyReqs(planet, true, opad);
166
167 } else if (entity.getCustomEntitySpec() != null) {
168 info.addPara("The item is inside " + entity.getCustomEntitySpec().getAOrAn() + " " +
169 entity.getCustomEntitySpec().getNameInText() + " " + located + ".", opad);
170 } else {
171 info.addPara("The item inside a " + entity.getName() + " " + located + ".", opad);
172 }
173 }
174
175
176 }
177
178
179 public Set<String> getIntelTags(SectorMapAPI map) {
180 Set<String> tags = super.getIntelTags(map);
181 tags.add(Tags.INTEL_EXPLORATION);
182 tags.add(Tags.INTEL_ACCEPTED);
183 return tags;
184 }
185
186 @Override
187 public SectorEntityToken getMapLocation(SectorMapAPI map) {
188 if (entity != null && entity.isDiscoverable() && entity.getStarSystem() != null) {
189 return entity.getStarSystem().getCenter();
190 }
191 return entity;
192 }
193
194}
195
196
197
198
199
200
201
202
203
204
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
CargoAPI createCargo(boolean unlimitedStacks)
ShipHullSpecAPI getHullSpec(String hullId)