Colored floor tile
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 542 B |
@@ -604,3 +604,4 @@
|
|||||||
63078=crux-floor-2|block-crux-floor-2-ui
|
63078=crux-floor-2|block-crux-floor-2-ui
|
||||||
63077=crux-floor-3|block-crux-floor-3-ui
|
63077=crux-floor-3|block-crux-floor-3-ui
|
||||||
63076=crux-floor-4|block-crux-floor-4-ui
|
63076=crux-floor-4|block-crux-floor-4-ui
|
||||||
|
63075=colored-floor|block-colored-floor-ui
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import mindustry.entities.effect.*;
|
|||||||
import mindustry.entities.part.DrawPart.*;
|
import mindustry.entities.part.DrawPart.*;
|
||||||
import mindustry.entities.part.*;
|
import mindustry.entities.part.*;
|
||||||
import mindustry.entities.pattern.*;
|
import mindustry.entities.pattern.*;
|
||||||
import mindustry.game.*;
|
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
@@ -59,7 +58,7 @@ public class Blocks{
|
|||||||
shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, carbonBoulder, ferricBoulder, beryllicBoulder, yellowStoneBoulder,
|
shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, carbonBoulder, ferricBoulder, beryllicBoulder, yellowStoneBoulder,
|
||||||
arkyicBoulder, crystalCluster, vibrantCrystalCluster, crystalBlocks, crystalOrbs, crystallineBoulder, redIceBoulder, rhyoliteBoulder, redStoneBoulder,
|
arkyicBoulder, crystalCluster, vibrantCrystalCluster, crystalBlocks, crystalOrbs, crystallineBoulder, redIceBoulder, rhyoliteBoulder, redStoneBoulder,
|
||||||
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall,
|
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall,
|
||||||
darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal, cruxFloor1, cruxFloor2, cruxFloor3, cruxFloor4,
|
darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal, cruxFloor1, cruxFloor2, cruxFloor3, cruxFloor4, coloredFloor,
|
||||||
pebbles, tendrils,
|
pebbles, tendrils,
|
||||||
|
|
||||||
//ores
|
//ores
|
||||||
@@ -819,23 +818,27 @@ public class Blocks{
|
|||||||
|
|
||||||
cruxFloor2 = new Floor("crux-floor-2"){{
|
cruxFloor2 = new Floor("crux-floor-2"){{
|
||||||
autotile = true;
|
autotile = true;
|
||||||
emitLight = true;
|
//emitLight = true;
|
||||||
lightRadius = 30f;
|
//lightRadius = 30f;
|
||||||
lightColor = Team.crux.color.cpy().a(0.3f);
|
//lightColor = Team.crux.color.cpy().a(0.3f);
|
||||||
drawEdgeOut = false;
|
drawEdgeOut = false;
|
||||||
drawEdgeIn = false;
|
drawEdgeIn = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
cruxFloor3 = new Floor("crux-floor-3"){{
|
cruxFloor3 = new Floor("crux-floor-3"){{
|
||||||
autotile = true;
|
autotile = true;
|
||||||
emitLight = true;
|
|
||||||
drawEdgeOut = false;
|
drawEdgeOut = false;
|
||||||
drawEdgeIn = false;
|
drawEdgeIn = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
cruxFloor4 = new Floor("crux-floor-4"){{
|
cruxFloor4 = new Floor("crux-floor-4"){{
|
||||||
autotile = true;
|
autotile = true;
|
||||||
emitLight = true;
|
drawEdgeOut = false;
|
||||||
|
drawEdgeIn = false;
|
||||||
|
}};
|
||||||
|
|
||||||
|
coloredFloor = new ColoredFloor("colored-floor"){{
|
||||||
|
autotile = true;
|
||||||
drawEdgeOut = false;
|
drawEdgeOut = false;
|
||||||
drawEdgeIn = false;
|
drawEdgeIn = false;
|
||||||
}};
|
}};
|
||||||
|
|||||||
@@ -360,6 +360,7 @@ public class MinimapRenderer{
|
|||||||
if(tile == null) return 0;
|
if(tile == null) return 0;
|
||||||
Block real = realBlock(tile);
|
Block real = realBlock(tile);
|
||||||
int bc = real.minimapColor(tile);
|
int bc = real.minimapColor(tile);
|
||||||
|
if(bc == 0 && tile.block() == Blocks.air && tile.overlay() == Blocks.air) bc = tile.floor().minimapColor(tile);
|
||||||
|
|
||||||
Color color = Tmp.c1.set(bc == 0 ? MapIO.colorFor(real, tile.floor(), tile.overlay(), tile.team()) : bc);
|
Color color = Tmp.c1.set(bc == 0 ? MapIO.colorFor(real, tile.floor(), tile.overlay(), tile.team()) : bc);
|
||||||
color.mul(1f - Mathf.clamp(world.getDarkness(tile.x, tile.y) / 4f));
|
color.mul(1f - Mathf.clamp(world.getDarkness(tile.x, tile.y) / 4f));
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ public abstract class SaveVersion extends SaveFileReader{
|
|||||||
|
|
||||||
//floor + overlay
|
//floor + overlay
|
||||||
for(int i = 0; i < world.width() * world.height(); i++){
|
for(int i = 0; i < world.width() * world.height(); i++){
|
||||||
Tile tile = world.rawTile(i % world.width(), i / world.width());
|
Tile tile = world.tiles.geti(i);
|
||||||
stream.writeShort(tile.floorID());
|
stream.writeShort(tile.floorID());
|
||||||
stream.writeShort(tile.overlayID());
|
stream.writeShort(tile.overlayID());
|
||||||
int consecutives = 0;
|
int consecutives = 0;
|
||||||
@@ -230,10 +230,10 @@ public abstract class SaveVersion extends SaveFileReader{
|
|||||||
|
|
||||||
//blocks
|
//blocks
|
||||||
for(int i = 0; i < world.width() * world.height(); i++){
|
for(int i = 0; i < world.width() * world.height(); i++){
|
||||||
Tile tile = world.rawTile(i % world.width(), i / world.width());
|
Tile tile = world.tiles.geti(i);
|
||||||
stream.writeShort(tile.blockID());
|
stream.writeShort(tile.blockID());
|
||||||
|
|
||||||
boolean savedata = tile.floor().saveData || tile.overlay().saveData || tile.block().saveData;
|
boolean savedata = tile.shouldSaveData();
|
||||||
|
|
||||||
//in the old version, the second bit was set to indicate presence of data, but that approach was flawed - it didn't allow buildings + data on the same tile
|
//in the old version, the second bit was set to indicate presence of data, but that approach was flawed - it didn't allow buildings + data on the same tile
|
||||||
//so now the third bit is used instead
|
//so now the third bit is used instead
|
||||||
@@ -268,7 +268,7 @@ public abstract class SaveVersion extends SaveFileReader{
|
|||||||
for(int j = i + 1; j < world.width() * world.height() && consecutives < 255; j++){
|
for(int j = i + 1; j < world.width() * world.height() && consecutives < 255; j++){
|
||||||
Tile nextTile = world.rawTile(j % world.width(), j / world.width());
|
Tile nextTile = world.rawTile(j % world.width(), j / world.width());
|
||||||
|
|
||||||
if(nextTile.blockID() != tile.blockID()){
|
if(nextTile.blockID() != tile.blockID() || savedata != nextTile.shouldSaveData()){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -311,6 +311,10 @@ public class Tile implements Position, QuadTreeObject, Displayable{
|
|||||||
if(!world.isGenerating() && prev != type){
|
if(!world.isGenerating() && prev != type){
|
||||||
Events.fire(floorChange.set(this, prev, type));
|
Events.fire(floorChange.set(this, prev, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this.floor != prev){
|
||||||
|
this.floor.floorChanged(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEditorTile(){
|
public boolean isEditorTile(){
|
||||||
@@ -564,6 +568,10 @@ public class Tile implements Position, QuadTreeObject, Displayable{
|
|||||||
null : null;
|
null : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldSaveData(){
|
||||||
|
return floor.saveData || overlay.saveData || block.saveData;
|
||||||
|
}
|
||||||
|
|
||||||
public int staticDarkness(){
|
public int staticDarkness(){
|
||||||
return block.solid && block.fillsTile && !block.synthetic() ? data : 0;
|
return block.solid && block.fillsTile && !block.synthetic() ? data : 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package mindustry.world.blocks.environment;
|
||||||
|
|
||||||
|
import arc.graphics.*;
|
||||||
|
import arc.graphics.g2d.*;
|
||||||
|
import mindustry.world.*;
|
||||||
|
|
||||||
|
public class ColoredFloor extends Floor{
|
||||||
|
public Color defaultColor = Color.white;
|
||||||
|
protected int defaultColorRgba;
|
||||||
|
|
||||||
|
public ColoredFloor(String name){
|
||||||
|
super(name);
|
||||||
|
saveData = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(){
|
||||||
|
super.init();
|
||||||
|
defaultColorRgba = defaultColor.rgba();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawBase(Tile tile){
|
||||||
|
//make sure to mask out the alpha channel - it's generally undesirable, and leads to invisible blocks when the data is not initialized
|
||||||
|
Draw.color(tile.extraData | 0xff);
|
||||||
|
super.drawBase(tile);
|
||||||
|
Draw.color();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawOverlay(Tile tile){
|
||||||
|
//make sure color doesn't carry over
|
||||||
|
Draw.color();
|
||||||
|
super.drawOverlay(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void floorChanged(Tile tile){
|
||||||
|
//reset to white
|
||||||
|
tile.extraData = defaultColorRgba;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int minimapColor(Tile tile){
|
||||||
|
return tile.extraData | 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -268,6 +268,9 @@ public class Floor extends Block{
|
|||||||
return new TextureRegion[]{Core.atlas.find(Core.atlas.has(name) ? name : name + "1")};
|
return new TextureRegion[]{Core.atlas.find(Core.atlas.has(name) ? name : name + "1")};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Called when this floor is set on the specified tile. */
|
||||||
|
public void floorChanged(Tile tile){}
|
||||||
|
|
||||||
/** @return whether to index this floor by flag */
|
/** @return whether to index this floor by flag */
|
||||||
public boolean shouldIndex(Tile tile){
|
public boolean shouldIndex(Tile tile){
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user