Planet launch candidate system

This commit is contained in:
Anuken
2022-01-08 22:21:59 -05:00
parent 39cb353b13
commit c788f4a7f8
5 changed files with 42 additions and 9 deletions

View File

@@ -18,7 +18,10 @@ public class Planets{
sun,
erekir,
tantros,
serpulo;
serpulo,
gier,
notva,
verilus;
public static void load(){
sun = new Planet("sun", null, 4f){{
@@ -52,7 +55,8 @@ public class Planets{
lightDstFrom = 0.2f;
}};
makeAsteroid("gier", erekir, Blocks.ferricStoneWall, Blocks.carbonWall, 0.4f, 7, 1f, gen -> {
//TODO names
gier = makeAsteroid("gier", erekir, Blocks.ferricStoneWall, Blocks.carbonWall, 0.4f, 7, 1f, gen -> {
gen.min = 25;
gen.max = 35;
gen.carbonChance = 0.6f;
@@ -60,7 +64,7 @@ public class Planets{
gen.berylChance = 0.1f;
});
makeAsteroid("notva", sun, Blocks.ferricStoneWall, Blocks.beryllicStoneWall, 0.55f, 9, 1.3f, gen -> {
notva = makeAsteroid("notva", sun, Blocks.ferricStoneWall, Blocks.beryllicStoneWall, 0.55f, 9, 1.3f, gen -> {
gen.berylChance = 0.8f;
gen.iceChance = 0f;
gen.carbonChance = 0.01f;
@@ -91,16 +95,20 @@ public class Planets{
landCloudColor = Pal.spore.cpy().a(0.5f);
}};
makeAsteroid("verlius", sun, Blocks.stoneWall, Blocks.iceWall, 0.5f, 12, 2f, gen -> {
verilus = makeAsteroid("verlius", sun, Blocks.stoneWall, Blocks.iceWall, 0.5f, 12, 2f, gen -> {
gen.berylChance = 0f;
gen.iceChance = 0.6f;
gen.carbonChance = 0.1f;
gen.ferricChance = 0f;
});
//define launch candidates after all planets initialize
serpulo.launchCandidates.add(gier);
gier.launchCandidates.add(erekir);
}
private static void makeAsteroid(String name, Planet parent, Block base, Block tint, float tintThresh, int pieces, float scale, Cons<AsteroidGenerator> cgen){
new Planet(name, parent, 0.12f){{
private static Planet makeAsteroid(String name, Planet parent, Block base, Block tint, float tintThresh, int pieces, float scale, Cons<AsteroidGenerator> cgen){
return new Planet(name, parent, 0.12f){{
hasAtmosphere = false;
updateLighting = false;
sectors.add(new Sector(this, Ptile.empty));

View File

@@ -109,8 +109,9 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
//copper only generates on ferric stone
ore(Blocks.oreCopper, Blocks.ferricStone, 5f, 0.8f * copperScale);
//thorium only generates on beryllic stone
//thorium only generates on beryllic stone and graphitic stone
ore(Blocks.oreThorium, Blocks.beryllicStone, 4f, 0.9f * thoriumScl);
ore(Blocks.oreThorium, Blocks.carbonStone, 4f, 0.9f * thoriumScl);
wallOre(Blocks.carbonWall, Blocks.graphiticWall, 35f, 0.57f * graphiteScale);

View File

@@ -89,6 +89,8 @@ public class Planet extends UnlockableContent{
public Seq<Planet> children = new Seq<>();
/** Default root node shown when the tech tree is opened here. */
public @Nullable TechNode techTree;
/** Planets that can be launched to from this one. Made mutual in init(). */
public Seq<Planet> launchCandidates = new Seq<>();
/** Loads the mesh. Clientside only. Defaults to a boring sphere mesh. */
protected Prov<GenericMesh> meshLoader = () -> new ShaderSphereMesh(this, Shaders.unlit, 2), cloudMeshLoader = () -> null;
@@ -265,6 +267,17 @@ public class Planet extends UnlockableContent{
updateBaseCoverage();
}
//make planet launch candidates mutual.
var candidates = launchCandidates.copy();
for(Planet planet : content.planets()){
if(planet.launchCandidates.contains(this)){
candidates.addUnique(planet);
}
}
launchCandidates = candidates;
clipRadius = Math.max(clipRadius, radius + atmosphereRadOut + 0.5f);
}

View File

@@ -126,6 +126,10 @@ public class Sector{
public String name(){
if(preset != null && info.name == null) return preset.localizedName;
//single-sector "planets" use their own name for the sector name.
if(info.name == null && planet.sectors.size == 1){
return planet.localizedName;
}
return info.name == null ? id + "" : info.name;
}

View File

@@ -256,6 +256,13 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
this.listener = listener;
launchSector = sector;
//automatically select next planets; TODO pan!
if(sector.planet.launchCandidates.size == 1){
state.planet = sector.planet.launchCandidates.first();
}
//TODO pan over to correct planet
//update view to sector
zoom = 1f;
state.zoom = 1f;
@@ -292,7 +299,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
boolean canSelect(Sector sector){
if(mode == select) return sector.hasBase();
//cannot launch to existing sector w/ accelerator
//cannot launch to existing sector w/ accelerator TODO test
if(mode == planetLaunch) return !sector.hasBase();
if(sector.hasBase() || sector.id == sector.planet.startSector) return true;
//preset sectors can only be selected once unlocked
@@ -452,7 +459,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
boolean selectable(Planet planet){
//TODO what if any sector is selectable?
//TODO launch criteria - which planets can be launched to? Where should this be defined? Should planets even be selectable?
if(mode == planetLaunch) return launchSector != null && planet != launchSector.planet;
if(mode == planetLaunch) return launchSector != null && planet != launchSector.planet && launchSector.planet.launchCandidates.contains(planet);
return planet == state.planet || (planet.alwaysUnlocked && planet.isLandable()) || planet.sectors.contains(Sector::hasBase);
}