Clearer indication of launch origin sector
This commit is contained in:
@@ -114,6 +114,9 @@ public class PlanetRenderer implements Disposable{
|
||||
|
||||
if(params.renderer != null){
|
||||
params.renderer.renderProjections(params.planet);
|
||||
|
||||
batch.proj().mul(params.planet.getTransform(mat));
|
||||
params.renderer.renderOverProjections(params.planet);
|
||||
}
|
||||
|
||||
Gl.disable(Gl.cullFace);
|
||||
@@ -176,6 +179,10 @@ public class PlanetRenderer implements Disposable{
|
||||
planet.renderSectors(batch, cam, params);
|
||||
}
|
||||
|
||||
public void drawArcLine(Planet planet, Vec3 a, Vec3 b){
|
||||
drawArcLine(planet, a, b, Pal.accent, Tmp.c3.set(Pal.accent).a(0f), 1f, 80f, 25, 0.006f);
|
||||
}
|
||||
|
||||
public void drawArc(Planet planet, Vec3 a, Vec3 b){
|
||||
drawArc(planet, a, b, Pal.accent, Color.clear, 1f);
|
||||
}
|
||||
@@ -188,6 +195,10 @@ public class PlanetRenderer implements Disposable{
|
||||
planet.drawArc(batch, a, b, from, to, length, timeScale, pointCount);
|
||||
}
|
||||
|
||||
public void drawArcLine(Planet planet, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount, float stroke){
|
||||
planet.drawArcLine(batch, a, b, from, to, length, timeScale, pointCount, stroke);
|
||||
}
|
||||
|
||||
public void drawBorders(Sector sector, Color base, float alpha){
|
||||
sector.planet.drawBorders(batch, sector, base, alpha);
|
||||
if(batch.getNumVertices() >= batch.getMaxVertices() - 6 * 6){
|
||||
@@ -230,5 +241,6 @@ public class PlanetRenderer implements Disposable{
|
||||
public interface PlanetInterfaceRenderer{
|
||||
void renderSectors(Planet planet);
|
||||
void renderProjections(Planet planet);
|
||||
default void renderOverProjections(Planet planet){}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ public class Planet extends UnlockableContent{
|
||||
private static final Mat3D mat = new Mat3D();
|
||||
/** drawArc() temp curve points. */
|
||||
private static final Seq<Vec3> points = new Seq<>();
|
||||
private static final Vec3 tmpNormal = new Vec3();
|
||||
|
||||
/** Mesh used for rendering. Created on load() - will be null on the server! */
|
||||
public @Nullable GenericMesh mesh;
|
||||
@@ -601,6 +602,34 @@ public class Planet extends UnlockableContent{
|
||||
batch.flush(Gl.lineStrip);
|
||||
}
|
||||
|
||||
/** Draws an arc from one point to another on the planet. Has thickness. */
|
||||
public void drawArcLine(VertexBatch3D batch, Vec3 a, Vec3 b, Color from, Color to, float length, float timeScale, int pointCount, float stroke){
|
||||
//increase curve height when on opposite side of planet, so it doesn't tunnel through
|
||||
float scaledOutlineRad = outlineRad * radius;
|
||||
float dot = 1f - (Tmp.v32.set(a).nor().dot(Tmp.v33.set(b).nor()) + 1f)/2f;
|
||||
|
||||
Vec3 avg = Tmp.v31.set(b).add(a).scl(0.5f);
|
||||
avg.setLength(radius * (1f + length) + dot * 1.35f);
|
||||
|
||||
points.clear();
|
||||
points.addAll(Tmp.v33.set(b).setLength(scaledOutlineRad), Tmp.v31, Tmp.v34.set(a).setLength(scaledOutlineRad));
|
||||
Tmp.bz3.set(points);
|
||||
|
||||
Vec3 normal = tmpNormal;
|
||||
Vec3 point1 = points.get(0), point2 = points.get(1), point3 = points.get(2);
|
||||
normal.set(point1).sub(point2).crs(point2.x - point3.x, point2.y - point3.y, point2.z - point3.z).nor();
|
||||
|
||||
for(int i = 0; i < pointCount + 1; i++){
|
||||
float f = i / (float)pointCount;
|
||||
Tmp.c1.set(from).lerp(to, (f + Time.globalTime / timeScale) % 1f);
|
||||
batch.color(Tmp.c1);
|
||||
batch.vertex(Tmp.bz3.valueAt(Tmp.v32, f).add(normal, stroke));
|
||||
batch.color(Tmp.c1);
|
||||
batch.vertex(Tmp.bz3.valueAt(Tmp.v32, f).add(normal, -stroke));
|
||||
}
|
||||
batch.flush(Gl.triangleStrip);
|
||||
}
|
||||
|
||||
public Vec3 lookAt(Sector sector, Vec3 out){
|
||||
return out.set(sector.tile.v).rotate(Vec3.Y, -getRotation());
|
||||
}
|
||||
|
||||
@@ -483,6 +483,9 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
}
|
||||
|
||||
Sector hoverOrSelect = hovered != null ? hovered : selected;
|
||||
Sector launchFrom = hoverOrSelect != null && !hoverOrSelect.hasBase() ? findLauncher(hoverOrSelect) : null;
|
||||
|
||||
Sector current = Vars.state.getSector() != null && Vars.state.getSector().isBeingPlayed() && Vars.state.getSector().planet == state.planet ? Vars.state.getSector() : null;
|
||||
|
||||
if(current != null){
|
||||
@@ -502,25 +505,29 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
|
||||
planets.batch.flush(Gl.triangles);
|
||||
}
|
||||
|
||||
if(hovered != null && !hovered.hasBase()){
|
||||
Sector launchFrom = findLauncher(hovered);
|
||||
if(launchFrom != null && hovered != launchFrom && canSelect(hovered)){
|
||||
planets.drawArc(planet, launchFrom.tile.v, hovered.tile.v);
|
||||
}
|
||||
@Override
|
||||
public void renderOverProjections(Planet planet){
|
||||
Sector hoverOrSelect = hovered != null ? hovered : selected;
|
||||
Sector launchFrom = hoverOrSelect != null && !hoverOrSelect.hasBase() ? findLauncher(hoverOrSelect) : null;
|
||||
|
||||
if(hoverOrSelect != null && !hoverOrSelect.hasBase() && launchFrom != null && hoverOrSelect != launchFrom && canSelect(hoverOrSelect)){
|
||||
planets.drawArcLine(planet, launchFrom.tile.v, hoverOrSelect.tile.v);
|
||||
}
|
||||
|
||||
if(mode == planetLaunch && launchSector != null && selected != null && hovered == null){
|
||||
planets.drawArc(planet, launchSector.tile.v, selected.tile.v);
|
||||
planets.drawArcLine(planet, launchSector.tile.v, selected.tile.v);
|
||||
}
|
||||
|
||||
if(state.uiAlpha > 0.001f){
|
||||
for(Sector sec : planet.sectors){
|
||||
if(sec.hasBase()){
|
||||
//draw vulnerable sector attack arc
|
||||
if(planet.campaignRules.sectorInvasion){
|
||||
for(Sector enemy : sec.near()){
|
||||
if(enemy.hasEnemyBase()){
|
||||
planets.drawArc(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25);
|
||||
if(enemy.hasEnemyBase() && (enemy.preset == null || !enemy.preset.requireUnlock)){
|
||||
planets.drawArcLine(planet, enemy.tile.v, sec.tile.v, Team.crux.color.write(Tmp.c2).a(state.uiAlpha), Color.clear, 0.24f, 110f, 25, 0.005f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -538,7 +545,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user