001package com.fs.starfarer.api.impl.campaign.abilities.ai;
002
003import com.fs.starfarer.api.campaign.econ.MarketAPI;
004import com.fs.starfarer.api.campaign.rules.MemoryAPI;
005import com.fs.starfarer.api.impl.campaign.events.BaseEventPlugin.MarketFilter;
006import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
007import com.fs.starfarer.api.util.IntervalUtil;
008import com.fs.starfarer.api.util.Misc;
009
010public class TransponderAbilityAI extends BaseAbilityAI {
011
012        private IntervalUtil interval = new IntervalUtil(0.05f, 0.15f);
013
014//      public TransponderAbilityAI(AbilityPlugin ability, ModularFleetAIAPI ai) {
015//              super(ability, ai);
016//      }
017
018        public void advance(float days) {
019                interval.advance(days * EmergencyBurnAbilityAI.AI_FREQUENCY_MULT);
020                if (!interval.intervalElapsed()) return;
021                
022                MemoryAPI mem = fleet.getMemoryWithoutUpdate();
023                
024//              if (fleet.isInCurrentLocation()) {
025//                      float dist = Misc.getDistance(fleet.getLocation(), Global.getSector().getPlayerFleet().getLocation());
026//                      if (dist < fleet.getRadius() + Global.getSector().getPlayerFleet().getRadius() + 10f) {
027//                              System.out.println("sdfsdfdsXX1e12");
028//                      }
029//              }
030                
031//              if (ability.isActive()) {
032//                      return;
033//              }
034                
035                boolean smuggler = mem.getBoolean(MemFlags.MEMORY_KEY_SMUGGLER);
036                boolean pirate = mem.getBoolean(MemFlags.MEMORY_KEY_PIRATE);
037                boolean patrol = mem.getBoolean(MemFlags.MEMORY_KEY_PATROL_FLEET);
038                //patrol |= mem.getBoolean(MemFlags.MEMORY_KEY_WAR_FLEET);
039                
040                boolean trader = mem.getBoolean(MemFlags.MEMORY_KEY_TRADE_FLEET);
041                
042                if (smuggler || pirate || mem.getBoolean(MemFlags.MEMORY_KEY_FORCE_TRANSPONDER_OFF)) {
043                        if (ability.isActive()) {
044                                ability.deactivate();
045                        }
046                        return;
047                }
048                
049                if (patrol || trader) {
050                        if (!ability.isActive()) {
051                                ability.activate();
052                        }
053                        return;
054                }
055                
056//              if (fleet.getName().contains("Scavenger") && 
057//                              Misc.getDistance(fleet.getLocation(), Global.getSector().getPlayerFleet().getLocation()) < 1000f) {
058//                      System.out.println("wefwefewf");
059//              }
060                
061                if (fleet.isInHyperspace()) {
062                        float nonHostileSize = 0;
063                        float hostileSize = 0;
064                        for (MarketAPI market : Misc.getNearbyMarkets(fleet.getLocation(), 1f)) {
065                                float size = market.getSize();
066                                if (market.getFaction().isHostileTo(fleet.getFaction())) {
067                                        hostileSize += size;
068                                } else {
069                                        nonHostileSize += size;
070                                }
071                        }
072                        
073                        if (nonHostileSize > hostileSize) {
074                                if (!ability.isActive()) {
075                                //if (!fleet.isTransponderOn()) {
076                                        ability.activate();
077                                }
078                        } else {
079                                if (ability.isActive()) {
080                                //if (fleet.isTransponderOn()) {
081                                        ability.deactivate();
082                                }
083                        }
084                        return;
085                }
086                
087                MarketAPI nearestMarket = Misc.findNearestLocalMarket(fleet, 1000000, new MarketFilter() {
088                        public boolean acceptMarket(MarketAPI market) {
089                                return true;
090                        }
091                });
092
093                if (nearestMarket != null) {
094                        if (nearestMarket.getFaction().isHostileTo(fleet.getFaction())) {
095                                if (ability.isActive()) {
096                                        ability.deactivate();
097                                }
098                        } else {
099                                if (!ability.isActive()) {
100                                        ability.activate();
101                                }
102                        }
103                        return;
104                } else {
105//                      if (!ability.isActive()) {
106//                              ability.activate();
107//                      }
108                        if (ability.isActive()) {
109                                ability.deactivate();
110                        }
111                        return;
112                }
113        }
114}
115
116
117
118
119
120