Starsector API
Loading...
Searching...
No Matches
NamelessRock.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.world;
2
3import java.util.LinkedHashMap;
4import java.util.Random;
5
6import org.lwjgl.util.vector.Vector2f;
7
8import com.fs.starfarer.api.Global;
9import com.fs.starfarer.api.campaign.CustomCampaignEntityAPI;
10import com.fs.starfarer.api.campaign.PlanetAPI;
11import com.fs.starfarer.api.campaign.SectorAPI;
12import com.fs.starfarer.api.campaign.SectorEntityToken;
13import com.fs.starfarer.api.campaign.StarSystemAPI;
14import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin;
15import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin.DerelictShipData;
16import com.fs.starfarer.api.impl.campaign.enc.AbyssalRogueStellarObjectEPEC;
17import com.fs.starfarer.api.impl.campaign.ids.Conditions;
18import com.fs.starfarer.api.impl.campaign.ids.Entities;
19import com.fs.starfarer.api.impl.campaign.ids.Factions;
20import com.fs.starfarer.api.impl.campaign.ids.Planets;
21import com.fs.starfarer.api.impl.campaign.ids.Tags;
22import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator;
23import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator.StarSystemType;
24import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator;
25import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.AddedEntity;
26import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.EntityLocation;
27import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseThemeGenerator.LocationType;
28import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.PerShipData;
29import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipCondition;
30import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipRecoverySpecialData;
31import com.fs.starfarer.api.util.Misc;
32import com.fs.starfarer.api.util.WeightedRandomPicker;
33
34public class NamelessRock {
35
36 public static String ONESLAUGHT_SENSOR_ARRAY = "$oneslaughtSensorArray";
37 public static String NAMELESS_ROCK_LOCATION_ID = "nameless_rock_location";
38
39 public void generate(SectorAPI sector) {
40 StarSystemAPI system = sector.createStarSystem("Deep Space");
41 //system.setType(StarSystemType.NEBULA);
42 system.setName("Deep Space"); // to get rid of "Star System" at the end of the name
44
45 system.setType(StarSystemType.DEEP_SPACE);
46 system.addTag(Tags.THEME_HIDDEN);
49
50
51 system.setBackgroundTextureFilename("graphics/backgrounds/background5.jpg");
52
53 Random random = StarSystemGenerator.random;
54
55 float w = Global.getSettings().getFloat("sectorWidth");
56 float h = Global.getSettings().getFloat("sectorHeight");
57
58 Vector2f systemLoc = new Vector2f();
59 float outsideMapPad = 2500f;
60 float outsideMapRand = 2500f;
61 float r = random.nextFloat();
62 // avoid the actual lower-left corner somewhat, since the gate hauler is there, too, but
63 if (r < 0.5f) { // left
64 systemLoc.x = -w/2f - outsideMapPad - outsideMapRand * random.nextFloat();
65 //systemLoc.y = -h/2f - outsideMapPad + (h + outsideMapPad * 2f) * random.nextFloat();
66 systemLoc.y = -h/2f + (h + outsideMapPad * 1f) * random.nextFloat();
67 } else { //if (r < 0.75f) { // bottom
68 systemLoc.x = -w/2f + (w + outsideMapPad * 1f) * random.nextFloat();
69 systemLoc.y = -h/2f - outsideMapPad - outsideMapRand * random.nextFloat();
70 }
71// else if (r < 0.5f) { // right
72// systemLoc.x = w/2f + outsideMapPad + outsideMapRand * random.nextFloat();
73// systemLoc.y = -h/2f - outsideMapPad + (h + outsideMapPad * 2f) * random.nextFloat();
74// } else { // top
75// systemLoc.x = -w/2f - outsideMapPad + (w + outsideMapPad * 2f) * random.nextFloat();
76// systemLoc.y = h/2f + outsideMapPad + outsideMapRand * random.nextFloat();
77// }
78 system.getLocation().set(systemLoc.x, systemLoc.y);
79
80// Vector2f systemLoc = new Vector2f(3000f, 21000f);
81// systemLoc = Misc.getPointWithinRadius(systemLoc, 1000f, random);
82// system.getLocation().set(-w/2f + systemLoc.x, -h/2f + systemLoc.y);
83
84 SectorEntityToken center = system.initNonStarCenter();
85
86 system.setLightColor(GateHaulerLocation.ABYSS_AMBIENT_LIGHT_COLOR); // light color in entire system, affects all entities
87 center.addTag(Tags.AMBIENT_LS);
88
89 //String name = Misc.genEntityCatalogId(2700, 11, 7, CatalogEntryType.PLANET);
90 String name = "Nameless Rock";
91
92 PlanetAPI rock = system.addPlanet("nameless_rock", null, name, Planets.BARREN, 0, 150, 0, 0);
93 rock.setDescriptionIdOverride("barren_deep_space");
94
95 //rock.setCustomDescriptionId("???");
96 rock.getMemoryWithoutUpdate().set("$namelessRock", true);
97
103
104 rock.setOrbit(null);
105 rock.setLocation(0, 0);
106
107 addOnslaughtMkI(rock);
108
109 system.autogenerateHyperspaceJumpPoints(false, false);
110
112
114 }
115
116
117 protected void addOnslaughtMkI(PlanetAPI rock) {
118 PerShipData ship = new PerShipData("onslaught_mk1_Ancient", ShipCondition.WRECKED, 0f);
119 ship.shipName = "Serial #2F38CB017";
120 DerelictShipData params = new DerelictShipData(ship, false);
123 Entities.WRECK, Factions.NEUTRAL, params);
124 //Misc.makeImportant(entity, "onslaughtMkI");
125 entity.getMemoryWithoutUpdate().set("$onslaughtMkI", true);
126 entity.setSensorProfile(1f);
127 entity.setDiscoverable(true);
128
129 Random random = StarSystemGenerator.random;
130 float orbitRadius = rock.getRadius() + 200f;
131 float orbitDays = orbitRadius / (10f + random.nextFloat() * 5f);
132 entity.setCircularOrbit(rock, random.nextFloat() * 360f, orbitRadius, orbitDays);
133
134 ShipRecoverySpecialData data = new ShipRecoverySpecialData(null);
135 data.notNowOptionExits = true;
136 data.noDescriptionText = true;
138 PerShipData copy = (PerShipData) dsep.getData().ship.clone();
139 copy.variant = Global.getSettings().getVariant(copy.variantId).clone();
140 copy.variantId = null;
141 copy.variant.addTag(Tags.SHIP_CAN_NOT_SCUTTLE);
142 copy.variant.addTag(Tags.SHIP_UNIQUE_SIGNATURE);
143 copy.nameAlwaysKnown = true;
144 //copy.addDmods = false;
145 copy.pruneWeapons = false;
146
147 // makes it unpilotable by the the player with Neural Link, don't want that
148// AICoreOfficerPlugin plugin = Misc.getAICoreOfficerPlugin(Commodities.GAMMA_CORE);
149// if (plugin != null) {
150// copy.captain = plugin.createPerson(Commodities.GAMMA_CORE, Factions.PLAYER, null);
151// copy.captain.getStats().setSkillLevel(Skills.POLARIZED_ARMOR, 2);
152// copy.captain.getStats().setLevel(copy.captain.getStats().getLevel() + 1);
153// Misc.setUnremovable(copy.captain, true);
154// Misc.setKeepOnShipRecovery(copy.captain, true);
155// }
156
157 data.addShip(copy);
158
159 Misc.setSalvageSpecial(entity, data);
160 }
161
163 float minDist = Float.MAX_VALUE;
164 StarSystemAPI closest = null;
166 if (curr == rockSystem) continue;
167 if (Misc.getAbyssalDepth(curr.getLocation()) > 0f) continue;
168 if (curr.getType() == StarSystemType.DEEP_SPACE) continue;
169 float dist = Misc.getDistance(curr.getLocation(), rockSystem.getLocation());
170 if (dist < minDist) {
171 closest = curr;
172 minDist = dist;
173 }
174 }
175
176 if (closest == null) return;
177
178
179 SectorEntityToken sensor = null;
181 if (curr.hasTag(Tags.MAKESHIFT)) continue;
182 sensor = curr;
183 break;
184 }
185
186 if (sensor == null) {
187 LinkedHashMap<LocationType, Float> weights = new LinkedHashMap<LocationType, Float>();
188 weights.put(LocationType.STAR_ORBIT, 10f);
189 weights.put(LocationType.OUTER_SYSTEM, 10f);
190 WeightedRandomPicker<EntityLocation> locs = BaseThemeGenerator.getLocations(null, closest, null, 100f, weights);
191 EntityLocation loc = locs.pick();
192 AddedEntity added = BaseThemeGenerator.addNonSalvageEntity(closest,
194 if (added != null) {
195 sensor = added.entity;
196 }
197 }
198
199 // really shouldn't be possible as BaseThemeGenerator.getLocations() is supposed to
200 // always find something if STAR_ORBIT/OUTER_SYSTEM are supplied in the weights
201 if (sensor == null) return;
202
205
206 // to get it:
207 //SectorEntityToken sensor = (SectorEntityToken) Global.getSector().getPersistentData().get(ONESLAUGHT_SENSOR_ARRAY);
208 }
209}
210
211
212
213
214
215
216
217
218
219
220
221
222
static SettingsAPI getSettings()
Definition Global.java:57
static SectorAPI getSector()
Definition Global.java:65
static final String SHIP_UNIQUE_SIGNATURE
Definition Tags.java:199
static WeightedRandomPicker< EntityLocation > getLocations(Random random, StarSystemAPI system, float minGap, LinkedHashMap< LocationType, Float > weights)
static SectorEntityToken addSalvageEntity(LocationAPI location, String id, String faction)
static AddedEntity addNonSalvageEntity(LocationAPI system, EntityLocation loc, String type, String faction)
void createSensorArrayInClosestSystem(StarSystemAPI rockSystem)
static float getDistance(SectorEntityToken from, SectorEntityToken to)
Definition Misc.java:599
static void setSalvageSpecial(SectorEntityToken entity, Object data)
Definition Misc.java:3633
static float getAbyssalDepth(Vector2f loc)
Definition Misc.java:2330
ShipVariantAPI getVariant(String variantId)
PlanetAPI addPlanet(String id, SectorEntityToken focus, String name, String type, float angle, float radius, float orbitRadius, float orbitDays)
List< SectorEntityToken > getEntitiesWithTag(String tag)
void setBackgroundTextureFilename(String backgroundTextureFilename)
void setDescriptionIdOverride(String descriptionIdOverride)
Map< String, Object > getPersistentData()
List< StarSystemAPI > getStarSystems()
StarSystemAPI createStarSystem(String name)
CustomCampaignEntityPlugin getCustomPlugin()
void setCircularOrbit(SectorEntityToken focus, float angle, float orbitRadius, float orbitDays)
void setDiscoverable(Boolean discoverable)
void setOptionalUniqueId(String optionalUniqueId)
void set(String key, Object value)