Erekir clouds
This commit is contained in:
@@ -6,21 +6,22 @@ uniform mat4 u_proj;
|
|||||||
uniform mat4 u_trans;
|
uniform mat4 u_trans;
|
||||||
uniform vec3 u_lightdir;
|
uniform vec3 u_lightdir;
|
||||||
uniform vec3 u_camdir;
|
uniform vec3 u_camdir;
|
||||||
|
uniform vec3 u_campos;
|
||||||
uniform vec3 u_ambientColor;
|
uniform vec3 u_ambientColor;
|
||||||
|
|
||||||
varying vec4 v_col;
|
varying vec4 v_col;
|
||||||
|
|
||||||
const vec3 diffuse = vec3(0.01);
|
const vec3 diffuse = vec3(0.01);
|
||||||
const float shinefalloff = 4.0;
|
|
||||||
const float shinelen = 0.2;
|
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
vec3 specular = vec3(0.0, 0.0, 0.0);
|
vec3 specular = vec3(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
|
//TODO this calculation is probably wrong
|
||||||
vec3 lightReflect = normalize(reflect(a_normal, u_lightdir));
|
vec3 lightReflect = normalize(reflect(a_normal, u_lightdir));
|
||||||
float specularFactor = dot(u_camdir, lightReflect);
|
vec3 vertexEye = normalize(u_campos - (u_trans * a_position).xyz);
|
||||||
|
float specularFactor = dot(vertexEye, lightReflect);
|
||||||
if(specularFactor > 0.0){
|
if(specularFactor > 0.0){
|
||||||
specular = vec3(1.0 * pow(specularFactor, 64.0)) * (1.0-a_color.a);
|
specular = vec3(1.0 * pow(specularFactor, 40.0)) * (1.0-a_color.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec3 norc = (u_ambientColor + specular) * (diffuse + vec3(clamp((dot(a_normal, u_lightdir) + 1.0) / 2.0, 0.0, 1.0)));
|
vec3 norc = (u_ambientColor + specular) * (diffuse + vec3(clamp((dot(a_normal, u_lightdir) + 1.0) / 2.0, 0.0, 1.0)));
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ public class Planets{
|
|||||||
erekir = new Planet("erekir", sun, 1f, 2){{
|
erekir = new Planet("erekir", sun, 1f, 2){{
|
||||||
generator = new ErekirPlanetGenerator();
|
generator = new ErekirPlanetGenerator();
|
||||||
meshLoader = () -> new HexMesh(this, 5);
|
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)
|
||||||
|
);
|
||||||
atmosphereColor = Color.valueOf("f07218");
|
atmosphereColor = Color.valueOf("f07218");
|
||||||
startSector = 10;
|
startSector = 10;
|
||||||
atmosphereRadIn = 0.02f;
|
atmosphereRadIn = 0.02f;
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ public class Shaders{
|
|||||||
public Vec3 lightDir = new Vec3(1, 1, 1).nor();
|
public Vec3 lightDir = new Vec3(1, 1, 1).nor();
|
||||||
public Color ambientColor = Color.white.cpy();
|
public Color ambientColor = Color.white.cpy();
|
||||||
public Vec3 camDir = new Vec3();
|
public Vec3 camDir = new Vec3();
|
||||||
|
public Vec3 camPos = new Vec3();
|
||||||
public Planet planet;
|
public Planet planet;
|
||||||
|
|
||||||
public PlanetShader(){
|
public PlanetShader(){
|
||||||
@@ -110,6 +111,7 @@ public class Shaders{
|
|||||||
setUniformf("u_lightdir", lightDir);
|
setUniformf("u_lightdir", lightDir);
|
||||||
setUniformf("u_ambientColor", ambientColor.r, ambientColor.g, ambientColor.b);
|
setUniformf("u_ambientColor", ambientColor.r, ambientColor.g, ambientColor.b);
|
||||||
setUniformf("u_camdir", camDir);
|
setUniformf("u_camdir", camDir);
|
||||||
|
setUniformf("u_campos", renderer.planets.cam.position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -228,8 +228,8 @@ public class PlanetRenderer implements Disposable{
|
|||||||
batch.flush(Gl.lineStrip);
|
batch.flush(Gl.lineStrip);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawBorders(Sector sector, Color base){
|
public void drawBorders(Sector sector, Color base, float alpha){
|
||||||
Color color = Tmp.c1.set(base).a(base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f));
|
Color color = Tmp.c1.set(base).a((base.a + 0.3f + Mathf.absin(Time.globalTime, 5f, 0.3f)) * alpha);
|
||||||
|
|
||||||
float r1 = 1f;
|
float r1 = 1f;
|
||||||
float r2 = outlineRad + 0.001f;
|
float r2 = outlineRad + 0.001f;
|
||||||
@@ -284,8 +284,8 @@ public class PlanetRenderer implements Disposable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawSelection(Sector sector){
|
public void drawSelection(Sector sector, float alpha){
|
||||||
drawSelection(sector, Pal.accent, 0.04f, 0.001f);
|
drawSelection(sector, Tmp.c1.set(Pal.accent).a(alpha), 0.04f, 0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawSelection(Sector sector, Color color, float stroke, float length){
|
public void drawSelection(Sector sector, Color color, float stroke, float length){
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class TantrosPlanetGenerator extends PlanetGenerator{
|
|||||||
@Override
|
@Override
|
||||||
public Color getColor(Vec3 position){
|
public Color getColor(Vec3 position){
|
||||||
float depth = Simplex.noise3d(seed, 2, 0.56, 1.7f, position.x, position.y, position.z) / 2f;
|
float depth = Simplex.noise3d(seed, 2, 0.56, 1.7f, position.x, position.y, position.z) / 2f;
|
||||||
return c1.write(out).lerp(c2, Mathf.clamp(Mathf.round(depth, 0.15f))).a(0.6f);
|
return c1.write(out).lerp(c2, Mathf.clamp(Mathf.round(depth, 0.15f))).a(0.2f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -366,19 +366,19 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
Sector current = Vars.state.getSector() != null && Vars.state.getSector().isBeingPlayed() && Vars.state.getSector().planet == state.planet ? Vars.state.getSector() : null;
|
Sector current = Vars.state.getSector() != null && Vars.state.getSector().isBeingPlayed() && Vars.state.getSector().planet == state.planet ? Vars.state.getSector() : null;
|
||||||
|
|
||||||
if(current != null){
|
if(current != null){
|
||||||
planets.fill(current, hoverColor, -0.001f);
|
planets.fill(current, hoverColor.write(Tmp.c1).mulA(state.uiAlpha), -0.001f);
|
||||||
}
|
}
|
||||||
|
|
||||||
//draw hover border
|
//draw hover border
|
||||||
if(hovered != null){
|
if(hovered != null){
|
||||||
planets.fill(hovered, hoverColor, -0.001f);
|
planets.fill(hovered, hoverColor.write(Tmp.c1).mulA(state.uiAlpha), -0.001f);
|
||||||
planets.drawBorders(hovered, borderColor);
|
planets.drawBorders(hovered, borderColor, state.uiAlpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
//draw selected borders
|
//draw selected borders
|
||||||
if(selected != null){
|
if(selected != null){
|
||||||
planets.drawSelection(selected);
|
planets.drawSelection(selected, state.uiAlpha);
|
||||||
planets.drawBorders(selected, borderColor);
|
planets.drawBorders(selected, borderColor, state.uiAlpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
planets.batch.flush(Gl.triangles);
|
planets.batch.flush(Gl.triangles);
|
||||||
@@ -443,9 +443,10 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
if(hovered != null){
|
if(hovered != null && state.uiAlpha > 0.01f){
|
||||||
planets.drawPlane(hovered, () -> {
|
planets.drawPlane(hovered, () -> {
|
||||||
Draw.color(hovered.isAttacked() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f));
|
Draw.color(hovered.isAttacked() ? Pal.remove : Color.white, Pal.accent, Mathf.absin(5f, 1f));
|
||||||
|
Draw.alpha(state.uiAlpha);
|
||||||
|
|
||||||
var icon = hovered.locked() && !canSelect(hovered) ? Fonts.getLargeIcon("lock") : hovered.isAttacked() ? Fonts.getLargeIcon("warning") : hovered.icon();
|
var icon = hovered.locked() && !canSelect(hovered) ? Fonts.getLargeIcon("lock") : hovered.isAttacked() ? Fonts.getLargeIcon("warning") : hovered.icon();
|
||||||
|
|
||||||
@@ -690,6 +691,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
addChild(hoverLabel);
|
addChild(hoverLabel);
|
||||||
hoverLabel.toFront();
|
hoverLabel.toFront();
|
||||||
hoverLabel.touchable = Touchable.disabled;
|
hoverLabel.touchable = Touchable.disabled;
|
||||||
|
hoverLabel.color.a = state.uiAlpha;
|
||||||
|
|
||||||
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
|
Vec3 pos = planets.cam.project(Tmp.v31.set(hovered.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -state.planet.getRotation()).add(state.planet.position));
|
||||||
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
|
hoverLabel.setPosition(pos.x - Core.scene.marginLeft, pos.y - Core.scene.marginBottom, Align.center);
|
||||||
|
|||||||
@@ -24,4 +24,4 @@ android.useAndroidX=true
|
|||||||
#used for slow jitpack builds; TODO see if this actually works
|
#used for slow jitpack builds; TODO see if this actually works
|
||||||
org.gradle.internal.http.socketTimeout=100000
|
org.gradle.internal.http.socketTimeout=100000
|
||||||
org.gradle.internal.http.connectionTimeout=100000
|
org.gradle.internal.http.connectionTimeout=100000
|
||||||
archash=e1de8b18f7
|
archash=a5df968996
|
||||||
|
|||||||
Reference in New Issue
Block a user