Asteroid ores (1)

This commit is contained in:
Anuken
2021-06-20 21:02:31 -04:00
parent 448d1e2c77
commit 4a88f64fa9
8 changed files with 81 additions and 10 deletions

View File

@@ -6,26 +6,32 @@ import mindustry.content.*;
import mindustry.game.*;
import mindustry.maps.generators.*;
import mindustry.type.*;
import mindustry.world.blocks.environment.*;
import mindustry.world.meta.*;
import static mindustry.Vars.*;
public class AsteroidGenerator extends BlankPlanetGenerator{
//TODO nonstatic
public static int min = 20, max = 28, octaves = 2, foct = 3;
public static float radMin = 12f, radMax = 60f, persistence = 0.4f, scale = 30f, mag = 0.46f, thresh = 1f;
public static float fmag = 0.6f, fscl = 50f, fper = 0.6f;
public static float iceChance = 0.05f, carbonChance = 0.1f;
Rand rand;
int seed;
void asteroid(int ax, int ay, int radius){
Floor floor = (
rand.chance(iceChance) ? Blocks.ice :
rand.chance(carbonChance) ? Blocks.graphiticStone :
Blocks.ferricStone
).asFloor();
for(int x = ax - radius; x <= ax + radius; x++){
for(int y = ay - radius; y <= ay + radius; y++){
if(tiles.in(x, y) && Mathf.dst(x, y, ax, ay) / (radius) + Simplex.noise2d(seed, octaves, persistence, 1f / scale, x, y) * mag < thresh){
tiles.getn(x, y).setFloor(Blocks.ferricStone.asFloor());
tiles.getn(x, y).setFloor(floor);
}
}
}
@@ -41,6 +47,7 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
floor = Blocks.space;
});
//spawn asteroids
asteroid(sx, sy, rand.random(30, 50));
int amount = rand.random(min, max);
@@ -50,7 +57,7 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
asteroid((int)ax, (int)ay, (int)radius);
}
//tiny asteroids.
//tiny asteroids
int smalls = rand.random(min, max) * 3;
for(int i = 0; i < smalls; i++){
float radius = rand.random(1, 8), ax = rand.random(radius, width - radius), ay = rand.random(radius, height - radius);
@@ -58,6 +65,7 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
asteroid((int)ax, (int)ay, (int)radius);
}
//random noise stone
pass((x, y) -> {
if(floor != Blocks.space){
if(Ridged.noise2d(seed, x, y, foct, fper, 1f / fscl) > fmag){
@@ -66,6 +74,7 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
}
});
//walls at insides
pass((x, y) -> {
if(floor == Blocks.space || Ridged.noise2d(seed + 1, x, y, 3, 0.5f, 1f / 60f) > 0.38f || Mathf.within(x, y, sx, sy, 20 + Ridged.noise2d(seed, x, y, 3, 0.5f, 1f / 30f) * 6f)) return;
@@ -82,11 +91,20 @@ public class AsteroidGenerator extends BlankPlanetGenerator{
});
//random craters
pass((x, y) -> {
if(floor == Blocks.ferricStone && rand.chance(0.02)) floor = Blocks.ferricCraters;
if(floor == Blocks.stone && rand.chance(0.02)) floor = Blocks.craters;
});
decoration(0.013f);
//lead generates around stone walls
oreAround(Blocks.oreLead, Blocks.stoneWall, 3, 69f, 0.6f);
//copper only generates on ferric stone
ore(Blocks.oreCopper, Blocks.ferricStone, 5f, 0.8f);
Schematics.placeLaunchLoadout(sx, sy);
state.rules.environment = Env.space;