package mindustry.content; import arc.func.*; import arc.graphics.*; import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; import mindustry.game.*; import mindustry.graphics.*; import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.maps.planet.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.meta.*; public class Planets{ public static Planet sun, erekir, tantros, serpulo, gier, notva, verilus; public static void load(){ sun = new Planet("sun", null, 4f){{ bloom = true; accessible = false; meshLoader = () -> new SunMesh( this, 4, 5, 0.3, 1.7, 1.2, 1, 1.1f, Color.valueOf("ff7a38"), Color.valueOf("ff9638"), Color.valueOf("ffc64c"), Color.valueOf("ffc64c"), Color.valueOf("ffe371"), Color.valueOf("f4ee8e") ); }}; erekir = new Planet("erekir", sun, 1f, 2){{ generator = new ErekirPlanetGenerator(); meshLoader = () -> new HexMesh(this, 5); cloudMeshLoader = () -> new MultiMesh( new HexSkyMesh(this, 2, 0.15f, 0.14f, 5, Color.valueOf("eba768").a(0.75f), 2, 0.42f, 1f, 0.43f), new HexSkyMesh(this, 3, 0.6f, 0.15f, 5, Color.valueOf("eea293").a(0.75f), 2, 0.42f, 1.2f, 0.45f) ); alwaysUnlocked = true; landCloudColor = Color.valueOf("ed6542"); atmosphereColor = Color.valueOf("f07218"); defaultEnv = Env.scorching | Env.terrestrial; startSector = 10; atmosphereRadIn = 0.02f; atmosphereRadOut = 0.3f; tidalLock = true; orbitSpacing = 2f; totalRadius += 2.6f; lightSrcTo = 0.5f; lightDstFrom = 0.2f; clearSectorOnLose = true; defaultCore = Blocks.coreBastion; iconColor = Color.valueOf("ff9266"); enemyBuildSpeedMultiplier = 0.4f; //TODO disallowed for now allowLaunchToNumbered = false; //TODO SHOULD there be lighting? updateLighting = false; defaultAttributes.set(Attribute.heat, 0.8f); ruleSetter = r -> { r.waveTeam = Team.malis; r.placeRangeCheck = false; r.showSpawns = true; r.fog = true; r.staticFog = true; r.lighting = false; r.coreDestroyClear = true; r.onlyDepositCore = true; }; campaignRuleDefaults.fog = true; campaignRuleDefaults.showSpawns = true; campaignRuleDefaults.rtsAI = true; unlockedOnLand.add(Blocks.coreBastion); }}; //TODO names gier = makeAsteroid("gier", erekir, Blocks.ferricStoneWall, Blocks.carbonWall, -5, 0.4f, 7, 1f, gen -> { gen.min = 25; gen.max = 35; gen.carbonChance = 0.6f; gen.iceChance = 0f; gen.berylChance = 0.1f; }); notva = makeAsteroid("notva", sun, Blocks.ferricStoneWall, Blocks.beryllicStoneWall, -4, 0.55f, 9, 1.3f, gen -> { gen.berylChance = 0.8f; gen.iceChance = 0f; gen.carbonChance = 0.01f; gen.max += 2; }); tantros = new Planet("tantros", sun, 1f, 2){{ generator = new TantrosPlanetGenerator(); meshLoader = () -> new HexMesh(this, 4); accessible = false; visible = false; atmosphereColor = Color.valueOf("3db899"); iconColor = Color.valueOf("597be3"); startSector = 10; atmosphereRadIn = -0.01f; atmosphereRadOut = 0.3f; defaultEnv = Env.underwater | Env.terrestrial; ruleSetter = r -> { }; }}; serpulo = new Planet("serpulo", sun, 1f, 3){{ loadPlanetData = true; generator = new SerpuloPlanetGenerator(); meshLoader = () -> new HexMesh(this, 6); cloudMeshLoader = () -> new MultiMesh( new HexSkyMesh(this, 11, 0.15f, 0.13f, 5, new Color().set(Pal.spore).mul(0.9f).a(0.75f), 2, 0.45f, 0.9f, 0.38f), new HexSkyMesh(this, 1, 0.6f, 0.16f, 5, Color.white.cpy().lerp(Pal.spore, 0.55f).a(0.75f), 2, 0.45f, 1f, 0.41f) ); launchCapacityMultiplier = 0.5f; sectorSeed = 2; allowWaves = true; allowLegacyLaunchPads = true; allowWaveSimulation = true; allowSectorInvasion = true; allowLaunchSchematics = true; enemyCoreSpawnReplace = true; allowLaunchLoadout = true; //doesn't play well with configs prebuildBase = false; ruleSetter = r -> { r.waveTeam = Team.crux; r.placeRangeCheck = false; r.showSpawns = false; r.coreDestroyClear = true; }; showRtsAIRule = true; iconColor = Color.valueOf("7d4dff"); atmosphereColor = Color.valueOf("3c1b8f"); atmosphereRadIn = 0.02f; atmosphereRadOut = 0.3f; startSector = 15; alwaysUnlocked = true; allowSelfSectorLaunch = true; landCloudColor = Pal.spore.cpy().a(0.5f); }}; verilus = makeAsteroid("verlius", sun, Blocks.stoneWall, Blocks.iceWall, -1, 0.5f, 12, 2f, gen -> { gen.berylChance = 0f; gen.iceChance = 0.6f; gen.carbonChance = 0.1f; gen.ferricChance = 0f; }); } private static Planet makeAsteroid(String name, Planet parent, Block base, Block tint, int seed, float tintThresh, int pieces, float scale, Cons cgen){ return new Planet(name, parent, 0.12f){{ hasAtmosphere = false; updateLighting = false; sectors.add(new Sector(this, Ptile.empty)); camRadius = 0.68f * scale; minZoom = 0.6f; drawOrbit = false; accessible = false; clipRadius = 2f; defaultEnv = Env.space; icon = "commandRally"; generator = new AsteroidGenerator(); cgen.get((AsteroidGenerator)generator); meshLoader = () -> { iconColor = tint.mapColor; Color tinted = tint.mapColor.cpy().a(1f - tint.mapColor.a); Seq meshes = new Seq<>(); Color color = base.mapColor; Rand rand = new Rand(id + 2); meshes.add(new NoiseMesh( this, seed, 2, radius, 2, 0.55f, 0.45f, 14f, color, tinted, 3, 0.6f, 0.38f, tintThresh )); for(int j = 0; j < pieces; j++){ meshes.add(new MatMesh( new NoiseMesh(this, seed + j + 1, 1, 0.022f + rand.random(0.039f) * scale, 2, 0.6f, 0.38f, 20f, color, tinted, 3, 0.6f, 0.38f, tintThresh), new Mat3D().setToTranslation(Tmp.v31.setToRandomDirection(rand).setLength(rand.random(0.44f, 1.4f) * scale))) ); } return new MultiMesh(meshes.toArray(GenericMesh.class)); }; }}; } }