Custom launch items

This commit is contained in:
Anuken
2020-06-28 13:33:53 -04:00
parent 6386cae19a
commit b3f29f100d
12 changed files with 85 additions and 36 deletions

View File

@@ -471,13 +471,14 @@ launch.confirm = This will launch all resources in your core.\nYou will not be a
launch.skip.confirm = If you skip now, you will not be able to launch until later waves. launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
uncover = Uncover uncover = Uncover
configure = Configure Loadout configure = Configure Loadout
#TODO
loadout = Loadout
resources = Resources
bannedblocks = Banned Blocks bannedblocks = Banned Blocks
addall = Add All addall = Add All
configure.locked = [lightgray]Unlock configuring loadout: {0}.
configure.invalid = Amount must be a number between 0 and {0}. configure.invalid = Amount must be a number between 0 and {0}.
zone.unlocked = [lightgray]{0} unlocked. zone.unlocked = [lightgray]{0} unlocked.
zone.requirement.complete = Requirement for {0} completed:[lightgray]\n{1} zone.requirement.complete = Requirement for {0} completed:[lightgray]\n{1}
zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
zone.resources = [lightgray]Resources Detected: zone.resources = [lightgray]Resources Detected:
zone.objective = [lightgray]Objective: [accent]{0} zone.objective = [lightgray]Objective: [accent]{0}
zone.objective.survival = Survive zone.objective.survival = Survive

View File

@@ -251,6 +251,7 @@ public class Control implements ApplicationListener, Loadable{
//remove schematic requirements from core //remove schematic requirements from core
tile.items.remove(universe.getLastLoadout().requirements()); tile.items.remove(universe.getLastLoadout().requirements());
tile.items.remove(universe.getLaunchResources());
} }
public void playSector(Sector sector){ public void playSector(Sector sector){

View File

@@ -399,6 +399,13 @@ public class Schematics implements Loadable{
} }
} }
/** Places the last launch loadout at the coordinates and fills it with the launch resources. */
public static void placeLaunchLoadout(int x, int y){
placeLoadout(universe.getLastLoadout(), x, y);
if(world.tile(x, y).build == null) throw new RuntimeException("No core at loadout coordinates!");
world.tile(x, y).build.items.add(universe.getLaunchResources());
}
public static void placeLoadout(Schematic schem, int x, int y){ public static void placeLoadout(Schematic schem, int x, int y){
placeLoadout(schem, x, y, state.rules.defaultTeam, Blocks.oreCopper); placeLoadout(schem, x, y, state.rules.defaultTeam, Blocks.oreCopper);
} }

View File

