001package com.fs.starfarer.api.impl.campaign.intel.bar.events;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.impl.campaign.ids.Tags;
005import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarEvent;
006import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionBarEventWrapper;
007import com.fs.starfarer.api.loading.BarEventSpec;
008
009public class SpecBarEventCreator extends BaseBarEventCreator {
010        
011        protected transient BarEventSpec spec = null;
012        protected String specId = null;
013        protected boolean wasAutoAdded = false;
014        
015        public SpecBarEventCreator(String specId) {
016                this.specId = specId;
017                readResolve();
018        }
019        
020        protected Object readResolve() {
021                spec = Global.getSettings().getBarEventSpec(specId);
022                return this;
023        }
024        
025        
026        public boolean wasAutoAdded() {
027                return wasAutoAdded;
028        }
029
030        public void setWasAutoAdded(boolean wasAutoAdded) {
031                this.wasAutoAdded = wasAutoAdded;
032        }
033
034        public BarEventSpec getSpec() {
035                return spec;
036        }
037
038        public String getBarEventId() {
039                return specId;
040        }
041        
042        public PortsideBarEvent createBarEvent() {
043                if (spec.isMission()) {
044                        return new HubMissionBarEventWrapper(specId);
045                }
046                return spec.createEvent();
047        }
048
049        public float getBarEventActiveDuration() {
050                return spec.getMinDur() + (spec.getMaxDur() - spec.getMinDur()) * (float) Math.random();
051        }
052
053        public float getBarEventFrequencyWeight() {
054                return spec.getFreq();
055        }
056
057        public float getBarEventTimeoutDuration() {
058                return spec.getMinTimeout() + (spec.getMaxTimeout() - spec.getMinTimeout()) * (float) Math.random();
059        }
060
061        public float getBarEventAcceptedTimeoutDuration() {
062                return spec.getMinAcceptedTimeout() + (spec.getMaxAcceptedTimeout() - spec.getMinAcceptedTimeout()) * (float) Math.random();
063        }
064
065        public boolean isPriority() {
066                return spec.hasTag(Tags.MISSION_PRIORITY);
067        }
068
069}