001package com.fs.starfarer.api.impl.campaign;
002
003import com.fs.starfarer.api.EveryFrameScript;
004import com.fs.starfarer.api.Global;
005import com.fs.starfarer.api.campaign.CampaignFleetAPI;
006import com.fs.starfarer.api.campaign.FleetAssignment;
007import com.fs.starfarer.api.campaign.SectorEntityToken;
008import com.fs.starfarer.api.campaign.ai.FleetAssignmentDataAPI;
009import com.fs.starfarer.api.util.IntervalUtil;
010import com.fs.starfarer.api.util.Misc;
011
012public class SmugglingFactionChangeScript implements EveryFrameScript {
013
014        private CampaignFleetAPI fleet;
015        private String origFaction;
016        private IntervalUtil tracker = new IntervalUtil(0.1f, 0.3f);
017        public SmugglingFactionChangeScript(CampaignFleetAPI fleet) {
018                this.fleet = fleet;
019                origFaction = fleet.getFaction().getId();
020        }
021        
022        public void advance(float amount) {
023                float days = Global.getSector().getClock().convertToDays(amount);
024                tracker.advance(days);
025                if (tracker.intervalElapsed() && fleet.getAI() != null) {
026//                      if (fleet.getContainingLocation().equals(Global.getSector().getPlayerFleet().getContainingLocation())) {
027//                              float dist = Misc.getDistance(fleet.getLocation(), Global.getSector().getPlayerFleet().getLocation());
028//                              if (dist < 500 && fleet.getFaction().getId().equals(Factions.INDEPENDENT)) {
029//                                      System.out.println("sf3r2f");
030//                              }
031//                      }
032                        FleetAssignmentDataAPI assignment = fleet.getAI().getCurrentAssignment();
033                        if (assignment != null && assignment.getAssignment() != FleetAssignment.STANDING_DOWN) {
034                                SectorEntityToken target = assignment.getTarget();
035                                if (target != null && target.getFaction() != null) {
036                                        boolean targetHostile = target.getFaction().isHostileTo(origFaction);
037                                        boolean mathchesTarget = fleet.getFaction().getId().equals(target.getFaction().getId());
038                                        boolean mathchesOrig = fleet.getFaction().getId().equals(origFaction);
039                                        float dist = Misc.getDistance(fleet.getLocation(), target.getLocation());
040                                        if (dist < target.getRadius() + fleet.getRadius() + 1000) {
041                                                if (targetHostile && !mathchesTarget) {
042                                                        fleet.setFaction(target.getFaction().getId(), true);
043                                                }
044                                        } else {
045                                                if (!mathchesOrig) {
046                                                        fleet.setFaction(origFaction, true);
047                                                }
048                                        }
049                                }
050                        }
051                }
052        }
053
054        public boolean isDone() {
055                return false;
056        }
057
058        public boolean runWhilePaused() {
059                return false;
060        }
061
062}