001package com.fs.starfarer.api.impl.campaign.events.nearby;
002
003import org.lwjgl.util.vector.Vector2f;
004
005import com.fs.starfarer.api.Global;
006import com.fs.starfarer.api.campaign.CampaignFleetAPI;
007import com.fs.starfarer.api.campaign.FleetAssignment;
008import com.fs.starfarer.api.campaign.SectorEntityToken;
009import com.fs.starfarer.api.campaign.StarSystemAPI;
010import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseAssignmentAI;
011import com.fs.starfarer.api.util.Misc;
012
013public class DistressCallPirateAmbushTrapAssignmentAI extends BaseAssignmentAI {
014
015        protected StarSystemAPI system;
016        protected SectorEntityToken jumpPoint;
017        
018        protected float elapsed = 0f;
019        protected float dur = 30f + (float) Math.random() * 20f;
020        
021        public DistressCallPirateAmbushTrapAssignmentAI(CampaignFleetAPI fleet, StarSystemAPI system, SectorEntityToken jumpPoint) {
022                super();
023                this.fleet = fleet;
024                this.system = system;
025                this.jumpPoint = jumpPoint;
026                
027                giveInitialAssignments();
028        }
029
030        @Override
031        protected void giveInitialAssignments() {
032                pickNext();
033        }
034
035        @Override
036        protected void pickNext() {
037                float angle = Misc.getAngleInDegrees(system.getCenter().getLocation(), jumpPoint.getLocation());
038                float dist = Misc.getDistance(system.getCenter().getLocation(), jumpPoint.getLocation()) + 3000f;
039                
040                angle += (float) Math.random() * 10f - 20f;
041                dist += (float) Math.random() * 500f;
042                
043                Vector2f loc = Misc.getUnitVectorAtDegreeAngle(angle);
044                loc.scale(dist);
045                Vector2f.add(system.getCenter().getLocation(), loc, loc);
046                
047                SectorEntityToken token = system.createToken(loc.x, loc.y);
048                fleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, token, 3f, "laying in wait");
049        }
050
051        @Override
052        public void advance(float amount) {
053                super.advance(amount);
054                
055                float days = Global.getSector().getClock().convertToDays(amount);
056                
057                elapsed += days;
058                
059                if (elapsed >= dur) {
060                        Misc.giveStandardReturnToSourceAssignments(fleet);
061                }
062        }
063
064}
065
066
067
068
069
070
071
072
073
074
075
076