Removal of drone requests

This commit is contained in:
Anuken
2019-10-07 17:17:01 -04:00
parent 4315cb41f2
commit 989e0d8fd1
10 changed files with 125 additions and 98 deletions

View File

@@ -355,7 +355,13 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
public void drawOver(){
if(dead) return;
drawMechanics();
if(isBuilding()){
if(!state.isPaused()){
drawBuilding();
}
}else{
drawMining();
}
}
@Override

View File

@@ -10,11 +10,10 @@ import io.anuke.arc.math.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.entities.type.base.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.game.Teams.*;
import io.anuke.mindustry.world.*;
import io.anuke.mindustry.world.Block.*;
import static io.anuke.arc.Core.camera;
import static io.anuke.mindustry.Vars.*;
@@ -131,7 +130,7 @@ public class BlockRenderer implements Disposable{
if(!camera.bounds(Tmp.r1).grow(tilesize * 2f).overlaps(Tmp.r2.setSize(b.size * tilesize).setCenter(block.x * tilesize + b.offset(), block.y * tilesize + b.offset()))) continue;
Draw.alpha(0.5f);
Draw.mixcol(Pal.accent, 0.2f + Mathf.absin(5f, 0.2f));
Draw.mixcol(Color.white, 0.2f + Mathf.absin(Time.globalTime(), 6f, 0.2f));
Draw.rect(b.icon(Cicon.full), block.x * tilesize + b.offset(), block.y * tilesize + b.offset(), b.rotate ? block.rotation * 90 : 0f);
}
Draw.reset();

View File

