1package com.fs.starfarer.api.impl.campaign.intel;
4import java.util.LinkedHashSet;
9import org.lwjgl.input.Keyboard;
10import org.lwjgl.util.vector.Vector2f;
12import com.fs.starfarer.api.EveryFrameScript;
13import com.fs.starfarer.api.Global;
14import com.fs.starfarer.api.campaign.FactionAPI;
15import com.fs.starfarer.api.campaign.InteractionDialogAPI;
16import com.fs.starfarer.api.campaign.LocationAPI;
17import com.fs.starfarer.api.campaign.SectorEntityToken;
18import com.fs.starfarer.api.campaign.StoryPointActionDelegate;
19import com.fs.starfarer.api.campaign.TextPanelAPI;
20import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
21import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
22import com.fs.starfarer.api.campaign.econ.MarketAPI;
23import com.fs.starfarer.api.campaign.rules.MemoryAPI;
24import com.fs.starfarer.api.impl.campaign.CommRelayEntityPlugin.CommSnifferReadableIntel;
25import com.fs.starfarer.api.impl.campaign.ids.Tags;
26import com.fs.starfarer.api.impl.campaign.rulecmd.CallEvent.CallableEvent;
27import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
28import com.fs.starfarer.api.ui.ButtonAPI;
29import com.fs.starfarer.api.ui.CustomPanelAPI;
30import com.fs.starfarer.api.ui.IntelUIAPI;
31import com.fs.starfarer.api.ui.LabelAPI;
32import com.fs.starfarer.api.ui.SectorMapAPI;
33import com.fs.starfarer.api.ui.TooltipMakerAPI;
34import com.fs.starfarer.api.util.Misc;
35import com.fs.starfarer.api.util.Misc.Token;
44 public static final String
BULLET =
" - ";
45 public static final String
INDENT =
" ";
155 Global.
getSector().getIntelManager().addIntelToTextPanel(
this, textPanel);
156 this.listInfoParam =
null;
160 if (textPanel ==
null) {
175 if (!sendIfHidden &&
isHidden())
return;
178 Global.
getSector().getCampaignUI().addMessage(
this, MessageClickAction.INTEL_TAB,
this);
179 this.listInfoParam =
null;
204 if (mode == ListInfoMode.IN_DESC) initPad = opad;
215 protected void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode,
boolean isUpdate,
216 Color tc,
float initPad) {
223 info.addPara(
getName(), c, 0f);
238 info.addPara(
"Override .createSmallDescription()", Misc.getNegativeHighlightColor(), 0f);
246 TooltipMakerAPI desc = panel.createUIElement(width, height,
true);
247 desc.addPara(
"Override .createLargeDescription()", Misc.getNegativeHighlightColor(), 0f);
248 panel.addUIElement(desc).inTL(0, 0);
277 Set<String> tags =
new LinkedHashSet<String>();
279 tags.add(Tags.INTEL_IMPORTANT);
282 tags.add(Tags.INTEL_NEW);
288 float dist = Misc.getDistanceLY(loc.getLocationInHyperspace(),
Global.
getSector().getPlayerFleet().getLocationInHyperspace());
290 tags.add(Tags.INTEL_LOCAL);
314 if (this.important !=
null && !this.important) {
315 this.important =
null;
334 prompt.addPara(
"Are you sure you want to permanently delete this fleet log entry?", Misc.getTextColor(), 0f);
358 (
int)(width), 20f, opad * 2f);
359 button.setShortcut(Keyboard.KEY_G,
true);
365 ui.recreateIntelUI();
368 ui.updateUIForItem(
this);
404 if (ts ==
null) ts = 0L;
419 return IntelSortTier.TIER_COMPLETED;
421 return IntelSortTier.TIER_3;
445 return TutorialMissionIntel.isTutorialInProgress() ||
hidden !=
null;
474 return canMakeVisible(playerInRelayRange, relay.getContainingLocation(),
475 relay.getLocationInHyperspace(),
true);
478 public boolean canMakeVisible(
boolean playerInRelayRange, LocationAPI conLoc, Vector2f hyperLoc,
479 boolean commSniffer) {
490 float commRange = 0f;
493 rangeLY = Math.max(rangeLY, commRange);
499 if (rangeLY <= 0 && !sameLoc) {
503 if (playerInRelayRange) {
504 float dist = Misc.getDistanceLY(
postingLocation.getLocationInHyperspace(),
506 return dist <= rangeLY;
509 float dist = Misc.getDistanceLY(
postingLocation.getLocationInHyperspace(),
511 return dist < commRange && (!commSniffer || playerInRelayRange);
513 return sameLoc && (!commSniffer || playerInRelayRange);
518 return playerInRelayRange;
537 if (ensureVisibleOutsideSystem) {
554 protected void bullet(TooltipMakerAPI info) {
555 info.setBulletedListMode(
" - ");
557 info.setTextWidthOverride(0);
559 info.setTextWidthOverride(LIST_ITEM_TEXT_WIDTH);
562 protected void indent(TooltipMakerAPI info) {
563 info.setBulletedListMode(
" ");
565 info.setTextWidthOverride(0);
567 info.setTextWidthOverride(LIST_ITEM_TEXT_WIDTH);
571 info.setBulletedListMode(
null);
572 info.setTextWidthOverride(0);
575 protected void addDays(TooltipMakerAPI info, String after,
float days) {
576 addDays(info, after, days,
null);
578 protected void addDays(TooltipMakerAPI info, String after,
float days, Color c) {
579 addDays(info, after, days, c, 0f);
581 protected void addDays(TooltipMakerAPI info, String after,
float days, Color c,
float pad) {
583 if (info.getBulletedListPrefix() !=
null) {
587 int d = (int) Math.round(days);
588 String daysStr =
"days";
593 if (c ==
null) c = Misc.getGrayColor();
594 info.addPara(pre +
"%s " + daysStr +
" " + after, pad, c,
595 Misc.getHighlightColor(),
"" + d);
599 return "" + (int) Math.round(days);
602 int d = (int) Math.round(days);
603 String daysStr =
"days";
617 if (
isEnding() && !isUpdate && mode != ListInfoMode.IN_DESC) {
618 return Misc.getGrayColor();
635 Color tc = Misc.getTextColor();
637 Color g = Misc.getGrayColor();
639 case INTEL:
return g;
640 case MAP_TOOLTIP:
return tc;
641 case IN_DESC:
return tc;
642 case MESSAGES:
return tc;
649 public boolean callEvent(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
655 return "ui_intel_something_posted";
659 return "ui_intel_update";
663 return "ui_intel_major_posted";
667 return "colony_threat";
671 return "ui_intel_log_update";
675 return "ui_intel_minor_message";
688 public ButtonAPI
addGenericButton(TooltipMakerAPI info,
float width, String text, Object data) {
692 public ButtonAPI
addGenericButton(TooltipMakerAPI info,
float width, Color tc, Color bg, String text, Object data) {
694 ButtonAPI button = info.addButton(text, data, tc, bg,
695 (
int)(width), 20f, opad * 2f);
713 public static void addMarketToList(TooltipMakerAPI info, MarketAPI market,
float pad) {
717 public static void addMarketToList(TooltipMakerAPI info, MarketAPI market,
float pad, Color tc) {
718 if (tc ==
null) tc = Misc.getTextColor();
720 if (info.getBulletedListPrefix() !=
null)
indent =
"";
721 LabelAPI label = info.addPara(
indent + market.getName() +
" (size %s, %s)",
723 pad, tc, market.getFaction().getBaseUIColor(),
724 "" + (
int) market.getSize(),
725 market.getFaction().getDisplayName());
727 label.setHighlight(
"" + (
int) market.getSize(), market.getFaction().getDisplayName());
728 label.setHighlightColors(Misc.getHighlightColor(), market.getFaction().getBaseUIColor());
731 public static void addMarketTable(TooltipMakerAPI info, Color base, Color dark, Color bright, List<MarketAPI> markets,
float width,
float pad) {
732 Color h = Misc.getHighlightColor();
734 info.beginTable(base, dark, bright, 20f,
"Colony", 130f,
"Faction", 130f,
"Size", width - 260f);
735 for (MarketAPI market : markets) {
737 info.addRow(market.getFaction().getBaseUIColor(), market.getName(),
738 market.getFaction().getBaseUIColor(), market.getFaction().getDisplayName(),
739 h,
"" + market.getSize());
742 info.addTable(
"None", 0, pad);
static SettingsAPI getSettings()
static SectorAPI getSector()
SectorEntityToken getMapLocation(SectorMapAPI map)
void buttonPressCancelled(Object buttonId, IntelUIAPI ui)
boolean isSendingUpdate()
Color getBackgroundGlowColor()
void indent(TooltipMakerAPI info)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode, boolean isUpdate, Color tc, float initPad)
static void addMarketTable(TooltipMakerAPI info, Color base, Color dark, Color bright, List< MarketAPI > markets, float width, float pad)
IntelSortTier getSortTier()
void endAfterDelay(float days)
void advanceImpl(float amount)
void createLargeDescription(CustomPanelAPI panel, float width, float height)
void createDeleteConfirmationPrompt(TooltipMakerAPI prompt)
void sendUpdate(Object listInfoParam, TextPanelAPI textPanel)
void setPlayerVisibleTimestamp(Long timestamp)
String getDays(float days)
float getCommRelayRange()
void setPostingLocation(SectorEntityToken postingLocation)
void setListInfoParam(Object listInfoParam)
Float endingTimeRemaining
void unindent(TooltipMakerAPI info)
float getTimeRemainingFraction()
ButtonAPI addGenericButton(TooltipMakerAPI info, float width, String text, Object data)
static String getSoundMinorMessage()
Float getPostingRangeLY()
void addDays(TooltipMakerAPI info, String after, float days)
void notifyPlayerAboutToOpenIntelScreen()
boolean isPlayerVisible()
Set< String > getIntelTags(SectorMapAPI map)
void addDeleteButton(TooltipMakerAPI info, float width, String delete)
void advance(float amount)
void createConfirmationPrompt(Object buttonId, TooltipMakerAPI prompt)
boolean canMakeVisibleToCommSniffer(boolean playerInRelayRange, SectorEntityToken relay)
void addDays(TooltipMakerAPI info, String after, float days, Color c, float pad)
static String BUTTON_DELETE
boolean callEvent(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
boolean autoAddCampaignMessage()
void reportMadeVisibleToPlayer()
void storyActionConfirmed(Object buttonId, IntelUIAPI ui)
void setNew(boolean isNew)
void reportPlayerClickedOn()
boolean hasLargeDescription()
transient Object listInfoParam
static void addMarketToList(TooltipMakerAPI info, MarketAPI market, float pad, Color tc)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
String getImportantIcon()
static String getSoundStandardUpdate()
void sendUpdateIfPlayerHasIntel(Object listInfoParam, boolean onlyIfImportant)
SectorEntityToken postingLocation
static String getSoundStandardPosting()
void addDeleteButton(TooltipMakerAPI info, float width)
void buttonPressConfirmed(Object buttonId, IntelUIAPI ui)
boolean hasImportantButton()
Long getPlayerVisibleTimestamp()
void createSmallDescription(TooltipMakerAPI info, float width, float height)
String getSmallDescriptionTitle()
boolean forceAddNextFrame()
SectorEntityToken getPostingLocation()
void sendUpdateIfPlayerHasIntel(Object listInfoParam, TextPanelAPI textPanel)
Object getListInfoParam()
static final String INDENT
Color getBulletColorForMode(ListInfoMode mode)
StoryPointActionDelegate getButtonStoryPointActionDelegate(Object buttonId)
static String getSoundColonyThreat()
List< ArrowData > getArrowData(SectorMapAPI map)
Color getCircleBorderColorOverride()
static String getSoundLogUpdate()
float getDaysSincePlayerVisible()
void sendUpdateIfPlayerHasIntel(Object listInfoParam, boolean onlyIfImportant, boolean sendIfHidden)
boolean hasSmallDescription()
void setImportant(Boolean important)
boolean doesButtonHaveConfirmDialog(Object buttonId)
ButtonAPI addGenericButton(TooltipMakerAPI info, float width, Color tc, Color bg, String text, Object data)
void setForceAddNextFrame(boolean add)
boolean canTurnImportantOff()
String getCancelText(Object buttonId)
void reportRemovedIntel()
static String getDaysString(float days)
void setHidden(boolean hidden)
void bullet(TooltipMakerAPI info)
String getConfirmText(Object buttonId)
boolean canMakeVisible(boolean playerInRelayRange, LocationAPI conLoc, Vector2f hyperLoc, boolean commSniffer)
void tableRowClicked(IntelUIAPI ui, TableRowClickData data)
String getCommMessageSound()
float getBaseDaysAfterEnd()
boolean shouldRemoveIntel()
float getConfirmationPromptWidth(Object buttonId)
static String getSoundMajorPosting()
FactionAPI getFactionForUIColors()
void addDays(TooltipMakerAPI info, String after, float days, Color c)
Color getTitleColor(ListInfoMode mode)
static void addMarketToList(TooltipMakerAPI info, MarketAPI market, float pad)
boolean canMakeVisibleToPlayer(boolean playerInRelayRange)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
void setPostingRangeLY(Float postingRangeLY)
void setPostingRangeLY(Float postingRangeLY, boolean ensureVisibleOutsideSystem)
static final String BULLET
float getFloat(String key)