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