Added zone requirement display

This commit is contained in:
Anuken
2019-01-21 16:04:50 -05:00
parent a9d7ed50b7
commit 6bfbcc4aa9
7 changed files with 85 additions and 21 deletions

View File

@@ -22,9 +22,8 @@ stat.destroyed = Buildings Destroyed:[accent] {0}
stat.deconstructed = Buildings Deconstructed:[accent] {0} stat.deconstructed = Buildings Deconstructed:[accent] {0}
stat.delivered = Resources Launched: stat.delivered = Resources Launched:
level.highscore = High Score: [accent]{0}
level.delete.title = Confirm Delete
map.delete = Are you sure you want to delete the map "[accent]{0}[]"? map.delete = Are you sure you want to delete the map "[accent]{0}[]"?
level.highscore = High Score: [accent]{0}
level.select = Level Select level.select = Level Select
level.mode = Gamemode: level.mode = Gamemode:
construction.desktop = To deselect a block or stop building, [accent]use space[]. construction.desktop = To deselect a block or stop building, [accent]use space[].
@@ -238,7 +237,10 @@ tutorial = Tutorial
editor = Editor editor = Editor
mapeditor = Map Editor mapeditor = Map Editor
donate = Donate donate = Donate
complete = Complete:
resume = Resume Zone:\n[LIGHT_GRAY]{0} resume = Resume Zone:\n[LIGHT_GRAY]{0}
bestwave = [LIGHT_GRAY]Best: {0}
launch = Launch launch = Launch
launch.title = Launch Successful launch.title = Launch Successful

View File

@@ -865,10 +865,10 @@ public class Blocks implements ContentList{
duo = new DoubleTurret("duo"){{ duo = new DoubleTurret("duo"){{
requirements(Category.turret, ItemStack.with(Items.copper, 60), true); requirements(Category.turret, ItemStack.with(Items.copper, 60), true);
ammo( ammo(
Items.copper, Bullets.standardCopper, Items.copper, Bullets.standardCopper,
Items.graphite, Bullets.standardDense, Items.graphite, Bullets.standardDense,
Items.pyratite, Bullets.standardIncendiary, Items.pyratite, Bullets.standardIncendiary,
Items.silicon, Bullets.standardHoming Items.silicon, Bullets.standardHoming
); );
reload = 20f; reload = 20f;
restitution = 0.03f; restitution = 0.03f;

View File

@@ -267,7 +267,7 @@ public class Bullets implements ContentList{
bulletHeight = 9f; bulletHeight = 9f;
homingPower = 5f; homingPower = 5f;
reloadMultiplier = 1.4f; reloadMultiplier = 1.4f;
ammoMultiplier = 5; ammoMultiplier = 3;
}}; }};
standardIncendiary = new BasicBulletType(3.2f, 11, "bullet"){{ standardIncendiary = new BasicBulletType(3.2f, 11, "bullet"){{

View File

@@ -10,8 +10,8 @@ import io.anuke.arc.entities.EntityQuery;
import io.anuke.arc.util.Time; import io.anuke.arc.util.Time;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
@@ -33,6 +33,12 @@ public class Logic implements ApplicationListener{
handleContent(event.tile.block()); handleContent(event.tile.block());
} }
}); });
Events.on(WaveEvent.class, event -> {
if(world.isZone()){
data.updateWaveScore(world.getZone(), state.wave);
}
});
} }
@Override @Override

View File

