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(thermalGenerator, () -> {
node(differentialGenerator, () -> {
node(thoriumReactor, () -> {
node(thoriumReactor, Seq.with(new Research(Liquids.cryofluid)), () -> {
node(impactReactor, () -> {
});

View File

@ -265,7 +265,7 @@ public class UnitTypes implements ContentList{
itemCapacity = 60;
canBoost = true;
boostMultiplier = 1.5f;
speed = 0.52f;
speed = 0.55f;
hitsize = 8f;
health = 110f;
buildSpeed = 0.8f;
@ -291,7 +291,7 @@ public class UnitTypes implements ContentList{
itemCapacity = 60;
canBoost = true;
boostMultiplier = 1.5f;
speed = 0.62f;
speed = 0.65f;
hitsize = 10f;
health = 320f;
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){
mount.bullet = null;
}else{
mount.bullet.rotation(shootAngle);
mount.bullet.rotation(weaponRotation + 90);
mount.bullet.set(shootX, shootY);
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.struct.*;
import arc.struct.IntIntMap.*;
import arc.util.ArcAnnotate.*;
import mindustry.*;
import mindustry.content.*;
import mindustry.mod.Mods.*;
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);
}
public Seq<ItemStack> requirements(){
IntIntMap amounts = new IntIntMap();
public ItemSeq requirements(){
ItemSeq requirements = new ItemSeq();
tiles.each(t -> {
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()){
stacks.add(new ItemStack(Vars.content.item(ent.key), ent.value));
}
stacks.sort();
return stacks;
return requirements;
}
public boolean hasCore(){

View File

@ -20,7 +20,7 @@ public class Universe{
private int turn;
private Schematic lastLoadout;
private Seq<ItemStack> lastLaunchResources = new Seq<>();
private ItemSeq lastLaunchResources = new ItemSeq();
public Universe(){
load();
@ -104,14 +104,14 @@ public class Universe{
}
}
public Seq<ItemStack> getLaunchResources(){
lastLaunchResources = Core.settings.getJson("launch-resources", Seq.class, ItemStack.class, Seq::new);
public ItemSeq getLaunchResources(){
lastLaunchResources = Core.settings.getJson("launch-resources-seq", ItemSeq.class, ItemSeq::new);
return lastLaunchResources;
}
public void updateLaunchResources(Seq<ItemStack> stacks){
public void updateLaunchResources(ItemSeq 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. */

View File

@ -11,11 +11,14 @@ import mindustry.world.modules.ItemModule.*;
import java.util.*;
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 ItemSeq(){
values = new int[Vars.content.items().size];
}
public ItemSeq(Seq<ItemStack> stacks){
stacks.each(this::add);
}
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(){
Seq<ItemStack> out = new Seq<>();
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. */
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<>();
ItemSeq total = new ItemSeq();
//currently selected schematic
Schematic selected;
//validity of loadout items
@ -34,21 +32,14 @@ public class LaunchLoadoutDialog extends BaseDialog{
public void show(CoreBlock core, Building build, Runnable confirm){
cont.clear();
buttons.clear();
totalMap.clear();
Seq<ItemStack> stacks = universe.getLaunchResources();
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)));
}
selected.requirements().each(total::add);
universe.getLaunchResources().each(total::add);
valid = build.items.has(total);
};
@ -56,10 +47,18 @@ public class LaunchLoadoutDialog extends BaseDialog{
table.clearChildren();
int i = 0;
ItemSeq schems = selected.requirements();
ItemSeq launches = universe.getLaunchResources();
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);
int as = schems.get(s.item), al = launches.get(s.item);
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){
table.row();
@ -72,8 +71,11 @@ public class LaunchLoadoutDialog extends BaseDialog{
Runnable rebuildItems = () -> rebuild.get(items);
buttons.button("@resources", Icon.terrain, () -> {
loadout.show(core.itemCapacity, stacks, UnlockableContent::unlocked, stacks::clear, () -> {}, () -> {
universe.updateLaunchResources(stacks);
ItemSeq stacks = universe.getLaunchResources();
Seq<ItemStack> out = stacks.toSeq();
loadout.show(core.itemCapacity, out, UnlockableContent::unlocked, out::clear, () -> {}, () -> {
universe.updateLaunchResources(new ItemSeq(out));
update.run();
rebuildItems.run();
});

View File

@ -16,6 +16,7 @@ public class LoadoutDialog extends BaseDialog{
private Runnable hider;
private Runnable resetter;
private Runnable updater;
//TODO use itemseqs
private Seq<ItemStack> stacks = new Seq<>();
private Seq<ItemStack> originalStacks = new Seq<>();
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.TextButton.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import mindustry.game.*;
import mindustry.gen.*;
@ -333,7 +332,7 @@ public class SchematicsDialog extends BaseDialog{
cont.add(new SchematicImage(schem)).maxSize(800f);
cont.row();
Seq<ItemStack> arr = schem.requirements();
ItemSeq arr = schem.requirements();
cont.table(r -> {
int i = 0;
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);
//actually launch the items upon removal
if(team() == state.rules.defaultTeam && destsec != null){
ItemSeq dest = destsec.getExtraItems();
if(team() == state.rules.defaultTeam){
if(destsec != null && (destsec != state.rules.sector || net.client())){
ItemSeq dest = destsec.getExtraItems();
for(ItemStack stack : stacks){
dest.add(stack);
for(ItemStack stack : stacks){
dest.add(stack);
//update export
state.secinfo.handleItemExport(stack);
Events.fire(new LaunchItemEvent(stack));
//update export
state.secinfo.handleItemExport(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;
}
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){
for(ItemStack stack : stacks){
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);
}
public void remove(ItemSeq stacks){
stacks.each(this::remove);
}
public void remove(Iterable<ItemStack> stacks){
for(ItemStack stack : stacks) remove(stack.item, stack.amount);
}

View File

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