Fixed infinite red square, glitchy shadows

This commit is contained in:
Anuken
2018-07-08 17:04:32 -04:00
parent a2a0c2f791
commit a0e94577fc
10 changed files with 283 additions and 286 deletions

View File

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 296 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 132 KiB

View File

@@ -209,7 +209,9 @@ public class TileEntity extends BaseEntity implements TargetTrait {
} }
tile.block().update(tile); tile.block().update(tile);
cons.update(this); if(cons != null){
cons.update(this);
}
} }
} }

View File

@@ -58,7 +58,12 @@ public interface BuilderTrait extends Entity{
/**Build power, can be any float. 1 = builds recipes in normal time, 0 = doesn't build at all.*/ /**Build power, can be any float. 1 = builds recipes in normal time, 0 = doesn't build at all.*/
float getBuildPower(Tile tile); float getBuildPower(Tile tile);
default void writeBuilding(DataOutput output) throws IOException{ /**Whether this type of builder can begin creating new blocks.*/
default boolean canCreateBlocks(){
return true;
}
default void writeBuilding(DataOutput output) throws IOException {
BuildRequest request = getCurrentRequest(); BuildRequest request = getCurrentRequest();
if(request != null){ if(request != null){
@@ -172,9 +177,9 @@ public interface BuilderTrait extends Entity{
Tile tile = world.tile(current.x, current.y); Tile tile = world.tile(current.x, current.y);
if (!(tile.block() instanceof BuildBlock)) { if (!(tile.block() instanceof BuildBlock)) {
if(!current.remove && Build.validPlace(unit.getTeam(), current.x, current.y, current.recipe.result, current.rotation)) { if(canCreateBlocks() && !current.remove && Build.validPlace(unit.getTeam(), current.x, current.y, current.recipe.result, current.rotation)) {
Build.beginPlace(unit.getTeam(), current.x, current.y, current.recipe, current.rotation); Build.beginPlace(unit.getTeam(), current.x, current.y, current.recipe, current.rotation);
}else if(current.remove && Build.validBreak(unit.getTeam(), current.x, current.y)){ }else if(canCreateBlocks() && current.remove && Build.validBreak(unit.getTeam(), current.x, current.y)){
Build.beginBreak(unit.getTeam(), current.x, current.y); Build.beginBreak(unit.getTeam(), current.x, current.y);
}else{ }else{
getPlaceQueue().removeFirst(); getPlaceQueue().removeFirst();

View File

@@ -201,6 +201,11 @@ public class Drone extends FlyingUnit implements BuilderTrait {
return false; return false;
} }
@Override
public boolean canCreateBlocks() {
return false;
}
@Override @Override
public void write(DataOutput data) throws IOException { public void write(DataOutput data) throws IOException {
super.write(data); super.write(data);

View File

@@ -10,6 +10,7 @@ import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.type.Recipe; import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.blocks.Floor; import io.anuke.mindustry.world.blocks.Floor;
import io.anuke.mindustry.world.modules.ConsumeModule;
import io.anuke.mindustry.world.modules.InventoryModule; import io.anuke.mindustry.world.modules.InventoryModule;
import io.anuke.mindustry.world.modules.LiquidModule; import io.anuke.mindustry.world.modules.LiquidModule;
import io.anuke.mindustry.world.modules.PowerModule; import io.anuke.mindustry.world.modules.PowerModule;
@@ -391,12 +392,13 @@ public class Tile implements PosTrait, TargetTrait {
if (block.hasEntity()) { if (block.hasEntity()) {
entity = block.getEntity().init(this, block.update); entity = block.getEntity().init(this, block.update);
if(block.consumes.hasAny()) entity.cons = new ConsumeModule();
if(block.hasItems) entity.items = new InventoryModule(); if(block.hasItems) entity.items = new InventoryModule();
if(block.hasLiquids) entity.liquids = new LiquidModule(); if(block.hasLiquids) entity.liquids = new LiquidModule();
if(block.hasPower) entity.power = new PowerModule(); if(block.hasPower) entity.power = new PowerModule();
entity.updateProximity();
} }
entity.updateProximity();
updateOcclusion(); updateOcclusion();
} }

View File

@@ -22,8 +22,8 @@ import io.anuke.mindustry.type.Recipe;
import io.anuke.mindustry.world.BarType; import io.anuke.mindustry.world.BarType;
import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.modules.InventoryModule;
import io.anuke.mindustry.world.meta.BlockBar; import io.anuke.mindustry.world.meta.BlockBar;
import io.anuke.mindustry.world.modules.InventoryModule;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Graphics; import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Draw;
@@ -222,7 +222,7 @@ public class BuildBlock extends Block {
progress = Mathf.clamp(progress - amount); progress = Mathf.clamp(progress - amount);
if(progress <= 0){ if(progress <= 0){
CallBlocks.onDeconstructFinish(tile, recipe == null ? previous : recipe.result); CallBlocks.onDeconstructFinish(tile, this.recipe == null ? previous : this.recipe.result);
} }
} }

View File

@@ -43,7 +43,7 @@ public class Rock extends Block {
regions = new TextureRegion[variants]; regions = new TextureRegion[variants];
for (int i = 0; i < variants; i++) { for (int i = 0; i < variants; i++) {
shadowRegions[i] = Draw.region(name + "-shadow" + (i+1)); shadowRegions[i] = Draw.region(name + "shadow" + (i+1));
regions[i] = Draw.region(name + (i+1)); regions[i] = Draw.region(name + (i+1));
} }
} }

View File

@@ -93,6 +93,10 @@ public class Consumers {
return map.values(); return map.values();
} }
public boolean hasAny(){
return map.size > 0;
}
public void forEach(Consumer<Consume> cons){ public void forEach(Consumer<Consume> cons){
for(Consume c : all()){ for(Consume c : all()){
cons.accept(c); cons.accept(c);