@@ -7,19 +7,13 @@ import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.math.*;
import io.anuke.arc.scene.*;
import io.anuke.arc.scene.ui.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.content.*;
import io.anuke.mindustry.core.GameState.*;
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.input.PlaceUtils.*;
import io.anuke.mindustry.ui.*;
import io.anuke.mindustry.world.*;
import java.util.*;
import static io.anuke.arc.Core.scene;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.input.PlaceMode.*;
@@ -44,7 +38,7 @@ public class DesktopInput extends InputHandler{
@Override
public void buildUI(Group group){
group.fill(t -> {
t.bottom().update(() -> t.getColor().a = Mathf.lerpDelta(t.getColor().a, player.isBuilding() ? 1f : 0f, 0.1f));
t.bottom().update(() -> t.getColor().a = Mathf.lerpDelta(t.getColor().a, player.isBuilding() ? 1f : 0f, 0.15f));
t.table(Styles.black6, b -> b.add(Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.name())).style(Styles.outlineLabel)).margin(10f);
});
}
@@ -65,36 +59,7 @@ public class DesktopInput extends InputHandler{
drawRequest(lineRequests.get(i));
}
}else if(mode == breaking){
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, selectX, selectY, cursorX, cursorY, false, maxLength, 1f);
NormalizeResult dresult = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength);
for(int x = dresult.x; x <= dresult.x2; x++){
for(int y = dresult.y; y <= dresult.y2; y++){
Tile tile = world.ltile(x, y);
if(tile == null || !validBreak(tile.x, tile.y)) continue;
drawBreaking(tile.x, tile.y);
}
}
Tmp.r1.set(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
Draw.color(Pal.remove);
Lines.stroke(1f);
for(BuildRequest req : player.buildQueue()){
if(req.breaking) continue;
if(req.bounds(Tmp.r2).overlaps(Tmp.r1)){
drawBreaking(req);
}
}
Lines.stroke(2f);
Draw.color(Pal.removeBack);
Lines.rect(result.x, result.y - 1, result.x2 - result.x, result.y2 - result.y);
Draw.color(Pal.remove);
Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
drawSelection(selectX, selectY, cursorX, cursorY);
}else if(isPlacing()){
if(block.rotate){
drawArrow(block, cursorX, cursorY, rotation);
@@ -257,24 +222,7 @@ public class DesktopInput extends InputHandler{
lineRequests.clear();
Events.fire(new LineConfirmEvent());
}else if(mode == breaking){ //touch up while breaking, break everything in selection
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength);
for(int x = 0; x <= Math.abs(result.x2 - result.x); x++){
for(int y = 0; y <= Math.abs(result.y2 - result.y); y++){
int wx = selectX + x * Mathf.sign(cursorX - selectX);
int wy = selectY + y * Mathf.sign(cursorY - selectY);
tryBreakBlock(wx, wy);
}
}
Tmp.r1.set(result.x * tilesize, result.y * tilesize, (result.x2 - result.x) * tilesize, (result.y2 - result.y) * tilesize);
Iterator<BuildRequest> it = player.buildQueue().iterator();
while(it.hasNext()){
BuildRequest req = it.next();
if(!req.breaking && req.bounds(Tmp.r2).overlaps(Tmp.r1)){
it.remove();
}
}
removeSelection(selectX, selectY, cursorX, cursorY);
}
if(selected != null){

View File

@@ -20,13 +20,17 @@ import io.anuke.mindustry.entities.effect.*;
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.game.Teams.*;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.input.PlaceUtils.*;
import io.anuke.mindustry.net.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.ui.fragments.*;
import io.anuke.mindustry.world.*;
import java.util.*;
import static io.anuke.mindustry.Vars.*;
public abstract class InputHandler implements InputProcessor, GestureListener{
@@ -189,18 +193,23 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return false;
}
public void drawSelected(int x, int y, Block block, Color color){
Draw.color(Pal.remove);
for(int i = 0; i < 4; i++){
Point2 p = Geometry.d8edge[i];
float offset = -Math.max(block.size - 1, 0) / 2f * tilesize;
Draw.rect("block-select",
x*tilesize + block.offset() + offset * p.x,
y*tilesize + block.offset() + offset * p.y, i * 90);
}
Draw.reset();
}
public void drawBreaking(BuildRequest request){
if(request.breaking){
drawBreaking(request.x, request.y);
}else{
Block block = request.block;
Draw.color(Pal.remove);
for(int i = 0; i < 4; i++){
Point2 p = Geometry.d8edge[i];
float offset = -Math.max(block.size - 1, 0) / 2f * tilesize;
Draw.rect("block-select", request.drawx() + offset * p.x, request.drawy() + offset * p.y, i * 90);
}
Draw.reset();
drawSelected(request.x, request.y, request.block, Pal.remove);
}
}
@@ -209,13 +218,47 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(tile == null) return;
Block block = tile.block();
Draw.color(Pal.remove);
for(int i = 0; i < 4; i++){
Point2 p = Geometry.d8edge[i];
float offset = -Math.max(block.size - 1, 0) / 2f * tilesize;
Draw.rect("block-select", x * tilesize + block.offset() + offset * p.x, y * tilesize + block.offset() + offset * p.y, i * 90);
drawSelected(x, y, block, Pal.remove);
}
protected void drawSelection(int x1, int y1, int x2, int y2){
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, x1, y1, x2, y2, false, maxLength, 1f);
NormalizeResult dresult = PlaceUtils.normalizeArea(x1, y1, x2, y2, rotation, false, maxLength);
for(int x = dresult.x; x <= dresult.x2; x++){
for(int y = dresult.y; y <= dresult.y2; y++){
Tile tile = world.ltile(x, y);
if(tile == null || !validBreak(tile.x, tile.y)) continue;
drawBreaking(tile.x, tile.y);
}
}
Draw.reset();
Tmp.r1.set(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
Draw.color(Pal.remove);
Lines.stroke(1f);
for(BuildRequest req : player.buildQueue()){
if(req.breaking) continue;
if(req.bounds(Tmp.r2).overlaps(Tmp.r1)){
drawBreaking(req);
}
}
for(BrokenBlock req : state.teams.get(player.getTeam()).brokenBlocks){
Block block = content.block(req.block);
if(block.bounds(req.x, req.y, Tmp.r2).overlaps(Tmp.r1)){
drawSelected(req.x, req.y, content.block(req.block), Pal.remove);
}
}
Lines.stroke(2f);
Draw.color(Pal.removeBack);
Lines.rect(result.x, result.y - 1, result.x2 - result.x, result.y2 - result.y);
Draw.color(Pal.remove);
Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
}
protected void flushRequests(Array<BuildRequest> requests){
@@ -236,6 +279,39 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
block.drawRequest(brequest, allRequests(), validPlace(x, y, block, rotation));
}
/** Remove everything from the queue in a selection. */
protected void removeSelection(int x1, int y1, int x2, int y2){
NormalizeResult result = PlaceUtils.normalizeArea(x1, y1, x2, y2, rotation, false, maxLength);
for(int x = 0; x <= Math.abs(result.x2 - result.x); x++){
for(int y = 0; y <= Math.abs(result.y2 - result.y); y++){
int wx = x1 + x * Mathf.sign(x2 - x1);
int wy = y1 + y * Mathf.sign(y2 - y1);
tryBreakBlock(wx, wy);
}
}
//remove build requests
Tmp.r1.set(result.x * tilesize, result.y * tilesize, (result.x2 - result.x) * tilesize, (result.y2 - result.y) * tilesize);
Iterator<BuildRequest> it = player.buildQueue().iterator();
while(it.hasNext()){
BuildRequest req = it.next();
if(!req.breaking && req.bounds(Tmp.r2).overlaps(Tmp.r1)){
it.remove();
}
}
//remove blocks to rebuild
Iterator<BrokenBlock> broken = state.teams.get(player.getTeam()).brokenBlocks.iterator();
while(broken.hasNext()){
BrokenBlock req = broken.next();
Block block = content.block(req.block);
if(block.bounds(req.x, req.y, Tmp.r2).overlaps(Tmp.r1)){
broken.remove();
}
}
}
protected void updateLine(int selectX, int selectY){
lineRequests.clear();
iterateLine(selectX, selectY, tileX(getMouseX()), tileY(getMouseY()), l -> {

View File

@@ -48,8 +48,6 @@ public class MobileInput extends InputHandler implements GestureListener{
/** Used for shifting build requests. */
private float shiftDeltaX, shiftDeltaY;
/** List of currently selected tiles to place. */
private Array<BuildRequest> selection = new Array<>();
/** Place requests to be removed. */
private Array<BuildRequest> removals = new Array<>();
/** Whether or not the player is currently shifting all placed tiles. */
@@ -98,7 +96,7 @@ public class MobileInput extends InputHandler implements GestureListener{
r2.setSize(block.size * tilesize);
r2.setCenter(x * tilesize + block.offset(), y * tilesize + block.offset());
for(BuildRequest req : selection){
for(BuildRequest req : selectRequests){
Tile other = req.tile();
if(other == null || req.breaking) continue;
@@ -131,7 +129,7 @@ public class MobileInput extends InputHandler implements GestureListener{
r2.setSize(tilesize);
r2.setCenter(tile.worldx(), tile.worldy());
for(BuildRequest req : selection){
for(BuildRequest req : selectRequests){
Tile other = req.tile();
if(other == null) continue;
@@ -156,7 +154,7 @@ public class MobileInput extends InputHandler implements GestureListener{
}
void removeRequest(BuildRequest request){
selection.removeValue(request, true);
selectRequests.removeValue(request, true);
removals.add(request);
}
@@ -194,7 +192,7 @@ public class MobileInput extends InputHandler implements GestureListener{
//confirm button
table.addImageButton(Icon.checkSmall, Styles.clearPartiali, () -> {
for(BuildRequest request : selection){
for(BuildRequest request : selectRequests){
Tile tile = request.tile();
//actually place/break all selected blocks
@@ -212,10 +210,10 @@ public class MobileInput extends InputHandler implements GestureListener{
}
//move all current requests to removal array so they fade out
removals.addAll(selection);
selection.clear();
removals.addAll(selectRequests);
selectRequests.clear();
selecting = false;
}).visible(() -> !selection.isEmpty()).name("confirmplace");
}).visible(() -> !selectRequests.isEmpty()).name("confirmplace");
}
@Override
@@ -232,7 +230,7 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override
public boolean isDrawing(){
return selection.size > 0 || removals.size > 0 || lineMode || player.target != null || mode != PlaceMode.none;
return selectRequests.size > 0 || removals.size > 0 || lineMode || player.target != null || mode != PlaceMode.none;
}
@Override
@@ -257,7 +255,7 @@ public class MobileInput extends InputHandler implements GestureListener{
}
//draw list of requests
for(BuildRequest request : selection){
for(BuildRequest request : selectRequests){
Tile tile = request.tile();
if(tile == null) continue;
@@ -296,7 +294,7 @@ public class MobileInput extends InputHandler implements GestureListener{
int tileX = tileX(Core.input.mouseX());
int tileY = tileY(Core.input.mouseY());
if(mode == placing && block != null){
/*if(mode == placing && block != null){
//draw placing
iterateLine(lineStartX, lineStartY, tileX, tileY, l -> {
@@ -307,7 +305,8 @@ public class MobileInput extends InputHandler implements GestureListener{
rotation = l.rotation;
});
}else if(mode == breaking){
}else */
if(mode == breaking){
//draw breaking
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, lineStartX, lineStartY, tileX, tileY, false, maxLength, 1f);
NormalizeResult dresult = PlaceUtils.normalizeArea(lineStartX, lineStartY, tileX, tileY, rotation, false, maxLength);
@@ -330,7 +329,6 @@ public class MobileInput extends InputHandler implements GestureListener{
Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
}
}
TargetTrait target = player.target;
@@ -409,7 +407,7 @@ public class MobileInput extends InputHandler implements GestureListener{
BuildRequest request = new BuildRequest(l.x, l.y, l.rotation, block);
request.animScale = 1f;
selection.add(request);
selectRequests.add(request);
});
Events.fire(new LineConfirmEvent());
}else if(mode == breaking){
@@ -429,7 +427,7 @@ public class MobileInput extends InputHandler implements GestureListener{
if(!hasRequest(world.tile(tar.x, tar.y)) && validBreak(tar.x, tar.y)){
BuildRequest request = new BuildRequest(tar.x, tar.y);
request.animScale = 1f;
selection.add(request);
selectRequests.add(request);
}
}
}
@@ -490,11 +488,11 @@ public class MobileInput extends InputHandler implements GestureListener{
removeRequest(getRequest(cursor));
}else if(mode == placing && isPlacing() && validPlace(cursor.x, cursor.y, block, rotation) && !checkOverlapPlacement(cursor.x, cursor.y, block)){
//add to selection queue if it's a valid place position
selection.add(lastPlaced = new BuildRequest(cursor.x, cursor.y, rotation, block));
selectRequests.add(lastPlaced = new BuildRequest(cursor.x, cursor.y, rotation, block));
}else if(mode == breaking && validBreak(cursor.link().x, cursor.link().y) && !hasRequest(cursor.link())){
//add to selection queue if it's a valid BREAK position
cursor = cursor.link();
selection.add(new BuildRequest(cursor.x, cursor.y));
selectRequests.add(new BuildRequest(cursor.x, cursor.y));
}else if(!canTapPlayer(worldx, worldy) && !tileTapped(cursor.link())){
tryBeginMine(cursor);
}
@@ -505,7 +503,7 @@ public class MobileInput extends InputHandler implements GestureListener{
@Override
public void update(){
if(state.is(State.menu) || player.isDead()){
selection.clear();
selectRequests.clear();
removals.clear();
mode = none;
}
@@ -535,8 +533,8 @@ public class MobileInput extends InputHandler implements GestureListener{
if(mode == none){
selecting = false;
lineMode = false;
removals.addAll(selection);
selection.clear();
removals.addAll(selectRequests);
selectRequests.clear();
}
if(lineMode && mode == placing && block == null){
@@ -628,7 +626,7 @@ public class MobileInput extends InputHandler implements GestureListener{
int shiftedY = (int)(shiftDeltaY / tilesize);
if(Math.abs(shiftedX) > 0 || Math.abs(shiftedY) > 0){
for(BuildRequest req : selection){
for(BuildRequest req : selectRequests){
if(req.breaking) continue; //don't shift removal requests
req.x += shiftedX;
req.y += shiftedY;

View File

@@ -257,7 +257,7 @@ public abstract class SaveVersion extends SaveFileReader{
TeamData data = state.teams.get(team);
int blocks = stream.readInt();
for(int j = 0; j < blocks; j++){
data.brokenBlocks.addLast(new BrokenBlock(stream.readShort(), stream.readShort(), stream.readShort(), stream.readShort(), stream.readInt()));
data.brokenBlocks.addLast(new BrokenBlock(stream.readShort(), stream.readShort(), stream.readShort(), content.block(stream.readShort()).id, stream.readInt()));
}
}

View File

@@ -669,7 +669,7 @@ public class Block extends BlockStorage{
public void drawRequest(BuildRequest req, Eachable<BuildRequest> list, boolean valid){
Draw.reset();
Draw.mixcol(!valid ? Pal.breakInvalid : Pal.accent, 0.24f + Mathf.absin(Time.globalTime(), 7f, 0.3f));
Draw.mixcol(!valid ? Pal.breakInvalid : Color.white, (!valid ? 0.4f : 0.24f) + Mathf.absin(Time.globalTime(), 6f, 0.28f));
Draw.alpha(1f);
drawRequestRegion(req, list);
Draw.reset();