Added splitter, power smelter, new sections

This commit is contained in:
Anuken
2018-02-21 22:29:15 -05:00
parent 7ee01f19fe
commit 1fdffa8be5
16 changed files with 396 additions and 218 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

View File

@ -430,6 +430,8 @@ block.teleporter.name=teleporter
block.teleporter.fulldescription=Advanced item transport block. Teleporters input items to other teleporters of the same color. Does nothing if no teleporters of the same color exist. If multiple teleporters exist of the same color, a random one is selected. Uses power. Tap to change color.
block.sorter.name=sorter
block.sorter.fulldescription=Sorts item by material type. Material to accept is indicated by the color in the block. All items that match the sort material are outputted forward, everything else is outputted to the left and right.
block.splitter.name=splitter
block.splitter.fulldescription=Splits input into two directions. Outputs to the left and right only. Unlike a router, it has no internal storage and outputs instantly.
block.core.name=core
block.pump.name=pump
block.pump.fulldescription=Pumps liquids from a source block- usually water, lava or oil. Outputs liquid into nearby conduits.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -1,7 +1,7 @@
#Autogenerated file. Do not modify.
#Wed Feb 21 19:47:18 EST 2018
#Wed Feb 21 20:34:22 EST 2018
version=release
androidBuildCode=262
androidBuildCode=267
name=Mindustry
code=3.3
build=custom build

View File

@ -30,22 +30,19 @@ public class Recipes {
new Recipe(distribution, DistributionBlocks.router, stack(Item.stone, 2)),
new Recipe(distribution, DistributionBlocks.junction, stack(Item.iron, 2)),
new Recipe(distribution, DistributionBlocks.tunnel, stack(Item.iron, 2)),
new Recipe(distribution, DistributionBlocks.conduit, stack(Item.steel, 1)),
new Recipe(distribution, DistributionBlocks.pulseconduit, stack(Item.titanium, 1), stack(Item.steel, 1)),
new Recipe(distribution, DistributionBlocks.liquidrouter, stack(Item.steel, 2)),
new Recipe(distribution, DistributionBlocks.liquidjunction, stack(Item.steel, 2)),
new Recipe(distribution, DistributionBlocks.sorter, stack(Item.steel, 2)),
new Recipe(distribution, DistributionBlocks.splitter, stack(Item.steel, 1)),
new Recipe(weapon, WeaponBlocks.turret, stack(Item.stone, 4)),
//new Recipe(weapon, WeaponBlocks.turret, stack(Item.stone, 4)),
new Recipe(weapon, WeaponBlocks.doubleturret, stack(Item.stone, 7)),
new Recipe(weapon, WeaponBlocks.machineturret, stack(Item.iron, 8), stack(Item.stone, 10)),
new Recipe(weapon, WeaponBlocks.shotgunturret, stack(Item.iron, 10), stack(Item.stone, 10)),
//new Recipe(weapon, WeaponBlocks.shotgunturret, stack(Item.iron, 10), stack(Item.stone, 10)),
new Recipe(weapon, WeaponBlocks.flameturret, stack(Item.iron, 12), stack(Item.steel, 9)),
new Recipe(weapon, WeaponBlocks.sniperturret, stack(Item.iron, 15), stack(Item.steel, 10)),
new Recipe(weapon, WeaponBlocks.laserturret, stack(Item.steel, 12), stack(Item.titanium, 12)),
new Recipe(weapon, WeaponBlocks.mortarturret, stack(Item.steel, 25), stack(Item.titanium, 15)),
new Recipe(weapon, WeaponBlocks.teslaturret, stack(Item.steel, 20), stack(Item.titanium, 25), stack(Item.dirium, 15)),
new Recipe(weapon, WeaponBlocks.plasmaturret, stack(Item.steel, 10), stack(Item.titanium, 20), stack(Item.dirium, 15)),
//new Recipe(weapon, WeaponBlocks.plasmaturret, stack(Item.steel, 10), stack(Item.titanium, 20), stack(Item.dirium, 15)),
new Recipe(weapon, WeaponBlocks.chainturret, stack(Item.steel, 50), stack(Item.titanium, 25), stack(Item.dirium, 40)),
new Recipe(weapon, WeaponBlocks.titanturret, stack(Item.steel, 70), stack(Item.titanium, 50), stack(Item.dirium, 55)),
@ -82,6 +79,11 @@ public class Recipes {
new Recipe(power, DefenseBlocks.repairturret, stack(Item.iron, 30)),
new Recipe(power, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)),
new Recipe(liquid, DistributionBlocks.conduit, stack(Item.steel, 1)),
new Recipe(liquid, DistributionBlocks.pulseconduit, stack(Item.titanium, 1), stack(Item.steel, 1)),
new Recipe(liquid, DistributionBlocks.liquidrouter, stack(Item.steel, 2)),
new Recipe(liquid, DistributionBlocks.liquidjunction, stack(Item.steel, 2)),
new Recipe(production, ProductionBlocks.pump, stack(Item.steel, 10)),
new Recipe(production, ProductionBlocks.fluxpump, stack(Item.steel, 10), stack(Item.dirium, 5))
);

