001package com.fs.starfarer.api.impl.campaign.world; 002 003import java.awt.Color; 004import java.util.Random; 005 006import org.lwjgl.util.vector.Vector2f; 007 008import com.fs.starfarer.api.Global; 009import com.fs.starfarer.api.campaign.JumpPointAPI; 010import com.fs.starfarer.api.campaign.LocationAPI; 011import com.fs.starfarer.api.campaign.PlanetAPI; 012import com.fs.starfarer.api.campaign.SectorAPI; 013import com.fs.starfarer.api.campaign.SectorEntityToken; 014import com.fs.starfarer.api.campaign.SpecialItemData; 015import com.fs.starfarer.api.campaign.StarSystemAPI; 016import com.fs.starfarer.api.impl.campaign.JumpPointInteractionDialogPluginImpl; 017import com.fs.starfarer.api.impl.campaign.enc.AbyssalRogueStellarObjectEPEC; 018import com.fs.starfarer.api.impl.campaign.ids.Conditions; 019import com.fs.starfarer.api.impl.campaign.ids.Entities; 020import com.fs.starfarer.api.impl.campaign.ids.Factions; 021import com.fs.starfarer.api.impl.campaign.ids.Planets; 022import com.fs.starfarer.api.impl.campaign.ids.Tags; 023import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator; 024import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator.StarSystemType; 025import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator; 026import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.AddedEntity; 027import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.EntityLocation; 028import com.fs.starfarer.api.impl.campaign.shared.WormholeManager; 029import com.fs.starfarer.api.util.Misc; 030import com.fs.starfarer.api.util.Misc.CatalogEntryType; 031 032public class GateHaulerLocation { 033 034 public static Color ABYSS_AMBIENT_LIGHT_COLOR = new Color(100,100,100,255); 035 036 public void generate(SectorAPI sector) { 037 StarSystemAPI system = sector.createStarSystem("Deep Space"); 038 //system.setType(StarSystemType.NEBULA); 039 system.setName("Deep Space"); // to get rid of "Star System" at the end of the name 040 system.setType(StarSystemType.DEEP_SPACE); 041 system.addTag(Tags.THEME_HIDDEN); 042 system.addTag(Tags.THEME_SPECIAL); 043 LocationAPI hyper = Global.getSector().getHyperspace(); 044 045 046 system.setBackgroundTextureFilename("graphics/backgrounds/background5.jpg"); 047 048 Random random = StarSystemGenerator.random; 049 050 float w = Global.getSettings().getFloat("sectorWidth"); 051 float h = Global.getSettings().getFloat("sectorHeight"); 052 float angle = 180f + random.nextFloat() * 90f; 053 float systemDist = 4000f + random.nextFloat() * 2000f; 054 Vector2f systemLoc = Misc.getUnitVectorAtDegreeAngle(angle); 055 systemLoc.scale(systemDist); 056 systemLoc.x -= 1000f; 057 058 system.getLocation().set(-w/2f + systemLoc.x, -h/2f + systemLoc.y); 059// system.getLocation().set(-w/2f + 4000f - 0f * random.nextFloat(), 060// -h/2f + 4000f - 0f * random.nextFloat()); 061 062 063 SectorEntityToken center = system.initNonStarCenter(); 064 065 system.setLightColor(ABYSS_AMBIENT_LIGHT_COLOR); // light color in entire system, affects all entities 066 center.addTag(Tags.AMBIENT_LS); 067 068 String name = Misc.genEntityCatalogId(3125, 6, 11, CatalogEntryType.GIANT); 069 070 PlanetAPI giant = system.addPlanet("nameless_ice_giant", null, name, Planets.ICE_GIANT, 0, 450, 0, 0); 071 072 //rock.setCustomDescriptionId("???"); 073 giant.getMemoryWithoutUpdate().set("$gateHaulerIceGiant", true); 074 075 giant.getMarket().addCondition(Conditions.DENSE_ATMOSPHERE); 076 giant.getMarket().addCondition(Conditions.COLD); 077 giant.getMarket().addCondition(Conditions.DARK); 078 giant.getMarket().addCondition(Conditions.VOLATILES_TRACE); 079 giant.getMarket().addCondition(Conditions.HIGH_GRAVITY); 080 081 giant.setOrbit(null); 082 giant.setLocation(0, 0); 083 084 //StarSystemGenerator.addStableLocations(system, 1); 085 EntityLocation loc = new EntityLocation(); 086 float orbitRadius = 7000f; 087 float orbitDays = orbitRadius / (20f + 5f * StarSystemGenerator.random.nextFloat()); 088 loc.orbit = Global.getFactory().createCircularOrbit(giant, 089 StarSystemGenerator.random.nextFloat() * 360f, orbitRadius, orbitDays); 090 AddedEntity added = BaseThemeGenerator.addNonSalvageEntity(system, loc, Entities.STABLE_LOCATION, Factions.NEUTRAL); 091 092 093 for (SectorEntityToken curr : system.getEntitiesWithTag(Tags.STABLE_LOCATION)) { 094 SpecialItemData item = WormholeManager.createWormholeAnchor("charlie", "Charlie"); 095 JumpPointAPI wormhole = WormholeManager.get().addWormhole(item, curr, null); 096 wormhole.getMemoryWithoutUpdate().unset(JumpPointInteractionDialogPluginImpl.UNSTABLE_KEY); 097 break; 098 } 099 100 101 102 orbitRadius = giant.getRadius() + 250f; 103 orbitDays = orbitRadius / (20f + random.nextFloat() * 5f); 104 float spin = 3f; 105 loc = new EntityLocation(); 106 loc.orbit = Global.getFactory().createCircularOrbitWithSpin(giant, random.nextFloat() * 360f, 107 orbitRadius, orbitDays, spin); 108 added = BaseThemeGenerator.addEntity(null, system, loc, Entities.DERELICT_GATEHAULER, Factions.NEUTRAL); 109 added.entity.getMemoryWithoutUpdate().set("$gateHauler", true); 110 111// CampaignFleetAPI visual = Global.getFactory().createEmptyFleet(Factions.NEUTRAL, added.entity.getName(), true); 112// visual.getFleetData().addFleetMember("derelict_gatehauler_Hull"); 113// visual.setHidden(true); 114// visual.setVelocity(300f, 0f); 115// visual.setFacing(0f); 116// visual.setMoveDestination(10000f, 0f); 117// ((CustomCampaignEntityAPI)added.entity).setFleetForVisual(visual); 118 119 120 system.autogenerateHyperspaceJumpPoints(true, false); 121 122 123 AbyssalRogueStellarObjectEPEC.setAbyssalDetectedRanges(system); 124 } 125 126} 127 128 129 130 131 132 133 134 135 136 137 138 139