001package com.fs.starfarer.api.impl.campaign.intel.group;
002
003import java.util.List;
004
005import com.fs.starfarer.api.Global;
006import com.fs.starfarer.api.campaign.CampaignFleetAPI;
007import com.fs.starfarer.api.campaign.FleetAssignment;
008import com.fs.starfarer.api.campaign.SectorEntityToken;
009import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
010import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
011import com.fs.starfarer.api.util.IntervalUtil;
012
013public class FGWaitAction extends FGDurationAction {
014
015        protected SectorEntityToken where;
016        protected IntervalUtil interval = new IntervalUtil(0.1f, 0.3f);
017        
018        protected String waitText;
019        protected boolean doNotGetSidetracked = true;
020        
021        public FGWaitAction(SectorEntityToken where, float waitDays) {
022                this(where, waitDays, "orbiting " + where.getName());
023        }
024
025        public FGWaitAction(SectorEntityToken where, float waitDays, String waitText) {
026                super(waitDays);
027                this.where = where;
028                this.waitText = waitText;
029                
030                interval.forceIntervalElapsed();
031        }
032        
033        @Override
034        public void addRouteSegment(RouteData route) {
035                RouteSegment segment = new RouteSegment(getDurDays(), where);
036                route.addSegment(segment);
037        }
038
039
040        @Override
041        public void directFleets(float amount) {
042                super.directFleets(amount);
043                if (isActionFinished()) return;
044                
045                List<CampaignFleetAPI> fleets = intel.getFleets();
046                if (fleets.isEmpty()) {
047                        setActionFinished(true);
048                        return;
049                }
050                
051                float days = Global.getSector().getClock().convertToDays(amount);
052                interval.advance(days);
053                
054                if (!interval.intervalElapsed()) return;
055
056                
057                for (CampaignFleetAPI fleet : fleets) {                         
058                        fleet.clearAssignments();
059                        
060                        if (where.getStarSystem() != null && where == where.getStarSystem().getCenter()) {
061                                fleet.addAssignment(FleetAssignment.PATROL_SYSTEM, null, 3f, waitText);
062                        } else {
063                                if (doNotGetSidetracked) {
064                                        fleet.addAssignment(FleetAssignment.ORBIT_PASSIVE, where, 3f, waitText);
065                                } else {
066                                        fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, where, 3f, waitText);
067                                }
068                        }
069                }
070        }
071
072
073        
074        public SectorEntityToken getWhere() {
075                return where;
076        }
077
078        public void setWhere(SectorEntityToken where) {
079                this.where = where;
080        }
081
082        public String getWaitText() {
083                return waitText;
084        }
085
086        public void setWaitText(String waitText) {
087                this.waitText = waitText;
088        }
089
090        public boolean isDoNotGetSidetracked() {
091                return doNotGetSidetracked;
092        }
093
094        public void setDoNotGetSidetracked(boolean doNotGetSidetracked) {
095                this.doNotGetSidetracked = doNotGetSidetracked;
096        }
097        
098}
099
100
101
102