Launching dialog bugfixes & requirement display
This commit is contained in:
@@ -461,7 +461,9 @@ requirement.core = Destroy Enemy Core in {0}
|
|||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = Unlock {0}
|
||||||
resume = Resume Zone:\n[lightgray]{0}
|
resume = Resume Zone:\n[lightgray]{0}
|
||||||
bestwave = [lightgray]Best Wave: {0}
|
bestwave = [lightgray]Best Wave: {0}
|
||||||
|
#TODO fix/remove this
|
||||||
launch = < LAUNCH >
|
launch = < LAUNCH >
|
||||||
|
launch.text = Launch
|
||||||
launch.title = Launch Successful
|
launch.title = Launch Successful
|
||||||
launch.next = [lightgray]next opportunity at wave {0}
|
launch.next = [lightgray]next opportunity at wave {0}
|
||||||
launch.unable2 = [scarlet]Unable to LAUNCH.[]
|
launch.unable2 = [scarlet]Unable to LAUNCH.[]
|
||||||
|
|||||||
@@ -249,8 +249,8 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
ent.lifetime(Vars.launchDuration);
|
ent.lifetime(Vars.launchDuration);
|
||||||
ent.add();
|
ent.add();
|
||||||
|
|
||||||
//remove launch requirements from core
|
//remove schematic requirements from core
|
||||||
tile.items.remove(tile.block.requirements);
|
tile.items.remove(universe.getLastLoadout().requirements());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void playSector(Sector sector){
|
public void playSector(Sector sector){
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import arc.scene.ui.*;
|
|||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
import mindustry.type.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.ui.dialogs.SchematicsDialog.*;
|
import mindustry.ui.dialogs.SchematicsDialog.*;
|
||||||
import mindustry.world.blocks.storage.*;
|
import mindustry.world.blocks.storage.*;
|
||||||
@@ -14,6 +15,7 @@ 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{
|
||||||
Schematic selected;
|
Schematic selected;
|
||||||
|
boolean valid;
|
||||||
|
|
||||||
public LaunchLoadoutDialog(){
|
public LaunchLoadoutDialog(){
|
||||||
super("$configure");
|
super("$configure");
|
||||||
@@ -24,23 +26,44 @@ public class LaunchLoadoutDialog extends BaseDialog{
|
|||||||
buttons.clear();
|
buttons.clear();
|
||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
buttons.button("$ok", () -> {
|
buttons.button("$launch.text", Icon.ok, () -> {
|
||||||
universe.updateLoadout(core, selected);
|
universe.updateLoadout(core, selected);
|
||||||
confirm.run();
|
confirm.run();
|
||||||
hide();
|
hide();
|
||||||
});
|
}).disabled(b -> !valid);
|
||||||
|
|
||||||
int cols = Math.max((int)(Core.graphics.getWidth() / Scl.scl(230)), 1);
|
int cols = Math.max((int)(Core.graphics.getWidth() / Scl.scl(230)), 1);
|
||||||
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;
|
||||||
|
|
||||||
for(Schematic s : schematics.getLoadouts(core)){
|
for(Schematic s : schematics.getLoadouts(core)){
|
||||||
|
|
||||||
t.button(b -> b.add(new SchematicImage(s)), Styles.togglet, () -> selected = s)
|
t.button(b -> b.add(new SchematicImage(s)), Styles.togglet, () -> {
|
||||||
.group(group).pad(4).disabled(!build.items.has(s.requirements())).checked(s == selected).size(200f);
|
selected = s;
|
||||||
|
rebuildItems.run();
|
||||||
|
valid = build.items.has(selected.requirements());
|
||||||
|
}).group(group).pad(4).disabled(!build.items.has(s.requirements())).checked(s == selected).size(200f);
|
||||||
|
|
||||||
if(++i % cols == 0){
|
if(++i % cols == 0){
|
||||||
t.row();
|
t.row();
|
||||||
@@ -48,6 +71,12 @@ public class LaunchLoadoutDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
}).growX().get().setScrollingDisabled(true, false);
|
}).growX().get().setScrollingDisabled(true, false);
|
||||||
|
|
||||||
|
cont.row();
|
||||||
|
|
||||||
|
cont.add(items);
|
||||||
|
|
||||||
|
rebuildItems.run();
|
||||||
|
|
||||||
//TODO configure items to launch with
|
//TODO configure items to launch with
|
||||||
|
|
||||||
show();
|
show();
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
private @Nullable Sector selected, hovered, launchSector;
|
private @Nullable Sector selected, hovered, launchSector;
|
||||||
private CoreEntity launcher;
|
private CoreEntity launcher;
|
||||||
private Mode mode = look;
|
private Mode mode = look;
|
||||||
|
private boolean launching;
|
||||||
|
|
||||||
public PlanetDialog(){
|
public PlanetDialog(){
|
||||||
super("", Styles.fullDialog);
|
super("", Styles.fullDialog);
|
||||||
@@ -76,19 +77,6 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
zoom = Mathf.clamp(zoom + value / 10f, 0.5f, 2f);
|
zoom = Mathf.clamp(zoom + value / 10f, 0.5f, 2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
addListener(new ElementGestureListener(){
|
|
||||||
@Override
|
|
||||||
public void tap(InputEvent event, float x, float y, int count, KeyCode button){
|
|
||||||
if(hovered != null && (mode == launch ? canLaunch(hovered) && hovered != launchSector : hovered.unlocked())){
|
|
||||||
selected = hovered;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(selected != null){
|
|
||||||
updateSelected();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
shown(this::setup);
|
shown(this::setup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +85,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
public Dialog show(){
|
public Dialog show(){
|
||||||
mode = look;
|
mode = look;
|
||||||
selected = hovered = launchSector = null;
|
selected = hovered = launchSector = null;
|
||||||
|
launching= false;
|
||||||
return super.show();
|
return super.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,6 +93,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
this.launcher = launcher;
|
this.launcher = launcher;
|
||||||
selected = null;
|
selected = null;
|
||||||
hovered = null;
|
hovered = null;
|
||||||
|
launching = false;
|
||||||
|
|
||||||
//update view to sector
|
//update view to sector
|
||||||
planets.camPos.set(Tmp.v33.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()));
|
planets.camPos.set(Tmp.v33.set(sector.tile.v).rotate(Vec3.Y, -sector.planet.getRotation()));
|
||||||
@@ -204,7 +194,19 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
cont.clear();
|
cont.clear();
|
||||||
titleTable.remove();
|
titleTable.remove();
|
||||||
|
|
||||||
cont.rect((x, y, w, h) -> planets.render(this)).grow();
|
//add listener to the background rect, so it doesn't get unnecessary touch input
|
||||||
|
cont.rect((x, y, w, h) -> planets.render(this)).grow().get().addListener(new ElementGestureListener(){
|
||||||
|
@Override
|
||||||
|
public void tap(InputEvent event, float x, float y, int count, KeyCode button){
|
||||||
|
if(hovered != null && (mode == launch ? canLaunch(hovered) && hovered != launchSector : hovered.unlocked())){
|
||||||
|
selected = hovered;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selected != null){
|
||||||
|
updateSelected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -234,6 +236,12 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
Vec3 pos = planets.cam.project(Tmp.v31.set(selected.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -planets.planet.getRotation()).add(planets.planet.position));
|
Vec3 pos = planets.cam.project(Tmp.v31.set(selected.tile.v).setLength(PlanetRenderer.outlineRad).rotate(Vec3.Y, -planets.planet.getRotation()).add(planets.planet.position));
|
||||||
stable.setPosition(pos.x, pos.y, Align.center);
|
stable.setPosition(pos.x, pos.y, Align.center);
|
||||||
stable.toFront();
|
stable.toFront();
|
||||||
|
|
||||||
|
//smooth camera toward the sector
|
||||||
|
if(mode == launch && launching){
|
||||||
|
float len = planets.camPos.len();
|
||||||
|
planets.camPos.slerp(Tmp.v31.set(selected.tile.v).rotate(Vec3.Y,-selected.planet.getRotation()).setLength(len), 0.1f);
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
stable.remove();
|
stable.remove();
|
||||||
}
|
}
|
||||||
@@ -348,6 +356,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
shouldHide = false;
|
shouldHide = false;
|
||||||
loadouts.show((CoreBlock)launcher.block, launcher, () -> {
|
loadouts.show((CoreBlock)launcher.block, launcher, () -> {
|
||||||
control.handleLaunch(launcher);
|
control.handleLaunch(launcher);
|
||||||
|
launching = true;
|
||||||
zoom = 0.5f;
|
zoom = 0.5f;
|
||||||
|
|
||||||
ui.hudfrag.showLaunchDirect();
|
ui.hudfrag.showLaunchDirect();
|
||||||
@@ -366,14 +375,19 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{
|
|||||||
|
|
||||||
stable.update(() -> {
|
stable.update(() -> {
|
||||||
if(selected != null){
|
if(selected != null){
|
||||||
//fade out UI when not facing selected sector
|
if(launching){
|
||||||
Tmp.v31.set(selected.tile.v).rotate(Vec3.Y, -planets.planet.getRotation()).scl(-1f).nor();
|
stable.getColor().sub(0, 0, 0, 0.05f * Time.delta());
|
||||||
float dot = planets.cam.direction.dot(Tmp.v31);
|
}else{
|
||||||
stable.getColor().a = Math.max(dot, 0f)*2f;
|
//fade out UI when not facing selected sector
|
||||||
if(dot*2f <= -0.1f){
|
Tmp.v31.set(selected.tile.v).rotate(Vec3.Y, -planets.planet.getRotation()).scl(-1f).nor();
|
||||||
stable.remove();
|
float dot = planets.cam.direction.dot(Tmp.v31);
|
||||||
selected = null;
|
stable.getColor().a = Math.max(dot, 0f)*2f;
|
||||||
|
if(dot*2f <= -0.1f){
|
||||||
|
stable.remove();
|
||||||
|
selected = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -236,6 +236,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(Iterable<ItemStack> stacks){
|
||||||
|
for(ItemStack stack : stacks) remove(stack.item, stack.amount);
|
||||||
|
}
|
||||||
|
|
||||||
public void remove(ItemStack stack){
|
public void remove(ItemStack stack){
|
||||||
remove(stack.item, stack.amount);
|
remove(stack.item, stack.amount);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user