Player base emissive lights on Serpulo (WIP)

This commit is contained in:
Anuken
2025-05-28 23:10:45 -04:00
parent 43fb2e7cdc
commit 8f0ca13ace
6 changed files with 46 additions and 16 deletions

View File

@@ -25,11 +25,18 @@ public abstract class PlanetGenerator extends BasicGenerator implements HexMeshe
protected @Nullable Sector sector;
/** Should generate sector bases for a planet. */
public void generateSector(Sector sector){
}
public void onSectorCaptured(Sector sector){
}
public void onSectorLost(Sector sector){
}
public void getLockedText(Sector hovered, StringBuilder out){
out.append("[gray]").append(Iconc.lock).append(" ").append(Core.bundle.get("locked"));
}

View File

@@ -64,6 +64,16 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
return (Mathf.pow(Simplex.noise3d(seed, 7, 0.5f, 1f/3f, position.x * scl, position.y * scl, position.z * scl), 2.3f) + waterOffset) / (1f + waterOffset);
}
@Override
public void onSectorCaptured(Sector sector){
sector.planet.requiresMeshReload = true;
}
@Override
public void onSectorLost(Sector sector){
sector.planet.requiresMeshReload = true;
}
@Override
public boolean allowLanding(Sector sector){
return sector.planet.allowLaunchToNumbered && (sector.hasBase() || sector.near().contains(s -> s.hasBase() &&
@@ -104,17 +114,26 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{
@Override
public Color getEmissiveColor(Vec3 position){
float dst = 999f;
float dst = 999f, captureDst = 999f;
for(Sector sector : Planets.serpulo.sectors){
if(sector.hasEnemyBase() && !sector.isCaptured()){
dst = Math.min(dst, position.dst(sector.tile.v));
dst = Math.min(dst, position.dst(sector.tile.v) - (sector.preset != null ? sector.preset.difficulty/10f * 0.03f - 0.03f : 0f));
}else if(sector.hasBase()){
captureDst = Math.min(captureDst, position.dst(sector.tile.v));
}
}
float freq = 0.05f;
if(position.dst(basePos) < 0.55f && dst*metalDstScl + Simplex.noise3d(seed, 3, 0.4, 5.5f, position.x, position.y + 200f, position.z)*0.08f + ((basePos.dst(position) + 0.00f) % freq < freq/2f ? 1f : 0f) * 0.07f < 0.08f){
if(position.dst(basePos) < 0.55f ?
dst*metalDstScl + Simplex.noise3d(seed, 3, 0.4, 5.5f, position.x, position.y + 200f, position.z)*0.08f + ((basePos.dst(position) + 0.00f) % freq < freq/2f ? 1f : 0f) * 0.07f < 0.08f :
dst*metalDstScl + Simplex.noise3d(seed, 3, 0.4, 6f, position.x, position.y + 370f, position.z)*0.06f < 0.045){
return Tmp.c1.set(Team.crux.color).mul(0.8f + Simplex.noise3d(seed, 1, 1, 9f, position.x, position.y + 99f, position.z) * 0.4f)
.lerp(Team.sharded.color, 0.2f*Simplex.noise3d(seed, 1, 1, 9f, position.x, position.y + 999f, position.z));
}else if(captureDst*metalDstScl + Simplex.noise3d(seed, 3, 0.4, 6f, position.x, position.y + 600f, position.z)*0.07f < 0.05){
return Tmp.c1.set(Team.sharded.color).mul(0.7f + Simplex.noise3d(seed, 1, 1, 9f, position.x, position.y + 99f, position.z) * 0.4f)
.lerp(Team.crux.color, 0.3f*Simplex.noise3d(seed, 1, 1, 9f, position.x, position.y + 999f, position.z));
}
return Color.clear;