Various improvements

This commit is contained in:
Anuken
2019-10-06 23:03:02 -04:00
parent 335c1779ef
commit 4315cb41f2
11 changed files with 97 additions and 52 deletions

View File

@@ -416,6 +416,7 @@ public class Control implements ApplicationListener, Loadable{
music.update(); music.update();
loops.update(); loops.update();
Time.updateGlobal();
if(Core.input.keyTap(Binding.fullscreen)){ if(Core.input.keyTap(Binding.fullscreen)){
boolean full = settings.getBool("fullscreen"); boolean full = settings.getBool("fullscreen");

View File

@@ -302,6 +302,14 @@ public interface BuilderTrait extends Entity, TeamTrait{
} }
public Rectangle bounds(Rectangle rect){
if(breaking){
return rect.set(-100f, -100f, 0f, 0f);
}else{
return block.bounds(x, y, rect);
}
}
public BuildRequest set(int x, int y, int rotation, Block block){ public BuildRequest set(int x, int y, int rotation, Block block){
this.x = x; this.x = x;
this.y = y; this.y = y;

View File

@@ -19,7 +19,6 @@ import io.anuke.mindustry.entities.*;
import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.traits.*;
import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.*;
import io.anuke.mindustry.gen.*; import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.input.*; import io.anuke.mindustry.input.*;
import io.anuke.mindustry.io.*; import io.anuke.mindustry.io.*;
import io.anuke.mindustry.net.Administration.*; import io.anuke.mindustry.net.Administration.*;
@@ -429,22 +428,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
if(request.progress > 0.01f || (buildRequest() == request && request.initialized && (dst(request.x * tilesize, request.y * tilesize) <= placeDistance || state.isEditor()))) continue; if(request.progress > 0.01f || (buildRequest() == request && request.initialized && (dst(request.x * tilesize, request.y * tilesize) <= placeDistance || state.isEditor()))) continue;
if(request.breaking){ if(request.breaking){
Block block = world.ltile(request.x, request.y).block(); control.input.drawBreaking(request);
//draw removal request
Lines.stroke(2f, Pal.removeBack);
float rad = Mathf.absin(Time.time(), 7f, 1f) + block.size * tilesize / 2f - 1;
Lines.square(
request.x * tilesize + block.offset(),
request.y * tilesize + block.offset() - 1,
rad);
Draw.color(Pal.remove);
Lines.square(
request.x * tilesize + block.offset(),
request.y * tilesize + block.offset(), rad);
}else{ }else{
request.block.drawRequest(request, control.input.allRequests(), true); request.block.drawRequest(request, control.input.allRequests(), true);
} }

View File

@@ -27,7 +27,7 @@ public class OverlayRenderer{
if(!input.isDrawing() || player.isDead()) return; if(!input.isDrawing() || player.isDead()) return;
input.drawOutlined(); input.drawBottom();
} }
public void drawTop(){ public void drawTop(){

View File

@@ -7,6 +7,7 @@ import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.math.*; import io.anuke.arc.math.*;
import io.anuke.arc.scene.*; import io.anuke.arc.scene.*;
import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.content.*; import io.anuke.mindustry.content.*;
import io.anuke.mindustry.core.GameState.*; import io.anuke.mindustry.core.GameState.*;
import io.anuke.mindustry.entities.traits.BuilderTrait.*; import io.anuke.mindustry.entities.traits.BuilderTrait.*;
@@ -17,6 +18,8 @@ import io.anuke.mindustry.input.PlaceUtils.*;
import io.anuke.mindustry.ui.*; import io.anuke.mindustry.ui.*;
import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.*;
import java.util.*;
import static io.anuke.arc.Core.scene; import static io.anuke.arc.Core.scene;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.input.PlaceMode.*; import static io.anuke.mindustry.input.PlaceMode.*;
@@ -47,7 +50,7 @@ public class DesktopInput extends InputHandler{
} }
@Override @Override
public void drawOutlined(){ public void drawTop(){
Lines.stroke(1f); Lines.stroke(1f);
int cursorX = tileX(Core.input.mouseX()); int cursorX = tileX(Core.input.mouseX());
int cursorY = tileY(Core.input.mouseY()); int cursorY = tileY(Core.input.mouseY());
@@ -56,7 +59,7 @@ public class DesktopInput extends InputHandler{
if(mode == placing && block != null){ if(mode == placing && block != null){
for(int i = 0; i < lineRequests.size; i++){ for(int i = 0; i < lineRequests.size; i++){
BuildRequest req = lineRequests.get(i); BuildRequest req = lineRequests.get(i);
if(i == lineRequests.size - 1){ if(i == lineRequests.size - 1 && req.block.rotate){
drawArrow(block, req.x, req.y, req.rotation); drawArrow(block, req.x, req.y, req.rotation);
} }
drawRequest(lineRequests.get(i)); drawRequest(lineRequests.get(i));
@@ -70,13 +73,24 @@ public class DesktopInput extends InputHandler{
Tile tile = world.ltile(x, y); Tile tile = world.ltile(x, y);
if(tile == null || !validBreak(tile.x, tile.y)) continue; if(tile == null || !validBreak(tile.x, tile.y)) continue;
Draw.color(Pal.removeBack); drawBreaking(tile.x, tile.y);
Lines.square(tile.drawx(), tile.drawy() - 1, tile.block().size * tilesize / 2f - 1);
Draw.color(Pal.remove);
Lines.square(tile.drawx(), tile.drawy(), tile.block().size * tilesize / 2f - 1);
} }
} }
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); Draw.color(Pal.removeBack);
Lines.rect(result.x, result.y - 1, result.x2 - result.x, result.y2 - result.y); Lines.rect(result.x, result.y - 1, result.x2 - result.x, result.y2 - result.y);
Draw.color(Pal.remove); Draw.color(Pal.remove);
@@ -85,6 +99,7 @@ public class DesktopInput extends InputHandler{
if(block.rotate){ if(block.rotate){
drawArrow(block, cursorX, cursorY, rotation); drawArrow(block, cursorX, cursorY, rotation);
} }
Draw.color();
drawRequest(cursorX, cursorY, block, rotation); drawRequest(cursorX, cursorY, block, rotation);
block.drawPlace(cursorX, cursorY, rotation, validPlace(cursorX, cursorY, block, rotation)); block.drawPlace(cursorX, cursorY, rotation, validPlace(cursorX, cursorY, block, rotation));
} }
@@ -216,8 +231,7 @@ public class DesktopInput extends InputHandler{
}else if(!ui.chatfrag.chatOpen()){ //if it's out of bounds, shooting is just fine }else if(!ui.chatfrag.chatOpen()){ //if it's out of bounds, shooting is just fine
player.isShooting = true; player.isShooting = true;
} }
}else if(Core.input.keyTap(Binding.deselect) && (block != null || mode != none || player.isBuilding()) && }else if(Core.input.keyTap(Binding.deselect) && block != null){
!(player.buildRequest() != null && player.buildRequest().breaking && Core.keybinds.get(Binding.deselect) == Core.keybinds.get(Binding.break_block))){
block = null; block = null;
mode = none; mode = none;
}else if(Core.input.keyTap(Binding.break_block) && !Core.scene.hasMouse()){ }else if(Core.input.keyTap(Binding.break_block) && !Core.scene.hasMouse()){
@@ -252,6 +266,15 @@ public class DesktopInput extends InputHandler{
tryBreakBlock(wx, wy); 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();
}
}
} }
if(selected != null){ if(selected != null){

View File

@@ -177,7 +177,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
} }
public void drawOutlined(){ public void drawBottom(){
} }
@@ -189,6 +189,35 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return false; return false;
} }
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();
}
}
public void drawBreaking(int x, int y){
Tile tile = world.ltile(x, y);
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);
}
Draw.reset();
}
protected void flushRequests(Array<BuildRequest> requests){ protected void flushRequests(Array<BuildRequest> requests){
for(BuildRequest req : requests){ for(BuildRequest req : requests){
if(req.block != null && validPlace(req.x, req.y, req.block, req.rotation)){ if(req.block != null && validPlace(req.x, req.y, req.block, req.rotation)){
@@ -476,7 +505,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
float angle = Angles.angle(startX, startY, endX, endY); float angle = Angles.angle(startX, startY, endX, endY);
int baseRotation = rotation; int baseRotation = rotation;
if(!overrideLineRotation || diagonal){ if(!overrideLineRotation || diagonal){
baseRotation = (startX == endX && startY == endY) ? rotation : ((int)((angle + 45) / 90f)) % 4; baseRotation = (startX == endX && startY == endY) ? rotation : ((int)((angle + 45) / 90f)) % 4;
} }
Tmp.r3.set(-1, -1, 0, 0); Tmp.r3.set(-1, -1, 0, 0);

View File

@@ -241,7 +241,7 @@ public class MobileInput extends InputHandler implements GestureListener{
} }
@Override @Override
public void drawOutlined(){ public void drawBottom(){
Lines.stroke(1f); Lines.stroke(1f);
//draw removals //draw removals
@@ -256,8 +256,6 @@ public class MobileInput extends InputHandler implements GestureListener{
drawRequest(request); drawRequest(request);
} }
BuildRequest last = null;
//draw list of requests //draw list of requests
for(BuildRequest request : selection){ for(BuildRequest request : selection){
Tile tile = request.tile(); Tile tile = request.tile();
@@ -288,8 +286,6 @@ public class MobileInput extends InputHandler implements GestureListener{
Draw.mixcol(); Draw.mixcol();
request.block.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, request.block, rotation)); request.block.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, request.block, rotation));
} }
last = request;
} }
Draw.mixcol(); Draw.mixcol();

View File

@@ -125,7 +125,7 @@ public class Mods implements Loadable{
//get textures packed //get textures packed
if(totalSprites > 0){ if(totalSprites > 0){
TextureFilter filter = TextureFilter.Nearest; TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.Linear : TextureFilter.Nearest;
packer.updateTextureAtlas(Core.atlas, filter, filter, false); packer.updateTextureAtlas(Core.atlas, filter, filter, false);
//generate new icons //generate new icons

View File

@@ -10,6 +10,8 @@ import io.anuke.arc.scene.event.*;
import io.anuke.arc.scene.style.*; import io.anuke.arc.scene.style.*;
import io.anuke.arc.scene.ui.*; import io.anuke.arc.scene.ui.*;
import io.anuke.arc.scene.ui.layout.*; import io.anuke.arc.scene.ui.layout.*;
import io.anuke.arc.util.*;
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.*;
import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.EventType.*;
@@ -17,7 +19,7 @@ import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.input.*; import io.anuke.mindustry.input.*;
import io.anuke.mindustry.type.*; import io.anuke.mindustry.type.*;
import io.anuke.mindustry.ui.Styles; import io.anuke.mindustry.ui.*;
import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.*;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
@@ -74,17 +76,21 @@ public class PlacementFragment extends Fragment{
boolean gridUpdate(InputHandler input){ boolean gridUpdate(InputHandler input){
if(Core.input.keyDown(Binding.pick)){ //mouse eyedropper select if(Core.input.keyDown(Binding.pick)){ //mouse eyedropper select
Tile tile = world.tileWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); Tile tile = world.ltileWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y);
Block tryRecipe = tile == null ? null : tile.block();
if(tile != null){ for(BuildRequest req : player.buildQueue()){
tile = tile.link(); if(!req.breaking && req.block.bounds(req.x, req.y, Tmp.r1).contains(Core.input.mouseWorld())){
Block tryRecipe = tile.block(); tryRecipe = req.block;
if(tryRecipe.isVisible() && unlocked(tryRecipe)){ break;
input.block = tryRecipe;
currentCategory = input.block.category;
return true;
} }
} }
if(tryRecipe != null && tryRecipe.isVisible() && unlocked(tryRecipe)){
input.block = tryRecipe;
currentCategory = input.block.category;
return true;
}
} }
if(!Core.input.keyDown(Binding.gridMode) || ui.chatfrag.chatOpen()) return false; if(!Core.input.keyDown(Binding.gridMode) || ui.chatfrag.chatOpen()) return false;

View File

@@ -668,15 +668,10 @@ public class Block extends BlockStorage{
} }
public void drawRequest(BuildRequest req, Eachable<BuildRequest> list, boolean valid){ public void drawRequest(BuildRequest req, Eachable<BuildRequest> list, boolean valid){
Draw.mixcol(!valid ? Pal.breakInvalid : Pal.accent, 0.12f + Mathf.absin(Time.time(), 8f, 0.35f)); Draw.reset();
Draw.mixcol(!valid ? Pal.breakInvalid : Pal.accent, 0.24f + Mathf.absin(Time.globalTime(), 7f, 0.3f));
Draw.alpha(1f);
drawRequestRegion(req, list); drawRequestRegion(req, list);
//Draw.color(Pal.accent);
for(int i = 0; i < 4; i++){
Point2 p = Geometry.d8edge[i];
float offset = -Math.max(size - 1, 0) / 2f * tilesize;
//if(i % 2 == 0) Draw.rect("block-select", req.drawx() + offset * p.x, req.drawy() + offset * p.y, i * 90);
}
Draw.reset(); Draw.reset();
} }

View File

@@ -51,14 +51,17 @@ public class Conduit extends LiquidBlock implements Autotiler{
if(bits == null) return; if(bits == null) return;
Draw.colorl(0.34f); Draw.colorl(0.34f);
Draw.alpha(0.5f);
Draw.rect(botRegions[bits[0]], req.drawx(), req.drawy(), req.rotation * 90); Draw.rect(botRegions[bits[0]], req.drawx(), req.drawy(), req.rotation * 90);
Draw.color(); Draw.color();
Draw.rect(topRegions[bits[0]], req.drawx(), req.drawy(), req.rotation * 90); Draw.rect(topRegions[bits[0]], req.drawx(), req.drawy(), req.rotation * 90);
} }
@Override @Override
public void transformCase(int num, int[] bits){ public void transformCase(int num, int[] bits){
bits[0] = num == 0 ? 3 : num == 1 ? 6 : num == 2 ? 2 : num == 3 ? 4 : num == 4 ? 5 : num == 6 ? 1 : 0; bits[0] = num == 0 ? 3 : num == 1 ? 6 : num == 2 ? 2 : num == 3 ? 4 : num == 4 ? 5 : num == 5 ? 1 : 0;
} }
@Override @Override