View File

@ -1,5 +1,5 @@
package io.anuke.mindustry.resource;
public enum Section{
weapon, production, distribution, power, defense, crafting;
weapon, production, distribution, liquid, power, defense, crafting, units
}

View File

@ -86,6 +86,8 @@ public class BlocksFragment implements Fragment{
}
for (Section sec : Section.values()) {
int secrows = 4;
recipes.clear();
Recipes.getBy(sec, recipes);
@ -97,12 +99,13 @@ public class BlocksFragment implements Fragment{
input.recipe = null;
}
});
button.setName("sectionbutton" + sec.name());
add(button).growX().height(54).padLeft(-1).padTop(sec.ordinal() <= 2 ? -10 : -5);
add(button).growX().height(54).padLeft(-1).padTop(sec.ordinal() <= secrows-1 ? -10 : -5);
button.getImageCell().size(40).padBottom(4).padTop(2);
group.add(button);
if (sec.ordinal() % 3 == 2 && sec.ordinal() > 0) {
if (sec.ordinal() % secrows == secrows-1) {
row();
}

View File

@ -55,29 +55,13 @@ public class DebugFragment implements Fragment {
row();
new button("paths", "toggle", () -> showPaths = !showPaths);
row();
new button("infammo", "toggle", () -> infiniteAmmo = !infiniteAmmo);
row();
new button("wave", () -> state.wavetime = 0f);
row();
new button("clear", () -> {
enemyGroup.clear();
state.enemies = 0;
netClient.clearRecieved();
});
row();
new button("spawn", () -> {
for(int i = 0; i < 30; i ++){
new Enemy(EnemyTypes.healer).set(player.x + Mathf.range(50f), player.y + Mathf.range(50f)).add();
}
});
row();
new button("time", () -> {
Timers.resetTime(1080000 - 60*10);
});
row();
new button("time2", () -> {
Timers.resetTime(0);
});
}}.end();
row();

View File

@ -59,5 +59,7 @@ public class DistributionBlocks{
teleporter = new Teleporter("teleporter"){{
}},
sorter = new Sorter("sorter"){{
}},
splitter = new Splitter("splitter"){{
}};
}

View File