@@ -12,6 +12,7 @@ import io.anuke.mindustry.game.EventType.UnlockEvent;
import io.anuke.mindustry.type.ContentType; import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.Zone;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -26,6 +27,22 @@ public class GlobalData{
Core.settings.setSerializer(Item.class, (stream, t) -> stream.writeUTF(t.name), stream -> content.getByName(ContentType.item, stream.readUTF())); Core.settings.setSerializer(Item.class, (stream, t) -> stream.writeUTF(t.name), stream -> content.getByName(ContentType.item, stream.readUTF()));
} }
public void updateWaveScore(Zone zone, int wave){
int value = Core.settings.getInt(zone.name + "-wave", 0);
if(value < wave){
Core.settings.put(zone.name + "-wave", wave);
modified = true;
}
}
public int getWaveScore(Zone zone){
return Core.settings.getInt(zone.name + "-wave", 0);
}
public boolean isCompleted(Zone zone){
return getWaveScore(zone) >= zone.conditionWave;
}
public void addItem(Item item, int amount){ public void addItem(Item item, int amount){
modified = true; modified = true;
items.getAndIncrement(item, 0, amount); items.getAndIncrement(item, 0, amount);

View File

@@ -2,6 +2,7 @@ package io.anuke.mindustry.ui.dialogs;
import io.anuke.arc.Core; import io.anuke.arc.Core;
import io.anuke.arc.collection.ObjectIntMap; import io.anuke.arc.collection.ObjectIntMap;
import io.anuke.arc.scene.ui.ScrollPane;
import io.anuke.arc.scene.ui.TextButton; import io.anuke.arc.scene.ui.TextButton;
import io.anuke.arc.scene.ui.layout.Table; import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
@@ -41,32 +42,70 @@ public class DeployDialog extends FloatingDialog{
} }
} }
}}, new Table(){{ }}, new ScrollPane(new Table(){{
if(control.saves.getZoneSlot() == null){ if(control.saves.getZoneSlot() == null){
int i = 0; int i = 0;
for(Zone zone : content.zones()){ for(Zone zone : content.zones()){
table(t -> { table(t -> {
TextButton button = t.addButton(zone.localizedName(), () -> { TextButton button = t.addButton(data.isUnlocked(zone) ? zone.localizedName() : "???", () -> {
data.removeItems(zone.deployCost); data.removeItems(zone.deployCost);
hide(); hide();
world.playZone(zone); world.playZone(zone);
}).size(150f).disabled(b -> !data.hasItems(zone.deployCost) || !data.isUnlocked(zone)).get(); }).size(200f).disabled(!data.hasItems(zone.deployCost) || !data.isUnlocked(zone)).get();
button.row(); button.row();
button.table(req -> {
for(ItemStack stack : zone.deployCost){ if(data.getWaveScore(zone) > 0){
req.addImage(stack.item.region).size(8 * 3); button.add(Core.bundle.format("bestwave", data.getWaveScore(zone)));
req.add(stack.amount + "").left(); }
button.row();
if(data.isUnlocked(zone)){
button.table(req -> {
for(ItemStack stack : zone.deployCost){
req.addImage(stack.item.region).size(8 * 3);
req.add(stack.amount + "").left();
}
}).pad(3).growX();
}else{
boolean anyNeeded = false;
for(Zone other : zone.zoneRequirements){
if(!data.isCompleted(other)){
anyNeeded = true;
break;
}
} }
}).pad(3).growX();
if(anyNeeded){
button.row();
button.table(req -> {
req.add("$complete").left();
req.row();
for(Zone other : zone.zoneRequirements){
if(!data.isCompleted(other)){
req.add("- [LIGHT_GRAY]" + other.localizedName()).left();
req.row();
}
}
req.table(r -> {
if(zone.itemRequirements.length > 0){
for(ItemStack stack : zone.itemRequirements){
r.addImage(stack.item.region).size(8 * 3);
r.add(stack.amount + "").left();
}
}
});
}).pad(3).growX();
}
}
button.row(); button.row();
button.addImage("icon-zone-locked").visible(() -> !data.isUnlocked(zone)); button.addImage("icon-zone-locked").visible(() -> !data.isUnlocked(zone));
}).pad(4);
button.update(() -> button.setText(data.isUnlocked(zone) ? zone.localizedName() : "???"));
}).pad(3);
if(++i % 4 == 0){ if(++i % 4 == 0){
row(); row();
@@ -88,6 +127,6 @@ public class DeployDialog extends FloatingDialog{
}); });
}).size(200f); }).size(200f);
} }
}}).grow(); }})).grow();
} }
} }

View File

@@ -14,7 +14,7 @@ import java.io.DataOutput;
import java.io.IOException; import java.io.IOException;
public class ItemTurret extends CooledTurret{ public class ItemTurret extends CooledTurret{
protected int maxAmmo = 50; protected int maxAmmo = 30;
protected ObjectMap<Item, BulletType> ammo = new ObjectMap<>(); protected ObjectMap<Item, BulletType> ammo = new ObjectMap<>();
public ItemTurret(String name){ public ItemTurret(String name){