mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-22 05:38:19 +07:00
Re-added resource harvesting from blocks
This commit is contained in:
@ -56,8 +56,27 @@ public interface BlockBuilder {
|
|||||||
if(unit.distanceTo(tile) > placeDistance) { //out of range, skip it.
|
if(unit.distanceTo(tile) > placeDistance) { //out of range, skip it.
|
||||||
getPlaceQueue().removeFirst();
|
getPlaceQueue().removeFirst();
|
||||||
}else if(current.remove){
|
}else if(current.remove){
|
||||||
if(Build.validBreak(unit.team, current.x, current.y)){ //if it's valid, break it
|
if(Build.validBreak(unit.team, current.x, current.y) && current.recipe == Recipe.getByResult(tile.block())){ //if it's valid, break it
|
||||||
current.removeProgress += 1f / tile.getBreakTime();
|
|
||||||
|
float progress = 1f / tile.getBreakTime();
|
||||||
|
TileEntity core = unit.getClosestCore();
|
||||||
|
|
||||||
|
//update accumulation of resources to add
|
||||||
|
if(current.recipe != null && core != null){
|
||||||
|
for(int i = 0; i < current.recipe.requirements.length; i ++){
|
||||||
|
current.removeAccumulator[i] += current.recipe.requirements[i].amount*progress / 2f; //add scaled amount progressed to the accumulator
|
||||||
|
int amount = (int)(current.removeAccumulator[i]); //get amount
|
||||||
|
|
||||||
|
if(amount > 0){ //if it's positive, add it to the core
|
||||||
|
int accepting = core.tile.block().acceptStack(getCurrentRequest().recipe.requirements[i].item, amount, core.tile, unit);
|
||||||
|
core.tile.block().handleStack(getCurrentRequest().recipe.requirements[i].item, amount, core.tile, unit);
|
||||||
|
|
||||||
|
current.removeAccumulator[i] -= accepting;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
current.removeProgress += progress;
|
||||||
|
|
||||||
if(current.removeProgress >= 1f){
|
if(current.removeProgress >= 1f){
|
||||||
Build.breakBlock(unit.team, current.x, current.y, true, true);
|
Build.breakBlock(unit.team, current.x, current.y, true, true);
|
||||||
@ -139,6 +158,7 @@ public interface BlockBuilder {
|
|||||||
public final boolean remove;
|
public final boolean remove;
|
||||||
|
|
||||||
float removeProgress;
|
float removeProgress;
|
||||||
|
float[] removeAccumulator;
|
||||||
|
|
||||||
/**This creates a build request.*/
|
/**This creates a build request.*/
|
||||||
public BuildRequest(int x, int y, int rotation, Recipe recipe) {
|
public BuildRequest(int x, int y, int rotation, Recipe recipe) {
|
||||||
@ -154,8 +174,12 @@ public interface BlockBuilder {
|
|||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.rotation = -1;
|
this.rotation = -1;
|
||||||
this.recipe = null;
|
this.recipe = Recipe.getByResult(world.tile(x, y).block());
|
||||||
this.remove = true;
|
this.remove = true;
|
||||||
|
|
||||||
|
if(this.recipe != null){
|
||||||
|
this.removeAccumulator = new float[recipe.requirements.length];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,12 +56,12 @@ public class BuildBlock extends Block {
|
|||||||
|
|
||||||
Shaders.blockbuild.color = Colors.get("accent");
|
Shaders.blockbuild.color = Colors.get("accent");
|
||||||
|
|
||||||
for(TextureRegion region : entity.result.getBlockIcon()){
|
for(TextureRegion region : entity.recipe.result.getBlockIcon()){
|
||||||
Shaders.blockbuild.region = region;
|
Shaders.blockbuild.region = region;
|
||||||
Shaders.blockbuild.progress = (float)entity.progress;
|
Shaders.blockbuild.progress = (float)entity.progress;
|
||||||
Shaders.blockbuild.apply();
|
Shaders.blockbuild.apply();
|
||||||
|
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy(), entity.result.rotate ? tile.getRotation() * 90 : 0);
|
Draw.rect(region, tile.drawx(), tile.drawy(), entity.recipe.result.rotate ? tile.getRotation() * 90 : 0);
|
||||||
|
|
||||||
Graphics.flush();
|
Graphics.flush();
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ public class BuildBlock extends Block {
|
|||||||
public void drawShadow(Tile tile) {
|
public void drawShadow(Tile tile) {
|
||||||
BuildEntity entity = tile.entity();
|
BuildEntity entity = tile.entity();
|
||||||
|
|
||||||
entity.result.drawShadow(tile);
|
entity.recipe.result.drawShadow(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -80,7 +80,7 @@ public class BuildBlock extends Block {
|
|||||||
|
|
||||||
if(entity.progress >= 1f){
|
if(entity.progress >= 1f){
|
||||||
Team team = tile.getTeam();
|
Team team = tile.getTeam();
|
||||||
tile.setBlock(entity.result);
|
tile.setBlock(entity.recipe.result);
|
||||||
tile.setTeam(team);
|
tile.setTeam(team);
|
||||||
Effects.effect(Fx.placeBlock, tile.drawx(), tile.drawy(), 0f, (float)size);
|
Effects.effect(Fx.placeBlock, tile.drawx(), tile.drawy(), 0f, (float)size);
|
||||||
}else if(entity.progress < 0f){
|
}else if(entity.progress < 0f){
|
||||||
@ -88,7 +88,7 @@ public class BuildBlock extends Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!entity.updated){
|
if(!entity.updated){
|
||||||
entity.progress -= 1f/entity.result.health/decaySpeedScl;
|
entity.progress -= 1f/entity.recipe.cost/decaySpeedScl;
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.updated = false;
|
entity.updated = false;
|
||||||
@ -104,7 +104,6 @@ public class BuildBlock extends Block {
|
|||||||
|
|
||||||
private double progress = 0;
|
private double progress = 0;
|
||||||
private double[] accumulator;
|
private double[] accumulator;
|
||||||
private Block result;
|
|
||||||
private boolean updated;
|
private boolean updated;
|
||||||
|
|
||||||
public void addProgress(InventoryModule inventory, double amount){
|
public void addProgress(InventoryModule inventory, double amount){
|
||||||
@ -136,7 +135,6 @@ public class BuildBlock extends Block {
|
|||||||
|
|
||||||
public void set(Recipe recipe){
|
public void set(Recipe recipe){
|
||||||
updated = true;
|
updated = true;
|
||||||
this.result = recipe.result;
|
|
||||||
this.recipe = recipe;
|
this.recipe = recipe;
|
||||||
this.accumulator = new double[recipe.requirements.length];
|
this.accumulator = new double[recipe.requirements.length];
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user