Various tweaks

This commit is contained in:
Anuken
2020-09-22 20:42:36 -04:00
parent 4a02315ee5
commit ba6ab8483e
12 changed files with 75 additions and 50 deletions

View File

@ -263,7 +263,7 @@ public class TechTree implements ContentList{
node(steamGenerator, () -> { node(steamGenerator, () -> {
node(thermalGenerator, () -> { node(thermalGenerator, () -> {
node(differentialGenerator, () -> { node(differentialGenerator, () -> {
node(thoriumReactor, () -> { node(thoriumReactor, Seq.with(new Research(Liquids.cryofluid)), () -> {
node(impactReactor, () -> { node(impactReactor, () -> {
}); });

View File

@ -265,7 +265,7 @@ public class UnitTypes implements ContentList{
itemCapacity = 60; itemCapacity = 60;
canBoost = true; canBoost = true;
boostMultiplier = 1.5f; boostMultiplier = 1.5f;
speed = 0.52f; speed = 0.55f;
hitsize = 8f; hitsize = 8f;
health = 110f; health = 110f;
buildSpeed = 0.8f; buildSpeed = 0.8f;
@ -291,7 +291,7 @@ public class UnitTypes implements ContentList{
itemCapacity = 60; itemCapacity = 60;
canBoost = true; canBoost = true;
boostMultiplier = 1.5f; boostMultiplier = 1.5f;
speed = 0.62f; speed = 0.65f;
hitsize = 10f; hitsize = 10f;
health = 320f; health = 320f;
buildSpeed = 0.9f; buildSpeed = 0.9f;

View File

@ -106,7 +106,7 @@ abstract class WeaponsComp implements Teamc, Posc, Rotc, Velc, Statusc{
if(!mount.bullet.isAdded() || mount.bullet.time >= mount.bullet.lifetime){ if(!mount.bullet.isAdded() || mount.bullet.time >= mount.bullet.lifetime){
mount.bullet = null; mount.bullet = null;
}else{ }else{
mount.bullet.rotation(shootAngle); mount.bullet.rotation(weaponRotation + 90);
mount.bullet.set(shootX, shootY); mount.bullet.set(shootX, shootY);
vel.add(Tmp.v1.trns(rotation + 180f, mount.bullet.type.recoil)); vel.add(Tmp.v1.trns(rotation + 180f, mount.bullet.type.recoil));
} }

View File

@ -2,9 +2,7 @@ package mindustry.game;
import arc.files.*; import arc.files.*;
import arc.struct.*; import arc.struct.*;
import arc.struct.IntIntMap.*;
import arc.util.ArcAnnotate.*; import arc.util.ArcAnnotate.*;
import mindustry.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.mod.Mods.*; import mindustry.mod.Mods.*;
import mindustry.type.*; import mindustry.type.*;
@ -38,20 +36,16 @@ public class Schematic implements Publishable, Comparable<Schematic>{
return tiles.sumf(s -> s.block.consumes.has(ConsumeType.power) ? s.block.consumes.getPower().usage : 0f); return tiles.sumf(s -> s.block.consumes.has(ConsumeType.power) ? s.block.consumes.getPower().usage : 0f);
} }
public Seq<ItemStack> requirements(){ public ItemSeq requirements(){
IntIntMap amounts = new IntIntMap(); ItemSeq requirements = new ItemSeq();
tiles.each(t -> { tiles.each(t -> {
for(ItemStack stack : t.block.requirements){ for(ItemStack stack : t.block.requirements){
amounts.increment(stack.item.id, stack.amount); requirements.add(stack.item, stack.amount);
} }
}); });
Seq<ItemStack> stacks = new Seq<>();
for(Entry ent : amounts.entries()){ return requirements;
stacks.add(new ItemStack(Vars.content.item(ent.key), ent.value));
}
stacks.sort();
return stacks;
} }
public boolean hasCore(){ public boolean hasCore(){

View File

@ -20,7 +20,7 @@ public class Universe{
private int turn; private int turn;
private Schematic lastLoadout; private Schematic lastLoadout;
private Seq<ItemStack> lastLaunchResources = new Seq<>(); private ItemSeq lastLaunchResources = new ItemSeq();
public Universe(){ public Universe(){
load(); load();
@ -104,14 +104,14 @@ public class Universe{
} }
} }
public Seq<ItemStack> getLaunchResources(){ public ItemSeq getLaunchResources(){
lastLaunchResources = Core.settings.getJson("launch-resources", Seq.class, ItemStack.class, Seq::new); lastLaunchResources = Core.settings.getJson("launch-resources-seq", ItemSeq.class, ItemSeq::new);
return lastLaunchResources; return lastLaunchResources;
} }
public void updateLaunchResources(Seq<ItemStack> stacks){ public void updateLaunchResources(ItemSeq stacks){
this.lastLaunchResources = stacks; this.lastLaunchResources = stacks;
Core.settings.putJson("launch-resources", ItemStack.class, lastLaunchResources); Core.settings.putJson("launch-resources-seq", lastLaunchResources);
} }
/** Updates selected loadout for future deployment. */ /** Updates selected loadout for future deployment. */

View File

@ -11,11 +11,14 @@ import mindustry.world.modules.ItemModule.*;
import java.util.*; import java.util.*;
public class ItemSeq implements Iterable<ItemStack>, Serializable{ public class ItemSeq implements Iterable<ItemStack>, Serializable{
protected final int[] values; protected final int[] values = new int[Vars.content.items().size];
public int total; public int total;
public ItemSeq(){ public ItemSeq(){
values = new int[Vars.content.items().size]; }
public ItemSeq(Seq<ItemStack> stacks){
stacks.each(this::add);
} }
public void each(ItemConsumer cons){ public void each(ItemConsumer cons){
@ -26,6 +29,11 @@ public class ItemSeq implements Iterable<ItemStack>, Serializable{
} }
} }
public void clear(){
total = 0;
Arrays.fill(values, 0);
}
public Seq<ItemStack> toSeq(){ public Seq<ItemStack> toSeq(){
Seq<ItemStack> out = new Seq<>(); Seq<ItemStack> out = new Seq<>();
for(int i = 0; i < values.length; i++){ for(int i = 0; i < values.length; i++){

View File

@ -18,10 +18,8 @@ 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(); LoadoutDialog loadout = new LoadoutDialog();
//total as a map
ObjectIntMap<Item> totalMap = new ObjectIntMap<>();
//total required items //total required items
Seq<ItemStack> total = new Seq<>(); ItemSeq total = new ItemSeq();
//currently selected schematic //currently selected schematic
Schematic selected; Schematic selected;
//validity of loadout items //validity of loadout items
@ -34,21 +32,14 @@ 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 //updates sum requirements
Runnable update = () -> { Runnable update = () -> {
totalMap.clear();
total.clear(); total.clear();
selected.requirements().each(i -> totalMap.increment(i.item, i.amount)); selected.requirements().each(total::add);
universe.getLaunchResources().each(i -> totalMap.increment(i.item, i.amount)); universe.getLaunchResources().each(total::add);
for(Item item : content.items()){
if(totalMap.containsKey(item)) total.add(new ItemStack(item, totalMap.get(item)));
}
valid = build.items.has(total); valid = build.items.has(total);
}; };
@ -56,10 +47,18 @@ public class LaunchLoadoutDialog extends BaseDialog{
table.clearChildren(); table.clearChildren();
int i = 0; int i = 0;
ItemSeq schems = selected.requirements();
ItemSeq launches = universe.getLaunchResources();
for(ItemStack s : total){ for(ItemStack s : total){
table.image(s.item.icon(Cicon.small)).left(); table.image(s.item.icon(Cicon.small)).left();
table.add((build.items.has(s.item, s.amount)) ? "[lightgray]" + s.amount + "" : int as = schems.get(s.item), al = launches.get(s.item);
"[scarlet]" + (Math.min(build.items.get(s.item), s.amount) + "[lightgray]/" + s.amount)).padLeft(2).left().padRight(4);
String amountStr = "[lightgray]" + (al + " + [accent]" + as + "[lightgray]");
table.add(
build.items.has(s.item, s.amount) ? amountStr :
"[scarlet]" + (Math.min(build.items.get(s.item), s.amount) + "[lightgray]/" + amountStr)).padLeft(2).left().padRight(4);
if(++i % 4 == 0){ if(++i % 4 == 0){
table.row(); table.row();
@ -72,8 +71,11 @@ public class LaunchLoadoutDialog extends BaseDialog{
Runnable rebuildItems = () -> rebuild.get(items); Runnable rebuildItems = () -> rebuild.get(items);
buttons.button("@resources", Icon.terrain, () -> { buttons.button("@resources", Icon.terrain, () -> {
loadout.show(core.itemCapacity, stacks, UnlockableContent::unlocked, stacks::clear, () -> {}, () -> { ItemSeq stacks = universe.getLaunchResources();
universe.updateLaunchResources(stacks); Seq<ItemStack> out = stacks.toSeq();
loadout.show(core.itemCapacity, out, UnlockableContent::unlocked, out::clear, () -> {}, () -> {
universe.updateLaunchResources(new ItemSeq(out));
update.run(); update.run();
rebuildItems.run(); rebuildItems.run();
}); });

View File

@ -16,6 +16,7 @@ public class LoadoutDialog extends BaseDialog{
private Runnable hider; private Runnable hider;
private Runnable resetter; private Runnable resetter;
private Runnable updater; private Runnable updater;
//TODO use itemseqs
private Seq<ItemStack> stacks = new Seq<>(); private Seq<ItemStack> stacks = new Seq<>();
private Seq<ItemStack> originalStacks = new Seq<>(); private Seq<ItemStack> originalStacks = new Seq<>();
private Boolf<Item> validator = i -> true; private Boolf<Item> validator = i -> true;

View File

@ -10,7 +10,6 @@ import arc.scene.ui.*;
import arc.scene.ui.ImageButton.*; import arc.scene.ui.ImageButton.*;
import arc.scene.ui.TextButton.*; import arc.scene.ui.TextButton.*;
import arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*; import arc.util.*;
import mindustry.game.*; import mindustry.game.*;
import mindustry.gen.*; import mindustry.gen.*;
@ -333,7 +332,7 @@ public class SchematicsDialog extends BaseDialog{
cont.add(new SchematicImage(schem)).maxSize(800f); cont.add(new SchematicImage(schem)).maxSize(800f);
cont.row(); cont.row();
Seq<ItemStack> arr = schem.requirements(); ItemSeq arr = schem.requirements();
cont.table(r -> { cont.table(r -> {
int i = 0; int i = 0;
for(ItemStack s : arr){ for(ItemStack s : arr){

View File

@ -180,18 +180,26 @@ public class LaunchPad extends Block{
Sector destsec = !net.client() ? state.secinfo.origin : state.rules.sector.planet.sectors.find(Sector::hasBase); Sector destsec = !net.client() ? state.secinfo.origin : state.rules.sector.planet.sectors.find(Sector::hasBase);
//actually launch the items upon removal //actually launch the items upon removal
if(team() == state.rules.defaultTeam && destsec != null){ if(team() == state.rules.defaultTeam){
ItemSeq dest = destsec.getExtraItems(); if(destsec != null && (destsec != state.rules.sector || net.client())){
ItemSeq dest = destsec.getExtraItems();
for(ItemStack stack : stacks){ for(ItemStack stack : stacks){
dest.add(stack); dest.add(stack);
//update export //update export
state.secinfo.handleItemExport(stack); state.secinfo.handleItemExport(stack);
Events.fire(new LaunchItemEvent(stack)); Events.fire(new LaunchItemEvent(stack));
}
destsec.setExtraItems(dest);
}else if(team().core() != null){
//dump launched stuff into the core
for(ItemStack stack : stacks){
int min = Math.min(team().core().block.itemCapacity - team().core().items.get(stack.item), stack.amount);
team().core().items.add(stack.item, min);
}
} }
destsec.setExtraItems(dest);
} }
} }
} }

View File

@ -135,6 +135,15 @@ public class ItemModule extends BlockModule{
return true; return true;
} }
public boolean has(ItemSeq items){
for(Item item : content.items()){
if(!has(item, items.get(item))){
return false;
}
}
return true;
}
public boolean has(Iterable<ItemStack> stacks){ public boolean has(Iterable<ItemStack> stacks){
for(ItemStack stack : stacks){ for(ItemStack stack : stacks){
if(!has(stack.item, stack.amount)) return false; if(!has(stack.item, stack.amount)) return false;
@ -261,6 +270,10 @@ public class ItemModule extends BlockModule{
for(ItemStack stack : stacks) remove(stack.item, stack.amount); for(ItemStack stack : stacks) remove(stack.item, stack.amount);
} }
public void remove(ItemSeq stacks){
stacks.each(this::remove);
}
public void remove(Iterable<ItemStack> stacks){ public void remove(Iterable<ItemStack> stacks){
for(ItemStack stack : stacks) remove(stack.item, stack.amount); for(ItemStack stack : stacks) remove(stack.item, stack.amount);
} }

View File

@ -1,3 +1,3 @@
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.jvmargs=-Xms256m -Xmx1024m org.gradle.jvmargs=-Xms256m -Xmx1024m
archash=35f5d68f9cd8538208bc06f77a573386f2ecd477 archash=11d4fb913d97951063390425e8aeeeac7f3c968f