001package com.fs.starfarer.api.campaign.events;
002
003import java.util.List;
004
005import com.fs.starfarer.api.campaign.LocationAPI;
006import com.fs.starfarer.api.campaign.SectorEntityToken;
007import com.fs.starfarer.api.campaign.econ.MarketAPI;
008
009public interface CampaignEventManagerAPI {
010        EventProbabilityAPI getProbability(String eventType, SectorEntityToken eventTargetEntity);
011        EventProbabilityAPI getProbability(String eventType, LocationAPI eventTargetLocation);
012        EventProbabilityAPI getProbability(String eventType, CampaignEventTarget target);
013        EventProbabilityAPI getProbability(String eventType, MarketAPI market);
014        EventProbabilityAPI getProbability(String eventType, Object custom);
015        
016        /**
017         * Whether an event associated with this probability is already ongoing.
018         * Only one event of a given type can occur at a time for a given event target.
019         * @param ep
020         * @return
021         */
022        boolean isOngoing(EventProbabilityAPI ep);
023        boolean isOngoing(CampaignEventTarget eventTarget, String eventType);
024        
025        /**
026         * Starts an event immediately, bypassing any probability checks. Returns null
027         * if failed to start the event because there's already an ongoing event of the
028         * same type, or the event plugin otherwise.
029         * 
030         * param gets passed in to the event via CampaignEventPlugin.setParam().
031         * 
032         * @param eventTarget can be null if the event doesn't have a specific target.
033         * @param eventType
034         * @param param
035         * @return
036         */
037        CampaignEventPlugin startEvent(CampaignEventTarget eventTarget, String eventType, Object param);
038        
039        
040        CampaignEventPlugin getOngoingEvent(CampaignEventTarget eventTarget, String eventType);
041        void endEvent(CampaignEventPlugin event);
042        
043        /**
044         * Initialize the event plugin, but don't actually start the event.
045         * Useful if the event is needed for doing token replacement in reports, for example, but
046         * it's not desired for the event to start.
047         * 
048         * Will return null if the event can't be created for any reason - for example, if another event
049         * of the same type is ongoing for this target and the event doesn't allow multiple ongoing
050         * at the same time.
051         * 
052         * @param eventTarget
053         * @param eventType
054         * @param param
055         * @return
056         */
057        CampaignEventPlugin primeEvent(CampaignEventTarget eventTarget, String eventType, Object param);
058        
059        /**
060         * Start an event previously created with primeEvent()
061         * @param primedEvent
062         */
063        void startEvent(CampaignEventPlugin primedEvent);
064        int getNumOngoing(String eventType);
065        List<CampaignEventPlugin> getOngoingEvents();
066}
067
068
069