Starsector API
Loading...
Searching...
No Matches
AbyssalLightEPEC.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.enc;
2
3import org.lwjgl.util.vector.Vector2f;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.SectorEntityToken;
7import com.fs.starfarer.api.impl.campaign.AbyssalLightEntityPlugin;
8import com.fs.starfarer.api.impl.campaign.AbyssalLightEntityPlugin.AbyssalLightParams;
9import com.fs.starfarer.api.impl.campaign.ids.Entities;
10import com.fs.starfarer.api.impl.campaign.ids.Factions;
11import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceAbyssPluginImpl.AbyssalEPData;
12import com.fs.starfarer.api.util.Misc;
13import com.fs.starfarer.api.util.WeightedRandomPicker;
14
16
17 public static enum LightSpawnType {
18 NORMAL,
19 PAIR,
20 CLUSTER,
21 LARGE,
22 }
23
25 return AbyssalFrequencies.getAbyssalLightFrequency(manager, point);
26 }
27
28 protected LightSpawnType pickSpawnType(EncounterManager manager, EncounterPoint point) {
29 AbyssalEPData data = (AbyssalEPData) point.custom;
30
32 picker.add(LightSpawnType.NORMAL, 100f);
33 picker.add(LightSpawnType.PAIR, 7f);
34 picker.add(LightSpawnType.CLUSTER, 3f);
35 picker.add(LightSpawnType.LARGE, 1f);
36
37 LightSpawnType type = picker.pick();
38 return type;
39 }
40
41 protected void modifyLightParams(EncounterManager manager, EncounterPoint point, LightSpawnType type, AbyssalLightParams params) {
42 }
43 protected void modifySpawnedLight(EncounterManager manager, EncounterPoint point, AbyssalLightParams params, SectorEntityToken light) {
44 }
45
46 @Override
47 public void createEncounter(EncounterManager manager, EncounterPoint point) {
48
49 AbyssalEPData data = (AbyssalEPData) point.custom;
50 LightSpawnType type = pickSpawnType(manager, point);
51
52 float minSize = AbyssalLightEntityPlugin.MIN_SIZE;
53 float maxSize = AbyssalLightEntityPlugin.MAX_SIZE;
54 if (type == LightSpawnType.NORMAL) {
55 AbyssalLightParams params = new AbyssalLightParams();
56 modifyLightParams(manager, point, type, params);
58 null, null, Entities.ABYSSAL_LIGHT, Factions.NEUTRAL, params);
59 e.setLocation(point.loc.x, point.loc.y);
60 modifySpawnedLight(manager, point, params, e);
61 } else if (type == LightSpawnType.LARGE) {
62 AbyssalLightParams params = new AbyssalLightParams(maxSize + 800f, maxSize + 1200f);
63 params.durationDays = 1000f + data.random.nextFloat() * 500f;
64 params.frequencyChangeMult = 0.25f;
65 modifyLightParams(manager, point, type, params);
66
68 null, null, Entities.ABYSSAL_LIGHT, Factions.NEUTRAL, params);
69 e.setLocation(point.loc.x, point.loc.y);
70 modifySpawnedLight(manager, point, params, e);
71 } else if (type == LightSpawnType.PAIR) {
72 AbyssalLightParams larger = new AbyssalLightParams(maxSize - 300f, maxSize + 300f);
73 larger.durationDays = 90f + data.random.nextFloat() * 30f;
74 larger.frequencyChangeMult = 0.75f;
75 modifyLightParams(manager, point, type, larger);
76
78 null, null, Entities.ABYSSAL_LIGHT, Factions.NEUTRAL, larger);
79 e.setLocation(point.loc.x, point.loc.y);
80 modifySpawnedLight(manager, point, larger, e);
81
82 AbyssalLightParams smaller = new AbyssalLightParams(minSize * 0.2f, minSize * 0.5f);
83 smaller.durationDays = larger.durationDays;
84 smaller.frequencyChangeMult = larger.frequencyChangeMult;
85 modifyLightParams(manager, point, type, smaller);
86
87 Vector2f loc = Misc.getPointAtRadius(point.loc, 100f + data.random.nextFloat() * 300f);
89 null, null, Entities.ABYSSAL_LIGHT, Factions.NEUTRAL, smaller);
90 e.setLocation(loc.x, loc.y);
91 modifySpawnedLight(manager, point, smaller, e);
92 } else if (type == LightSpawnType.CLUSTER) {
93 int num = 3 + data.random.nextInt(7);
94 float spread = 50f + num * 10f;
95 spread *= 0.5f;
96 for (int i = 0; i < num; i++) {
97 AbyssalLightParams params = new AbyssalLightParams(minSize * 0.1f, minSize * 0.2f);
98 params.durationDays += data.random.nextFloat() * 50f;
99 params.frequencyChangeMult = 2f + data.random.nextFloat() * 2f;;
100 params.frequencyMultMin *= params.frequencyChangeMult;
101 params.frequencyMultMax *= params.frequencyChangeMult;
102 modifyLightParams(manager, point, type, params);
103
104 //Vector2f loc = Misc.getPointWithinRadiusUniform(point.loc, spread, data.random);
105 Vector2f loc = Misc.getPointWithinRadius(point.loc, spread);
107 null, null, Entities.ABYSSAL_LIGHT, Factions.NEUTRAL, params);
108 e.setLocation(loc.x, loc.y);
109 modifySpawnedLight(manager, point, params, e);
110 }
111 }
112
113 }
114
115}
116
117
118
119
120
121
122
123
124
125
126
127
128
static SectorAPI getSector()
Definition Global.java:65
static float getAbyssalLightFrequency(EncounterManager manager, EncounterPoint point)
float getFrequencyForPoint(EncounterManager manager, EncounterPoint point)
void createEncounter(EncounterManager manager, EncounterPoint point)
LightSpawnType pickSpawnType(EncounterManager manager, EncounterPoint point)
void modifySpawnedLight(EncounterManager manager, EncounterPoint point, AbyssalLightParams params, SectorEntityToken light)
void modifyLightParams(EncounterManager manager, EncounterPoint point, LightSpawnType type, AbyssalLightParams params)
static Vector2f getPointAtRadius(Vector2f from, float r)
Definition Misc.java:697
static Vector2f getPointWithinRadius(Vector2f from, float r)
Definition Misc.java:711
CustomCampaignEntityAPI addCustomEntity(String id, String name, String type, String factionId)