@@ -20,7 +20,9 @@ public class Universe{
private float secondCounter; private float secondCounter;
private int turn; private int turn;
private float turnCounter; private float turnCounter;
private Schematic lastLoadout = Loadouts.basicShard; private Schematic lastLoadout = Loadouts.basicShard;
private Seq<ItemStack> lastLaunchResources = new Seq<>();
public Universe(){ public Universe(){
load(); load();
@@ -75,6 +77,16 @@ public class Universe{
} }
} }
public Seq<ItemStack> getLaunchResources(){
lastLaunchResources = Core.settings.getJson("launch-resources", Seq.class, ItemStack.class, Seq::new);
return lastLaunchResources;
}
public void updateLaunchResources(Seq<ItemStack> stacks){
this.lastLaunchResources = stacks;
Core.settings.putJson("launch-resources", ItemStack.class, lastLaunchResources);
}
/** Updates selected loadout for future deployment. */ /** Updates selected loadout for future deployment. */
public void updateLoadout(CoreBlock block, Schematic schem){ public void updateLoadout(CoreBlock block, Schematic schem){
Core.settings.put("lastloadout-" + block.name, schem.file == null ? "" : schem.file.nameWithoutExtension()); Core.settings.put("lastloadout-" + block.name, schem.file == null ? "" : schem.file.nameWithoutExtension());

View File

@@ -2,7 +2,6 @@ package mindustry.graphics;
import arc.*; import arc.*;
import arc.graphics.*; import arc.graphics.*;
import arc.graphics.g2d.*;
import arc.graphics.gl.*; import arc.graphics.gl.*;
import static mindustry.Vars.renderer; import static mindustry.Vars.renderer;

View File

@@ -54,14 +54,9 @@ public class FileMapGenerator implements WorldGenerator{
} }
if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){ if(tile.isCenter() && tile.block() instanceof CoreBlock && tile.team() == state.rules.defaultTeam && !anyCores){
Schematics.placeLoadout(universe.getLastLoadout(), tile.x, tile.y); Schematics.placeLaunchLoadout(tile.x, tile.y);
anyCores = true; anyCores = true;
} }
//add random decoration
//if(Mathf.chance(0.015) && !tile.floor().isLiquid && tile.block() == Blocks.air){
// tile.setBlock(tile.floor().decoration);
//}
} }
if(!anyCores){ if(!anyCores){

View File

@@ -279,7 +279,7 @@ public class TODOPlanetGenerator extends PlanetGenerator{
} }
}); });
Schematics.placeLoadout(universe.getLastLoadout(), spawn.x, spawn.y); Schematics.placeLaunchLoadout(spawn.x, spawn.y);
if(sector.hasEnemyBase()){ if(sector.hasEnemyBase()){
basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector); basegen.generate(tiles, enemies.map(r -> tiles.getn(r.x, r.y)), tiles.get(spawn.x, spawn.y), state.rules.waveTeam, sector);

View File

@@ -7,7 +7,6 @@ import arc.files.*;
import arc.func.*; import arc.func.*;
import arc.graphics.*; import arc.graphics.*;
import arc.mock.*; import arc.mock.*;
import arc.struct.Seq;
import arc.struct.*; import arc.struct.*;
import arc.util.ArcAnnotate.*; import arc.util.ArcAnnotate.*;
import arc.util.*; import arc.util.*;

View File

@@ -2,7 +2,6 @@ package mindustry.ui.dialogs;
import arc.*; import arc.*;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import arc.math.*;
import arc.scene.style.*; import arc.scene.style.*;
import arc.scene.ui.*; import arc.scene.ui.*;
import arc.scene.ui.layout.*; import arc.scene.ui.layout.*;

View File

@@ -1,8 +1,10 @@
package mindustry.ui.dialogs; package mindustry.ui.dialogs;
import arc.*; import arc.*;
import arc.func.*;
import arc.scene.ui.*; import arc.scene.ui.*;
import arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import arc.struct.*;
import mindustry.game.*; import mindustry.game.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
@@ -14,7 +16,14 @@ import static mindustry.Vars.*;
/** Dialog for selecting loadout at sector launch. */ /** Dialog for selecting loadout at sector launch. */
public class LaunchLoadoutDialog extends BaseDialog{ public class LaunchLoadoutDialog extends BaseDialog{
LoadoutDialog loadout = new LoadoutDialog();
//total as a map
ObjectIntMap<Item> totalMap = new ObjectIntMap<>();
//total required items
Seq<ItemStack> total = new Seq<>();
//currently selected schematic
Schematic selected; Schematic selected;
//validity of loadout items
boolean valid; boolean valid;
public LaunchLoadoutDialog(){ public LaunchLoadoutDialog(){
@@ -24,8 +33,51 @@ public class LaunchLoadoutDialog extends BaseDialog{
public void show(CoreBlock core, Building build, Runnable confirm){ public void show(CoreBlock core, Building build, Runnable confirm){
cont.clear(); cont.clear();
buttons.clear(); buttons.clear();
totalMap.clear();
Seq<ItemStack> stacks = universe.getLaunchResources();
addCloseButton(); addCloseButton();
//updates sum requirements
Runnable update = () -> {
totalMap.clear();
total.clear();
selected.requirements().each(i -> totalMap.increment(i.item, i.amount));
universe.getLaunchResources().each(i -> totalMap.increment(i.item, i.amount));
for(Item item : content.items()){
if(totalMap.containsKey(item)) total.add(new ItemStack(item, totalMap.get(item)));
}
valid = build.items.has(total);
};
Cons<Table> rebuild = table -> {
table.clearChildren();
int i = 0;
for(ItemStack s : total){
table.image(s.item.icon(Cicon.small)).left();
table.add((build.items.has(s.item, s.amount)) ? "[lightgray]" + s.amount + "" :
"[scarlet]" + (Math.min(build.items.get(s.item), s.amount) + "[lightgray]/" + s.amount)).padLeft(2).left().padRight(4);
if(++i % 4 == 0){
table.row();
}
}
};
Table items = new Table();
Runnable rebuildItems = () -> rebuild.get(items);
buttons.button("$resources", Icon.terrain, () -> {
loadout.show(core.itemCapacity, stacks, stacks::clear, () -> {}, () -> {
universe.updateLaunchResources(stacks);
update.run();
rebuildItems.run();
});
});
buttons.button("$launch.text", Icon.ok, () -> { buttons.button("$launch.text", Icon.ok, () -> {
universe.updateLoadout(core, selected); universe.updateLoadout(core, selected);
confirm.run(); confirm.run();
@@ -36,24 +88,6 @@ public class LaunchLoadoutDialog extends BaseDialog{
ButtonGroup<Button> group = new ButtonGroup<>(); ButtonGroup<Button> group = new ButtonGroup<>();
selected = universe.getLoadout(core); selected = universe.getLoadout(core);
Table items = new Table();
Runnable rebuildItems = () -> {
items.clearChildren();
int i = 0;
for(ItemStack s : selected.requirements()){
items.image(s.item.icon(Cicon.small)).left();
items.add((state.rules.infiniteResources || build.items.has(s.item, s.amount)) ? "[lightgray]" + s.amount + "" :
((build.items.has(s.item, s.amount) ? "[lightgray]" : "[scarlet]") + Math.min(build.items.get(s.item), s.amount) + "[lightgray]/" + s.amount))
.padLeft(2).left().padRight(4);
if(++i % 4 == 0){
items.row();
}
}
};
cont.pane(t -> { cont.pane(t -> {
int i = 0; int i = 0;
@@ -61,8 +95,8 @@ public class LaunchLoadoutDialog extends BaseDialog{
t.button(b -> b.add(new SchematicImage(s)), Styles.togglet, () -> { t.button(b -> b.add(new SchematicImage(s)), Styles.togglet, () -> {
selected = s; selected = s;
update.run();
rebuildItems.run(); rebuildItems.run();
valid = build.items.has(selected.requirements());
}).group(group).pad(4).disabled(!build.items.has(s.requirements())).checked(s == selected).size(200f); }).group(group).pad(4).disabled(!build.items.has(s.requirements())).checked(s == selected).size(200f);
if(++i % cols == 0){ if(++i % cols == 0){
@@ -72,14 +106,11 @@ public class LaunchLoadoutDialog extends BaseDialog{
}).growX().get().setScrollingDisabled(true, false); }).growX().get().setScrollingDisabled(true, false);
cont.row(); cont.row();
cont.add(items); cont.add(items);
update.run();
rebuildItems.run(); rebuildItems.run();
//TODO configure items to launch with
show(); show();
} }
} }

View File

@@ -18,7 +18,6 @@ import mindustry.game.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.*;
import mindustry.graphics.g3d.PlanetRenderer.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.type.Sector.*; import mindustry.type.Sector.*;
import mindustry.ui.*; import mindustry.ui.*;

View File

@@ -207,6 +207,12 @@ public class ItemModule extends BlockModule{
items[item.id] = amount; items[item.id] = amount;
} }
public void add(Iterable<ItemStack> stacks){
for(ItemStack stack : stacks){
add(stack.item, stack.amount);
}
}
public void add(Item item, int amount){ public void add(Item item, int amount){
add(item.id, amount); add(item.id, amount);
} }