001package com.fs.starfarer.api.impl.campaign.intel.bar.events; 002 003import java.util.Map; 004import java.util.Random; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.InteractionDialogAPI; 008import com.fs.starfarer.api.campaign.PersonImportance; 009import com.fs.starfarer.api.campaign.TextPanelAPI; 010import com.fs.starfarer.api.campaign.econ.MarketAPI; 011import com.fs.starfarer.api.campaign.rules.MemoryAPI; 012import com.fs.starfarer.api.characters.FullName.Gender; 013import com.fs.starfarer.api.characters.PersonAPI; 014import com.fs.starfarer.api.impl.campaign.ids.Factions; 015import com.fs.starfarer.api.impl.campaign.ids.Ranks; 016import com.fs.starfarer.api.impl.campaign.ids.Tags; 017import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarData; 018import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel; 019import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel; 020import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel; 021import com.fs.starfarer.api.impl.campaign.intel.events.PirateBasePirateActivityCause2; 022import com.fs.starfarer.api.util.Misc; 023 024public class PirateBaseRumorBarEvent extends BaseBarEvent { 025 protected PirateBaseIntel intel; 026 protected long seed; 027 028 public boolean isAlwaysShow() { 029 return true; 030 } 031 032 public PirateBaseRumorBarEvent(PirateBaseIntel intel) { 033 this.intel = intel; 034 seed = Misc.random.nextLong(); 035 } 036 037 public boolean shouldShowAtMarket(MarketAPI market) { 038 if (intel.getTarget() == market.getContainingLocation()) { 039 return true; 040 } 041 if (market.isPlayerOwned()) { 042 HostileActivityEventIntel ha = HostileActivityEventIntel.get(); 043 if (ha != null) { 044 return PirateBasePirateActivityCause2.getBaseIntel(market.getStarSystem()) == intel; 045 } 046// HostileActivityIntel hai = HostileActivityIntel.get(market.getStarSystem()); 047// if (hai != null) { 048// PirateBasePirateActivityCause cause = (PirateBasePirateActivityCause)hai.getActivityCause( 049// PirateHostileActivityPluginImpl.class, PirateBasePirateActivityCause.class); 050// if (cause != null) { 051// return cause.getBaseIntel() == intel; 052// } 053// } 054 } 055 return false; 056 } 057 058 @Override 059 public boolean shouldRemoveEvent() { 060 return intel.isEnding() || intel.isEnded() || intel.isPlayerVisible(); 061 } 062 063 064 transient protected boolean done = false; 065 transient protected Gender gender; 066 transient protected PersonAPI person; 067 068 @Override 069 public void addPromptAndOption(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) { 070 super.addPromptAndOption(dialog, memoryMap); 071 072 Random random = new Random(seed + dialog.getInteractionTarget().getMarket().getId().hashCode()); 073 074 gender = Gender.MALE; 075 if (random.nextFloat() > 0.5f) { 076 gender = Gender.FEMALE; 077 } 078 person = Global.getSector().getFaction(Factions.PIRATES).createRandomPerson(gender, random); 079 person.setPostId(Ranks.POST_MINORCRIMINAL); 080 person.setImportanceAndVoice(PersonImportance.VERY_LOW, random); 081 person.addTag(Tags.CONTACT_UNDERWORLD); 082 083 String himOrHer = "him"; 084 if (gender == Gender.FEMALE) himOrHer = "her"; 085 086 TextPanelAPI text = dialog.getTextPanel(); 087 text.addPara("A grizzled spacer sits at the bar, downing shots " + 088 "of what looks like the cheapest liquor available."); 089 090 dialog.getOptionPanel().addOption( 091 "Approach the spacer and offer to buy " + himOrHer + " something more palatable", 092 this); 093 } 094 095 @Override 096 public void init(InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap) { 097 super.init(dialog, memoryMap); 098 099 String himOrHerSelf = "himself"; 100 if (gender == Gender.FEMALE) himOrHerSelf = "herself"; 101 102 TextPanelAPI text = dialog.getTextPanel(); 103 text.addPara("You keep the drinks flowing and mostly just listen, " + 104 "letting the spacer unburden " + himOrHerSelf + "."); 105 106 //PersonAPI person = Global.getSector().getFaction(Factions.PIRATES).createRandomPerson(gender); 107 dialog.getVisualPanel().showPersonInfo(person, true); 108 109 done = true; 110 intel.makeKnown(); 111 intel.sendUpdate(PirateBaseIntel.DISCOVERED_PARAM, text); 112 113 PortsideBarData.getInstance().removeEvent(this); 114 115 ContactIntel.addPotentialContact(person, dialog.getInteractionTarget().getMarket(), text); 116 } 117 118 119 @Override 120 public void optionSelected(String optionText, Object optionData) { 121 } 122 123 @Override 124 public boolean isDialogFinished() { 125 return done; 126 } 127 128 129 protected boolean showCargoCap() { 130 return false; 131 } 132} 133 134 135