Made tiles not clear overlay on setFloor + cleanup/refactor
This commit is contained in:
@@ -10,6 +10,13 @@ import mindustry.world.blocks.environment.*;
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class DrawOperation{
|
||||
static final int
|
||||
opFloor = 0,
|
||||
opBlock = 1,
|
||||
opRotation = 2,
|
||||
opTeam = 3,
|
||||
opOverlay = 4;
|
||||
|
||||
private LongSeq array = new LongSeq();
|
||||
|
||||
public boolean isEmpty(){
|
||||
@@ -39,42 +46,44 @@ public class DrawOperation{
|
||||
}
|
||||
|
||||
short getTile(Tile tile, byte type){
|
||||
if(type == OpType.floor.ordinal()){
|
||||
return tile.floorID();
|
||||
}else if(type == OpType.block.ordinal()){
|
||||
return tile.blockID();
|
||||
}else if(type == OpType.rotation.ordinal()){
|
||||
return tile.build == null ? 0 : (byte)tile.build.rotation;
|
||||
}else if(type == OpType.team.ordinal()){
|
||||
return (byte)tile.getTeamID();
|
||||
}else if(type == OpType.overlay.ordinal()){
|
||||
return tile.overlayID();
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid type.");
|
||||
return switch(type){
|
||||
case opFloor -> tile.floorID();
|
||||
case opOverlay -> tile.overlayID();
|
||||
case opBlock -> tile.blockID();
|
||||
case opRotation -> tile.build == null ? 0 : (byte)tile.build.rotation;
|
||||
case opTeam -> (byte)tile.getTeamID();
|
||||
default -> throw new IllegalArgumentException("Invalid type.");
|
||||
};
|
||||
}
|
||||
|
||||
void setTile(Tile tile, byte type, short to){
|
||||
editor.load(() -> {
|
||||
if(type == OpType.floor.ordinal()){
|
||||
if(content.block(to) instanceof Floor floor){
|
||||
tile.setFloor(floor);
|
||||
switch(type){
|
||||
case opFloor -> {
|
||||
if(content.block(to) instanceof Floor floor){
|
||||
tile.setFloor(floor);
|
||||
}
|
||||
}
|
||||
}else if(type == OpType.block.ordinal()){
|
||||
tile.getLinkedTiles(t -> editor.renderer.updatePoint(t.x, t.y));
|
||||
|
||||
Block block = content.block(to);
|
||||
tile.setBlock(block, tile.team(), tile.build == null ? 0 : tile.build.rotation);
|
||||
if(tile.build != null){
|
||||
tile.build.enabled = true;
|
||||
case opOverlay -> {
|
||||
if(content.block(to) instanceof Floor floor){
|
||||
tile.setOverlay(floor);
|
||||
}
|
||||
}
|
||||
case opBlock -> {
|
||||
tile.getLinkedTiles(t -> editor.renderer.updatePoint(t.x, t.y));
|
||||
|
||||
tile.getLinkedTiles(t -> editor.renderer.updatePoint(t.x, t.y));
|
||||
}else if(type == OpType.rotation.ordinal()){
|
||||
if(tile.build != null) tile.build.rotation = to;
|
||||
}else if(type == OpType.team.ordinal()){
|
||||
tile.setTeam(Team.get(to));
|
||||
}else if(type == OpType.overlay.ordinal()){
|
||||
tile.setOverlayID(to);
|
||||
Block block = content.block(to);
|
||||
tile.setBlock(block, tile.team(), tile.build == null ? 0 : tile.build.rotation);
|
||||
if(tile.build != null){
|
||||
tile.build.enabled = true;
|
||||
}
|
||||
|
||||
tile.getLinkedTiles(t -> editor.renderer.updatePoint(t.x, t.y));
|
||||
}
|
||||
case opRotation -> {
|
||||
if(tile.build != null) tile.build.rotation = to;
|
||||
}
|
||||
case opTeam -> tile.setTeam(Team.get(to));
|
||||
}
|
||||
});
|
||||
editor.renderer.updatePoint(tile.x, tile.y);
|
||||
@@ -87,12 +96,4 @@ public class DrawOperation{
|
||||
byte type;
|
||||
short value;
|
||||
}
|
||||
|
||||
public enum OpType{
|
||||
floor,
|
||||
block,
|
||||
rotation,
|
||||
team,
|
||||
overlay
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package mindustry.editor;
|
||||
|
||||
import arc.func.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.editor.DrawOperation.*;
|
||||
import mindustry.game.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.world.*;
|
||||
@@ -27,17 +26,16 @@ public class EditorTile extends Tile{
|
||||
if(type instanceof OverlayFloor){
|
||||
//don't place on liquids
|
||||
if(floor.hasSurface() || !type.needsSurface){
|
||||
setOverlayID(type.id);
|
||||
setOverlay(type);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if(floor == type && overlayID() == 0) return;
|
||||
if(overlayID() != 0) op(OpType.overlay, overlayID());
|
||||
if(floor != type) op(OpType.floor, floor.id);
|
||||
if(floor == type) return;
|
||||
|
||||
op(DrawOperation.opFloor, floor.id);
|
||||
|
||||
this.floor = type;
|
||||
this.overlay = (Floor)Blocks.air;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,14 +57,14 @@ public class EditorTile extends Tile{
|
||||
|
||||
if(!isCenter()){
|
||||
EditorTile cen = (EditorTile)build.tile;
|
||||
cen.op(OpType.rotation, (byte)build.rotation);
|
||||
cen.op(OpType.team, (byte)build.team.id);
|
||||
cen.op(OpType.block, block.id);
|
||||
cen.op(DrawOperation.opRotation, (byte)build.rotation);
|
||||
cen.op(DrawOperation.opTeam, (byte)build.team.id);
|
||||
cen.op(DrawOperation.opBlock, block.id);
|
||||
update();
|
||||
}else{
|
||||
if(build != null) op(OpType.rotation, (byte)build.rotation);
|
||||
if(build != null) op(OpType.team, (byte)build.team.id);
|
||||
op(OpType.block, block.id);
|
||||
if(build != null) op(DrawOperation.opRotation, (byte)build.rotation);
|
||||
if(build != null) op(DrawOperation.opTeam, (byte)build.team.id);
|
||||
op(DrawOperation.opBlock, block.id);
|
||||
|
||||
}
|
||||
|
||||
@@ -81,7 +79,7 @@ public class EditorTile extends Tile{
|
||||
}
|
||||
|
||||
if(getTeamID() == team.id) return;
|
||||
op(OpType.team, (byte)getTeamID());
|
||||
op(DrawOperation.opTeam, (byte)getTeamID());
|
||||
super.setTeam(team);
|
||||
|
||||
getLinkedTiles(t -> editor.renderer.updatePoint(t.x, t.y));
|
||||
@@ -96,7 +94,7 @@ public class EditorTile extends Tile{
|
||||
|
||||
if(!floor.hasSurface() && overlay.asFloor().needsSurface && (overlay instanceof OreBlock || !floor.supportsOverlay)) return;
|
||||
if(overlay() == overlay) return;
|
||||
op(OpType.overlay, this.overlay.id);
|
||||
op(DrawOperation.opOverlay, this.overlay.id);
|
||||
super.setOverlay(overlay);
|
||||
}
|
||||
|
||||
@@ -162,7 +160,7 @@ public class EditorTile extends Tile{
|
||||
return state.isGame() || editor.isLoading() || world.isGenerating();
|
||||
}
|
||||
|
||||
private void op(OpType type, short value){
|
||||
editor.addTileOp(TileOp.get(x, y, (byte)type.ordinal(), value));
|
||||
private void op(int type, short value){
|
||||
editor.addTileOp(TileOp.get(x, y, (byte)type, value));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ public enum EditorTool{
|
||||
Block dest = tile.floor();
|
||||
if(dest == editor.drawBlock) return;
|
||||
tester = t -> t.floor() == dest;
|
||||
setter = t -> t.setFloorUnder(editor.drawBlock.asFloor());
|
||||
setter = t -> t.setFloor(editor.drawBlock.asFloor());
|
||||
}else{
|
||||
Block dest = tile.block();
|
||||
if(dest == editor.drawBlock) return;
|
||||
|
||||
@@ -7,7 +7,6 @@ import arc.math.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.struct.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.editor.DrawOperation.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.game.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -166,7 +165,7 @@ public class MapEditor{
|
||||
}
|
||||
}else if(!(tile.block().isMultiblock() && !drawBlock.isMultiblock())){
|
||||
if(drawBlock.rotate && tile.build != null && tile.build.rotation != rotation){
|
||||
addTileOp(TileOp.get(tile.x, tile.y, (byte)OpType.rotation.ordinal(), (byte)rotation));
|
||||
addTileOp(TileOp.get(tile.x, tile.y, (byte)DrawOperation.opRotation, (byte)rotation));
|
||||
}
|
||||
|
||||
tile.setBlock(drawBlock, drawTeam, rotation);
|
||||
|
||||
Reference in New Issue
Block a user