Better unit factory implementation

This commit is contained in:
Anuken
2020-05-01 18:07:37 -04:00
parent 676ee8beda
commit 35bd6a40c5
6 changed files with 40 additions and 17 deletions
@@ -45,7 +45,6 @@ public class ForceProjector extends Block{
update = true;
solid = true;
hasPower = true;
canOverdrive = false;
hasLiquids = true;
hasItems = true;
expanded = true;
@@ -118,7 +117,7 @@ public class ForceProjector extends Block{
scale *= (cooldownLiquid * (1f + (liquids.current().heatCapacity - 0.4f) * 0.9f));
}
buildup -= Time.delta() * scale;
buildup -= delta() * scale;
}
if(broken && buildup <= 0){
@@ -5,6 +5,7 @@ import arc.graphics.g2d.*;
import arc.math.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import arc.util.io.*;
import mindustry.*;
import mindustry.annotations.Annotations.*;
@@ -23,6 +24,8 @@ import mindustry.world.meta.*;
import static mindustry.Vars.*;
public class UnitFactory extends Block{
public float launchVelocity = 5f;
public TextureRegion topRegion;
public int[] capacities;
@@ -39,6 +42,15 @@ public class UnitFactory extends Block{
configurable = true;
config(Integer.class, (tile, i) -> ((UnitFactoryEntity)tile).currentPlan = i < 0 || i >= plans.length ? -1 : i);
consumes.add(new ConsumeItemDynamic(e -> {
UnitFactoryEntity entity = (UnitFactoryEntity)e;
if(entity.currentPlan != -1){
return plans[entity.currentPlan].requirements;
}
return ItemStack.empty;
}));
}
@Remote(called = Loc.server)
@@ -52,10 +64,9 @@ public class UnitFactory extends Block{
super.init();
capacities = new int[Vars.content.items().size];
if(consumes.has(ConsumeType.item)){
ConsumeItems cons = consumes.get(ConsumeType.item);
for(ItemStack stack : cons.items){
capacities[stack.item.id] = stack.amount * 2;
for(UnitPlan plan : plans){
for(ItemStack stack : plan.requirements){
capacities[stack.item.id] = Math.max(capacities[stack.item.id], stack.amount * 2);
}
}
}
@@ -211,6 +222,12 @@ public class UnitFactory extends Block{
return capacities[item.id];
}
@Override
public boolean acceptItem(Tilec source, Item item){
return currentPlan != -1 && items.get(item) < getMaximumAccepted(item) &&
Structs.contains(plans[currentPlan].requirements, stack -> stack.item == item);
}
@Override
public byte version(){
return 1;