Various improvements
This commit is contained in:
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(){
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user