package data.scripts.world;
import java.util.List;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.Script;
import com.fs.starfarer.api.campaign.CampaignFleetAPI;
import com.fs.starfarer.api.campaign.CargoAPI;
import com.fs.starfarer.api.campaign.FleetAssignment;
import com.fs.starfarer.api.campaign.LocationAPI;
import com.fs.starfarer.api.campaign.SectorAPI;
import com.fs.starfarer.api.campaign.SectorEntityToken;
import com.fs.starfarer.api.fleet.FleetMemberType;
import com.fs.starfarer.api.campaign.CargoAPI.CrewXPLevel;
@SuppressWarnings("unchecked")
public class HiigaraConvoySpawnPoint extends BaseSpawnPoint {
private final SectorEntityToken convoyDestination;
public HiigaraConvoySpawnPoint(SectorAPI sector, LocationAPI location,
float daysInterval, int maxFleets, SectorEntityToken anchor,
SectorEntityToken convoyDestination) {
super(sector, location, daysInterval, maxFleets, anchor);
this.convoyDestination = convoyDestination;
}
private static int convoyNumber = 0;
@Override
protected CampaignFleetAPI spawnFleet() {
String type = null;
float r = (float) Math.random();
if (r > 0.9f) {
type = "fuelConvoy";
} else if (r > 0.6f) {
type = "explorationFleet";
} else {
type = "supplyConvoy";
}
float angle = (float) ((float) Math.random() * Math.PI * 2f);
float x = (float) (Math.cos(angle) * 18000f);
float y = (float) (Math.sin(angle) * 18000f);
CampaignFleetAPI fleet = getSector().createFleet("hiigaran_descendants", type);
getLocation().spawnFleet(getAnchor(), x, y, fleet);
if (type.equals("supplyConvoy")) {
CargoAPI cargo = fleet.getCargo();
addRandomWeapons(cargo, 8);
}
else if (type.equals("explorationFleet")) {
CargoAPI cargo = fleet.getCargo();
cargo.addCrew(CrewXPLevel.ELITE, 10);
cargo.addCrew(CrewXPLevel.VETERAN, 50);
cargo.addCrew(CrewXPLevel.REGULAR, 100);
}
else if (type.equals("fuelConvoy")) {
CargoAPI cargo = fleet.getCargo();
cargo.addFuel(250);
}
addRandomShips(fleet.getCargo(), (int) (Math.random() * 4f));
Script script = null;
if (type.equals("supplyConvoy")) {
script = createArrivedScript();
Global.getSectorAPI().addMessage("A Hiigaran supply convoy is in-system and under way to rendezvous with the New Hiigaran Orbital Station");
}
fleet.addAssignment(FleetAssignment.DELIVER_RESOURCES, convoyDestination, 1000, script);
fleet.addAssignment(FleetAssignment.GO_TO_LOCATION_AND_DESPAWN, getAnchor(), 1000);
return fleet;
}
private Script createArrivedScript() {
return new Script() {
public void run() {
Global.getSectorAPI().addMessage("A Hiigaran transport fleet has delivered new equipment to their station");
}
};
}
private void addRandomWeapons(CargoAPI cargo, int count) {
List weaponIds = getSector().getAllWeaponIds();
for (int i = 0; i < count; i++) {
String weapon = (String) weapons[(int) (weapons.length * Math.random())];
int quantity = (int)(Math.random() * 4f + 2f);
cargo.addWeapons(weapon, quantity);
}
}
private void addRandomShips(CargoAPI cargo, int count) {
List weaponIds = getSector().getAllWeaponIds();
for (int i = 0; i < count; i++) {
if ((float) Math.random() > 0.5f) {
String wing = (String) wings[(int) (wings.length * Math.random())];
cargo.addMothballedShip(FleetMemberType.FIGHTER_WING, wing, null);
} else {
String ship = (String) ships[(int) (ships.length * Math.random())];
cargo.addMothballedShip(FleetMemberType.SHIP, ship, null);
}
}
}
private static String [] ships = {
"hii_fiirkan_Hull",
"hii_jet_Hull",
"hii_kaan_Hull",
"hii_rathan_Hull",
"hii_vraan_Hull",
"hii_vaahrok_Hull",
};
private static String [] wings = {
"hii_tarii_wing",
"hii_toba_wing",
"hii_heeshk_wing",
"hii_raachok_wing",
};
private static String [] weapons = {
"hii_pulsar_beam",
"hii_sustained_ion_beam",
"hii_sustained_ion_beam_xl",
"hii_accelerated_pulsar_beam_sm",
"hii_accelerated_pulsar_beam",
"hii_singularity_cannon",
"hii_flak_cannon",
"hii_kinetic_driver",
"hii_chaingun_medium",
"hii_chaingun_large",
"hii_chaingun_medium_he",
"hii_chaingun_large_he",
"hii_kinetic_burst_cannon",
"hii_kinetic_burst_cannon_large",
"hii_kinetic_burst_cannon_he",
"hii_kinetic_burst_cannon_large_he",
"hii_single_cannon",
"hii_cor_missile_pod",
"hii_cor_missile_pod_xl",
"hii_tviir_launcher",
"hii_torpedo_launcher",
"hii_abas_missile_pod",
"hii_abas_missile_pod_xl",
};
}