001package com.fs.starfarer.api.impl.campaign.fleets.misc;
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.econ.MarketAPI;
008import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData;
009import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment;
010import com.fs.starfarer.api.impl.campaign.fleets.misc.MiscFleetRouteManager.MiscRouteData;
011import com.fs.starfarer.api.impl.campaign.ids.Factions;
012import com.fs.starfarer.api.impl.campaign.procgen.themes.RouteFleetAssignmentAI;
013import com.fs.starfarer.api.util.IntervalUtil;
014import com.fs.starfarer.api.util.Misc;
015
016public class MiscFleetAssignmentAI extends RouteFleetAssignmentAI {
017        
018        
019        private String origFaction;
020        private IntervalUtil factionChangeTracker = new IntervalUtil(0.1f, 0.3f);
021        public MiscFleetAssignmentAI(CampaignFleetAPI fleet, RouteData route) {
022                super(fleet, route);
023                //origFaction = fleet.getFaction().getId();
024                origFaction = route.getFactionId();
025                if (!getData().smuggling) {
026                        origFaction = null;
027                        factionChangeTracker = null;
028                } else {
029                        factionChangeTracker.forceIntervalElapsed();
030                        doSmugglingFactionChangeCheck(0.1f);
031                }
032        }
033        
034        @Override
035        protected String getStartingActionText(RouteSegment segment) {
036                MiscRouteData data = getData();
037                MiscFleetCreatorPlugin creator = MiscFleetRouteManager.getCreator(data.creatorId);
038                if (creator != null) {
039                        return creator.getStartingActionText(fleet, segment, data);
040                }
041                return super.getStartingActionText(segment);
042        }
043        @Override
044        protected String getEndingActionText(RouteSegment segment) {
045                MiscRouteData data = getData();
046                MiscFleetCreatorPlugin creator = MiscFleetRouteManager.getCreator(data.creatorId);
047                if (creator != null) {
048                        return creator.getEndingActionText(fleet, segment, data);
049                }
050                return super.getEndingActionText(segment);
051        }
052        
053        @Override
054        protected String getTravelActionText(RouteSegment segment) {
055                Integer id = segment.getId();
056                MiscRouteData data = getData();
057                MiscFleetCreatorPlugin creator = MiscFleetRouteManager.getCreator(data.creatorId);
058                if (creator != null) {
059                        if (id == MiscFleetRouteManager.ROUTE_TRAVEL_DST) {
060                                return creator.getTravelToDestActionText(fleet, segment, data);
061                        } else if (id == MiscFleetRouteManager.ROUTE_TRAVEL_SRC) {
062                                return creator.getTravelReturnActionText(fleet, segment, data);
063                        }
064                }
065                return super.getTravelActionText(segment);
066        }
067        
068        @Override
069        protected String getInSystemActionText(RouteSegment segment) {
070                Integer id = segment.getId();
071                MiscRouteData data = getData();
072                MiscFleetCreatorPlugin creator = MiscFleetRouteManager.getCreator(data.creatorId);
073                if (creator != null) {
074                        if (id == MiscFleetRouteManager.ROUTE_DST_UNLOAD) {
075                                return creator.getAtDestUnloadActionText(fleet, segment, data);
076                        } else if (id == MiscFleetRouteManager.ROUTE_DST_LOAD) {
077                                return creator.getAtDestLoadActionText(fleet, segment, data);
078                        }
079                }
080                return super.getInSystemActionText(segment);
081        }
082
083        protected MiscRouteData getData() {
084                MiscRouteData data = (MiscRouteData) route.getCustom();
085                return data;
086        }
087        
088        @Override
089        public void advance(float amount) {
090                super.advance(amount);
091                doSmugglingFactionChangeCheck(amount);
092        }
093        
094        
095        public void doSmugglingFactionChangeCheck(float amount) {
096                MiscRouteData data = getData();
097                if (!data.smuggling) return;
098                float days = Global.getSector().getClock().convertToDays(amount);
099                
100//              if (fleet.isInCurrentLocation()) {
101//                      System.out.println("23wefwf23");
102//                      days *= 100000f;
103//              }
104                
105                factionChangeTracker.advance(days);
106                if (factionChangeTracker.intervalElapsed() && fleet.getAI() != null) {
107                        List<MarketAPI> markets = Misc.getMarketsInLocation(fleet.getContainingLocation());
108                        MarketAPI align = null;
109                        int max = 0;
110                        for (MarketAPI market : markets) {
111                                int size = market.getSize();
112                                if (market.getFaction().isHostileTo(data.factionId)) {
113                                        if (size > max) {
114                                                max = size;
115                                                align = market;
116                                        }
117                                } else if (size > max) {
118                                        max = size;
119                                        align = null;
120                                }
121                        }
122                        
123                        if (align == null || fleet.isInHyperspace() ||
124                                        fleet.getContainingLocation() == data.from.getContainingLocation()) {
125                                align = data.from; 
126                        }
127                        
128                        
129                        if (align != null) {
130                                String targetFac = origFaction;
131                                boolean hostile = align.getFaction().isHostileTo(targetFac);
132                                if (hostile) {
133                                        targetFac = Factions.INDEPENDENT;
134                                        hostile = align.getFaction().isHostileTo(targetFac);
135                                }
136                                if (hostile) {
137                                        targetFac = align.getFactionId();
138                                }
139                                if (!fleet.getFaction().getId().equals(targetFac)) {
140                                        fleet.setFaction(targetFac, true);
141                                }
142                        } else {
143                                String targetFac = origFaction;
144                                if (fleet.isInHyperspace()) {
145                                        targetFac = Factions.INDEPENDENT;
146                                }
147                                if (!fleet.getFaction().getId().equals(targetFac)) {
148                                        fleet.setFaction(targetFac, true);
149                                }
150                        }
151                }
152        }
153        
154}
155
156
157
158
159
160
161
162
163
164