mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-13 01:07:30 +07:00
Various tweaks
This commit is contained in:
@ -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, () -> {
|
||||
|
||||
});
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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(){
|
||||
|
@ -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. */
|
||||
|
@ -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++){
|
||||
|
@ -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();
|
||||
});
|
||||
|
@ -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;
|
||||
|
@ -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){
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
org.gradle.daemon=true
|
||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||
archash=35f5d68f9cd8538208bc06f77a573386f2ecd477
|
||||
archash=11d4fb913d97951063390425e8aeeeac7f3c968f
|
||||
|
Reference in New Issue
Block a user