1package com.fs.starfarer.api.impl.campaign.intel;
3import java.util.ArrayList;
4import java.util.LinkedHashSet;
11import org.lwjgl.input.Keyboard;
12import org.lwjgl.util.vector.Vector2f;
14import com.fs.starfarer.api.EveryFrameScript;
15import com.fs.starfarer.api.Global;
16import com.fs.starfarer.api.campaign.CampaignClockAPI;
17import com.fs.starfarer.api.campaign.FactionAPI;
18import com.fs.starfarer.api.campaign.InteractionDialogAPI;
19import com.fs.starfarer.api.campaign.LocationAPI;
20import com.fs.starfarer.api.campaign.SectorEntityToken;
21import com.fs.starfarer.api.campaign.StoryPointActionDelegate;
22import com.fs.starfarer.api.campaign.TextPanelAPI;
23import com.fs.starfarer.api.campaign.comm.CommMessageAPI.MessageClickAction;
24import com.fs.starfarer.api.campaign.comm.IntelInfoPlugin;
25import com.fs.starfarer.api.campaign.econ.MarketAPI;
26import com.fs.starfarer.api.campaign.rules.MemoryAPI;
27import com.fs.starfarer.api.impl.campaign.CommRelayEntityPlugin.CommSnifferReadableIntel;
28import com.fs.starfarer.api.impl.campaign.ids.Tags;
29import com.fs.starfarer.api.impl.campaign.rulecmd.CallEvent.CallableEvent;
30import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel;
31import com.fs.starfarer.api.ui.ButtonAPI;
32import com.fs.starfarer.api.ui.CustomPanelAPI;
33import com.fs.starfarer.api.ui.IntelUIAPI;
34import com.fs.starfarer.api.ui.LabelAPI;
35import com.fs.starfarer.api.ui.SectorMapAPI;
36import com.fs.starfarer.api.ui.TooltipMakerAPI;
37import com.fs.starfarer.api.util.Misc;
38import com.fs.starfarer.api.util.Misc.Token;
47 public static final String
BULLET =
" - ";
48 public static final String
INDENT =
" ";
162 this.listInfoParam =
null;
166 if (textPanel ==
null) {
181 if (!sendIfHidden &&
isHidden())
return;
185 this.listInfoParam =
null;
210 if (mode == ListInfoMode.IN_DESC) initPad = opad;
222 Color tc,
float initPad) {
283 Set<String> tags =
new LinkedHashSet<String>();
320 if (this.important !=
null && !this.important) {
321 this.important =
null;
364 (
int)(width), 20f, opad * 2f);
410 if (ts ==
null) ts = 0L;
425 return IntelSortTier.TIER_COMPLETED;
427 return IntelSortTier.TIER_3;
489 boolean commSniffer) {
500 float commRange = 0f;
503 rangeLY = Math.max(rangeLY, commRange);
509 if (rangeLY <= 0 && !sameLoc) {
513 if (playerInRelayRange) {
516 return dist <= rangeLY;
521 return dist < commRange && (!commSniffer || playerInRelayRange);
523 return sameLoc && (!commSniffer || playerInRelayRange);
528 return playerInRelayRange;
547 if (ensureVisibleOutsideSystem) {
586 addDays(info, after, days,
null);
589 addDays(info, after, days, c, 0f);
592 addDays(info,
"", after, days, c, pad);
600 int d = (int) Math.round(days);
601 String daysStr =
"days";
607 info.
addPara(before + pre +
"%s " + daysStr +
" " + after, pad, c,
612 return "" + (int) Math.round(days);
615 int d = (int) Math.round(days);
616 String daysStr =
"days";
630 if (
isEnding() && !isUpdate && mode != ListInfoMode.IN_DESC) {
652 case INTEL:
return g;
653 case MAP_TOOLTIP:
return tc;
654 case IN_DESC:
return tc;
655 case MESSAGES:
return tc;
668 return "ui_intel_something_posted";
672 return "ui_intel_update";
676 return "ui_intel_major_posted";
680 return "colony_threat";
684 return "ui_intel_log_update";
688 return "ui_intel_minor_message";
708 (
int)(width), 20f, opad * 2f);
747 info.
beginTable(base, dark, bright, 20f,
"Colony", 130f,
"Faction", 130f,
"Size", width - 260f);
750 info.
addRow(market.getFaction().getBaseUIColor(), market.getName(),
751 market.getFaction().getBaseUIColor(), market.getFaction().getDisplayName(),
752 h,
"" + market.getSize());
803 long msPerMin = 60L * 1000L;
804 long msPerHour = msPerMin * 60L;
805 long msPerDay = msPerHour * 24L;
807 long msPerMonth = msPerDay * 30L;
808 long msPerCycle = msPerDay * 365L;
814 List<String> highlights =
new ArrayList<>();
817 if (diff < msPerHour &&
false) {
818 long minutes = diff / msPerMin;
819 agoStr =
"" + minutes +
" " + (minutes == 1 ?
"minute" :
"minutes");
820 }
else if (diff < msPerDay &&
false) {
821 long hours = diff / msPerHour;
822 agoStr =
"" + hours +
" " + (hours == 1 ?
"hour" :
"hours");
823 long rem = diff - hours * msPerHour;
824 long minutes = rem / msPerMin;
825 agoStr +=
" " + minutes +
" " + (minutes == 1 ?
"minute" :
"minutes");
826 }
else if (diff < msPerMonth) {
827 long days = diff / msPerDay;
828 agoStr =
"" + days +
" " + (days == 1 ?
"day" :
"days");
829 highlights.add(
"" + days);
833 }
else if (diff < msPerCycle) {
834 long months = diff / msPerMonth;
835 agoStr =
"" + months +
" " + (months == 1 ?
"month" :
"months");
836 long rem = diff - months * msPerMonth;
837 long days = rem / msPerDay;
838 agoStr +=
" and " + days +
" " + (days == 1 ?
"day" :
"days");
839 highlights.add(
"" + months);
840 highlights.add(
"" + days);
842 long cycles = diff / msPerCycle;
843 agoStr =
"" + cycles +
" " + (cycles == 1 ?
"cycle" :
"cycles");
844 long rem = diff - cycles * msPerCycle;
845 long months = rem / msPerMonth;
846 agoStr +=
" and " + months +
" " + (months == 1 ?
"month" :
"months");
847 highlights.add(
"" + cycles);
848 highlights.add(
"" + months);
855 long days = diff / msPerDay;
857 info.
addPara(
"Log entry added " + agoStr +
" ago.", opad, tc, h, highlights.toArray(
new String[0]));
859 info.
addPara(
"Log entry added less than a day ago.", opad);
static SettingsAPI getSettings()
static SectorAPI getSector()
SectorEntityToken getMapLocation(SectorMapAPI map)
Set< String > getTagsForSort()
void addDays(TooltipMakerAPI info, String before, String after, float days, Color c, float pad)
void buttonPressCancelled(Object buttonId, IntelUIAPI ui)
String getSortStringNewestFirst()
boolean isSendingUpdate()
void addLogTimestamp(TooltipMakerAPI info, Color tc, float opad)
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
String getSortStringNewestFirst(String prefix)
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()
void setTagsForSort(Set< String > tagsForSort)
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)
transient Set< String > tagsForSort
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
static boolean isTutorialInProgress()
static Color getTextColor()
static float getDistanceLY(SectorEntityToken from, SectorEntityToken to)
static Color getNegativeHighlightColor()
static Color getGrayColor()
static Color getHighlightColor()
float getFloat(String key)
float getElapsedDaysSince(long timestamp)
float convertToDays(float realSeconds)
CampaignClockAPI createClock(long timestamp)
LocationAPI getContainingLocation()
void addMessage(String text)
CampaignFleetAPI getPlayerFleet()
CampaignClockAPI getClock()
FactionAPI getPlayerFaction()
IntelManagerAPI getIntelManager()
CampaignUIAPI getCampaignUI()
LocationAPI getContainingLocation()
Vector2f getLocationInHyperspace()
static final float LIST_ITEM_TEXT_WIDTH
static final float NEW_DAYS
void addIntelToTextPanel(IntelInfoPlugin plugin, TextPanelAPI textPanel)
TooltipMakerAPI createUIElement(float width, float height, boolean withScroller)
PositionAPI addUIElement(TooltipMakerAPI element)
void updateUIForItem(IntelInfoPlugin plugin)
void setHighlight(int start, int end)
void setHighlightColors(Color ... colors)
PositionAPI inTL(float xPad, float yPad)