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