Fixed rendering of liquids under floors
This commit is contained in:
@@ -10,6 +10,7 @@ import mindustry.content.*;
|
|||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.blocks.environment.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -67,7 +68,7 @@ public enum EditorTool{
|
|||||||
}else if(mode == 2){
|
}else if(mode == 2){
|
||||||
//draw teams
|
//draw teams
|
||||||
editor.drawCircle(x, y, tile -> tile.setTeam(editor.drawTeam));
|
editor.drawCircle(x, y, tile -> tile.setTeam(editor.drawTeam));
|
||||||
}else if(mode == 3){
|
}else if(mode == 3 && !(editor.drawBlock instanceof Floor f && f.isLiquid)){
|
||||||
editor.drawBlocks(x, y, false, true, tile -> tile.floor().isLiquid);
|
editor.drawBlocks(x, y, false, true, tile -> tile.floor().isLiquid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -233,6 +233,21 @@ public class Floor extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawBase(Tile tile){
|
public void drawBase(Tile tile){
|
||||||
|
drawMain(tile);
|
||||||
|
|
||||||
|
if(drawEdgeIn){
|
||||||
|
drawEdges(tile);
|
||||||
|
}
|
||||||
|
drawOverlay(tile);
|
||||||
|
|
||||||
|
if(tile.overlay() != Blocks.air && tile.floor() == this && isLiquid){
|
||||||
|
Draw.alpha(1f - overlayAlpha);
|
||||||
|
drawMain(tile);
|
||||||
|
Draw.color();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawMain(Tile tile){
|
||||||
if(tilingVariants > 0){
|
if(tilingVariants > 0){
|
||||||
int index = Mathf.randomSeed(Point2.pack(tile.x / tilingSize, tile.y / tilingSize), 0, tilingVariants - 1);
|
int index = Mathf.randomSeed(Point2.pack(tile.x / tilingSize, tile.y / tilingSize), 0, tilingVariants - 1);
|
||||||
TextureRegion[][] regions = tilingRegions[index];
|
TextureRegion[][] regions = tilingRegions[index];
|
||||||
@@ -258,10 +273,6 @@ public class Floor extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
Draw.alpha(1f);
|
Draw.alpha(1f);
|
||||||
if(drawEdgeIn){
|
|
||||||
drawEdges(tile);
|
|
||||||
}
|
|
||||||
drawOverlay(tile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkAutotileSame(Tile tile, @Nullable Tile other){
|
public boolean checkAutotileSame(Tile tile, @Nullable Tile other){
|
||||||
@@ -279,13 +290,7 @@ public class Floor extends Block{
|
|||||||
public void drawOverlay(Tile tile){
|
public void drawOverlay(Tile tile){
|
||||||
Floor floor = tile.overlay();
|
Floor floor = tile.overlay();
|
||||||
if(floor != Blocks.air && floor != this){
|
if(floor != Blocks.air && floor != this){
|
||||||
if(isLiquid){
|
|
||||||
Draw.alpha(overlayAlpha);
|
|
||||||
}
|
|
||||||
floor.drawBase(tile);
|
floor.drawBase(tile);
|
||||||
if(isLiquid){
|
|
||||||
Draw.alpha(1f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,11 +356,15 @@ public class Floor extends Block{
|
|||||||
Point2 point = Geometry.d8[i];
|
Point2 point = Geometry.d8[i];
|
||||||
Tile other = tile.nearby(point);
|
Tile other = tile.nearby(point);
|
||||||
|
|
||||||
if(other != null && other.floor().drawEdgeOut && doEdge(tile, other, other.floor()) && other.floor().cacheLayer == realCache && other.floor().edges(tile.x, tile.y) != null){
|
if(other == null) continue;
|
||||||
if(!blended.getAndSet(other.floor().id)){
|
|
||||||
blenders.add(other.floor());
|
Floor ob = (this == tile.floor() || other.overlay() == Blocks.air ? other.floor() : other.overlay());
|
||||||
|
|
||||||
|
if(ob.drawEdgeOut && doEdge(tile, other, ob) && other.floor().cacheLayer == realCache && ob.edges(tile.x, tile.y) != null){
|
||||||
|
if(!blended.getAndSet(ob.id)){
|
||||||
|
blenders.add(ob);
|
||||||
}
|
}
|
||||||
dirs[i] = other.floorID();
|
dirs[i] = ob.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,13 +372,19 @@ public class Floor extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void drawBlended(Tile tile, boolean checkId){
|
protected void drawBlended(Tile tile, boolean checkId){
|
||||||
blenders.sort(a -> a.id);
|
//prioritize the "actual" floor over other floors to fix weird square corners
|
||||||
|
blenders.sort(a -> a.id + (tile.floor() != this && a == tile.floor() ? 99999 : 0));
|
||||||
|
|
||||||
for(Floor block : blenders){
|
for(Floor block : blenders){
|
||||||
for(int i = 0; i < 8; i++){
|
for(int i = 0; i < 8; i++){
|
||||||
Point2 point = Geometry.d8[i];
|
Point2 point = Geometry.d8[i];
|
||||||
Tile other = tile.nearby(point);
|
Tile other = tile.nearby(point);
|
||||||
if(other != null && other.floor() == block && (!checkId || dirs[i] == block.id)){
|
|
||||||
|
if(other == null) continue;
|
||||||
|
|
||||||
|
Floor ob = (this == tile.floor() || other.overlay() == Blocks.air ? other.floor() : other.overlay());
|
||||||
|
|
||||||
|
if(ob == block && (!checkId || dirs[i] == block.id)){
|
||||||
TextureRegion region = block.edge(tile.x, tile.y, 1 - point.x, 1 - point.y);
|
TextureRegion region = block.edge(tile.x, tile.y, 1 - point.x, 1 - point.y);
|
||||||
Draw.rect(region, tile.worldx(), tile.worldy());
|
Draw.rect(region, tile.worldx(), tile.worldy());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user