@ -104,6 +104,18 @@ public class ProductionBlocks{
}
},
pulverizer = new LiquidCrafter("siliconextractor"){
{
input = Item.sand;
inputAmount = 5;
inputLiquid = Liquid.water;
liquidAmount = 18.99f;
output = Item.sand;
health = 50;
purifyTime = 50;
}
},
siliconextractor = new LiquidCrafter("siliconextractor"){
{
input = Item.sand;
@ -160,6 +172,13 @@ public class ProductionBlocks{
time = 4;
}
},
sandextractor = new Omnidrill("omnidrill"){
{
time = 4;
}
},
coalgenerator = new ItemPowerGenerator("coalgenerator"){
{
generateItem = Item.coal;

View File

@ -0,0 +1,141 @@
package io.anuke.mindustry.world.blocks.types.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.types.PowerBlock;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Strings;
import java.util.Arrays;
public class PowerSmelter extends PowerBlock {
protected final int timerDump = timers++;
protected final int timerCraft = timers++;
protected Item[] inputs;
protected Item result;
protected float powerDrain = 0.01f;
protected float heatUpTime = 80f;
protected float minHeat = 0.5f;
protected float craftTime = 20f; //time to craft one item, so max 3 items per second by default
protected float burnDuration = 50f; //by default, the fuel will burn 45 frames, so that's 2.5 items/fuel at most
protected float burnEffectChance = 0.01f;
protected Effect craftEffect = Fx.smelt, burnEffect = Fx.fuelburn;
protected int capacity = 20;
public PowerSmelter(String name) {
super(name);
update = true;
solid = true;
}
@Override
public void init(){
for(Item item : inputs){
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.entity.getItem(item)/capacity));
}
}
@Override
public void getStats(Array<String> list){
super.getStats(list);
list.add("[craftinfo]Input: " + Arrays.toString(inputs));
list.add("[craftinfo]Power drain/second: " + Strings.toFixed(powerDrain*60f, 2));
list.add("[craftinfo]Output: " + result);
list.add("[craftinfo]Fuel Duration: " + Strings.toFixed(burnDuration/60f, 1));
list.add("[craftinfo]Max output/second: " + Strings.toFixed(60f/craftTime, 1));
list.add("[craftinfo]Input Capacity: " + capacity);
list.add("[craftinfo]Output Capacity: " + capacity);
}
@Override
public void update(Tile tile){
PowerSmelterEntity entity = tile.entity();
if(entity.timer.get(timerDump, 5) && entity.hasItem(result)){
tryDump(tile, -1, result);
}
float used = powerDrain * Timers.delta();
//heat it up if there's enough power
if(entity.power > used){
entity.power -= used;
entity.heat += 1f /heatUpTime;
if(Mathf.chance(Timers.delta() * burnEffectChance)) Effects.effect(burnEffect, entity.x + Mathf.range(2f), entity.y + Mathf.range(2f));
}else{
entity.heat -= 1f /heatUpTime;
}
entity.heat = Mathf.clamp(entity.heat);
//make sure it has all the items
for(Item item : inputs){
if(!entity.hasItem(item)){
return;
}
}
if(entity.getItem(result) >= capacity //output full
|| entity.heat <= minHeat //not burning
|| !entity.timer.get(timerCraft, craftTime)){ //not yet time
return;
}
for(Item item : inputs){
entity.removeItem(item, 1);
}
offloadNear(tile, result);
Effects.effect(craftEffect, entity);
}
@Override
public boolean acceptItem(Item item, Tile tile, Tile source){
boolean isInput = false;
for(Item req : inputs){
if(req == item){
isInput = true;
break;
}
}
return (isInput && tile.entity.getItem(item) < capacity);
}
@Override
public void draw(Tile tile){
super.draw(tile);
Smelter.CrafterEntity entity = tile.entity();
//draw glowing center
if(entity.burnTime > 0){
Draw.color(1f, 1f, 1f, Mathf.absin(Timers.time(), 9f, 0.4f) + Mathf.random(0.05f));
Draw.rect("smelter-middle", tile.worldx(), tile.worldy());
Draw.color();
}
}
@Override
public TileEntity getEntity() {
return new PowerSmelterEntity();
}
class PowerSmelterEntity extends PowerEntity{
public float heat;
}
}

View File

@ -42,9 +42,6 @@ public class Smelter extends Block{
for(Item item : inputs){
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.entity.getItem(item)/capacity));
}
//fuel and output bars, respectively: should these be added, or is it too cluttery?
//bars.add(new BlockBar(Color.ORANGE, true, tile -> (float)tile.entity.getItem(fuel)/capacity));
//bars.add(new BlockBar(Color.LIGHT_GRAY, true, tile -> (float)tile.entity.getItem(result)/capacity));
}
@Override