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