Certain team-specific rules

This commit is contained in:
Anuken
2020-06-15 12:00:32 -04:00
parent 90b0650af9
commit b5660a50ca
61 changed files with 291 additions and 237 deletions

View File

@@ -42,7 +42,7 @@ public class DesktopInput extends InputHandler{
/** Animation scale for line. */
private float selectScale;
/** Selected build request for movement. */
private @Nullable BuildRequest sreq;
private @Nullable BuildPlan sreq;
/** Whether player is currently deleting removal requests. */
private boolean deleting = false, shouldShoot = false;
@@ -124,19 +124,19 @@ public class DesktopInput extends InputHandler{
//draw hover request
if(mode == none && !isPlacing()){
BuildRequest req = getRequest(cursorX, cursorY);
BuildPlan req = getRequest(cursorX, cursorY);
if(req != null){
drawSelected(req.x, req.y, req.breaking ? req.tile().block() : req.block, Pal.accent);
}
}
//draw schematic requests
for(BuildRequest request : selectRequests){
for(BuildPlan request : selectRequests){
request.animScale = 1f;
drawRequest(request);
}
for(BuildRequest request : selectRequests){
for(BuildPlan request : selectRequests){
drawOverRequest(request);
}
@@ -144,7 +144,7 @@ public class DesktopInput extends InputHandler{
//draw things that may be placed soon
if(mode == placing && block != null){
for(int i = 0; i < lineRequests.size; i++){
BuildRequest req = lineRequests.get(i);
BuildPlan req = lineRequests.get(i);
if(i == lineRequests.size - 1 && req.block.rotate){
drawArrow(block, req.x, req.y, req.rotation);
}
@@ -425,7 +425,7 @@ public class DesktopInput extends InputHandler{
}
if(Core.input.keyTap(Binding.select) && !Core.scene.hasMouse()){
BuildRequest req = getRequest(cursorX, cursorY);
BuildPlan req = getRequest(cursorX, cursorY);
if(Core.input.keyDown(Binding.break_block)){
mode = none;
@@ -444,7 +444,7 @@ public class DesktopInput extends InputHandler{
deleting = true;
}else if(selected != null){
//only begin shooting if there's no cursor event
if(!tileTapped(selected.entity) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.builder().requests().size == 0 || !player.builder().isBuilding()) && !droppingItem &&
if(!tileTapped(selected.entity) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.builder().plans().size == 0 || !player.builder().isBuilding()) && !droppingItem &&
!tryBeginMine(selected) && player.miner().mineTile() == null && !Core.scene.hasKeyboard()){
isShooting = shouldShoot;
}
@@ -466,9 +466,9 @@ public class DesktopInput extends InputHandler{
}
if(Core.input.keyDown(Binding.select) && mode == none && !isPlacing() && deleting){
BuildRequest req = getRequest(cursorX, cursorY);
BuildPlan req = getRequest(cursorX, cursorY);
if(req != null && req.breaking){
player.builder().requests().remove(req);
player.builder().plans().remove(req);
}
}else{
deleting = false;
@@ -497,7 +497,7 @@ public class DesktopInput extends InputHandler{
if(sreq != null){
if(getRequest(sreq.x, sreq.y, sreq.block.size, sreq) != null){
player.builder().requests().remove(sreq, true);
player.builder().plans().remove(sreq, true);
}
sreq = null;
}

View File

@@ -64,10 +64,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
protected @Nullable Schematic lastSchematic;
protected GestureDetector detector;
protected PlaceLine line = new PlaceLine();
protected BuildRequest resultreq;
protected BuildRequest brequest = new BuildRequest();
protected Seq<BuildRequest> lineRequests = new Seq<>();
protected Seq<BuildRequest> selectRequests = new Seq<>();
protected BuildPlan resultreq;
protected BuildPlan brequest = new BuildPlan();
protected Seq<BuildPlan> lineRequests = new Seq<>();
protected Seq<BuildPlan> selectRequests = new Seq<>();
//methods to override
@@ -232,11 +232,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
public Eachable<BuildRequest> allRequests(){
public Eachable<BuildPlan> allRequests(){
return cons -> {
for(BuildRequest request : player.builder().requests()) cons.get(request);
for(BuildRequest request : selectRequests) cons.get(request);
for(BuildRequest request : lineRequests) cons.get(request);
for(BuildPlan request : player.builder().plans()) cons.get(request);
for(BuildPlan request : selectRequests) cons.get(request);
for(BuildPlan request : lineRequests) cons.get(request);
};
}
@@ -317,7 +317,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Drawf.selected(x, y, block, color);
}
public void drawBreaking(BuildRequest request){
public void drawBreaking(BuildPlan request){
if(request.breaking){
drawBreaking(request.x, request.y);
}else{
@@ -325,7 +325,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
}
public boolean requestMatches(BuildRequest request){
public boolean requestMatches(BuildPlan request){
Tile tile = world.tile(request.x, request.y);
return tile != null && tile.block() instanceof BuildBlock && tile.<BuildEntity>ent().cblock == request.block;
}
@@ -362,7 +362,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
});
}
public void rotateRequests(Seq<BuildRequest> requests, int direction){
public void rotateRequests(Seq<BuildPlan> requests, int direction){
int ox = schemOriginX(), oy = schemOriginY();
requests.each(req -> {
@@ -396,7 +396,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
});
}
public void flipRequests(Seq<BuildRequest> requests, boolean x){
public void flipRequests(Seq<BuildPlan> requests, boolean x){
int origin = (x ? schemOriginX() : schemOriginY()) * tilesize;
requests.each(req -> {
@@ -436,18 +436,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
/** Returns the selection request that overlaps this position, or null. */
protected BuildRequest getRequest(int x, int y){
protected BuildPlan getRequest(int x, int y){
return getRequest(x, y, 1, null);
}
/** Returns the selection request that overlaps this position, or null. */
protected BuildRequest getRequest(int x, int y, int size, BuildRequest skip){
protected BuildPlan getRequest(int x, int y, int size, BuildPlan skip){
float offset = ((size + 1) % 2) * tilesize / 2f;
r2.setSize(tilesize * size);
r2.setCenter(x * tilesize + offset, y * tilesize + offset);
resultreq = null;
Boolf<BuildRequest> test = req -> {
Boolf<BuildPlan> test = req -> {
if(req == skip) return false;
Tile other = req.tile();
@@ -464,11 +464,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return r2.overlaps(r1);
};
for(BuildRequest req : player.builder().requests()){
for(BuildPlan req : player.builder().plans()){
if(test.get(req)) return req;
}
for(BuildRequest req : selectRequests){
for(BuildPlan req : selectRequests){
if(test.get(req)) return req;
}
@@ -493,14 +493,14 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Draw.color(Pal.remove);
Lines.stroke(1f);
for(BuildRequest req : player.builder().requests()){
for(BuildPlan req : player.builder().plans()){
if(req.breaking) continue;
if(req.bounds(Tmp.r2).overlaps(Tmp.r1)){
drawBreaking(req);
}
}
for(BuildRequest req : selectRequests){
for(BuildPlan req : selectRequests){
if(req.breaking) continue;
if(req.bounds(Tmp.r2).overlaps(Tmp.r1)){
drawBreaking(req);
@@ -533,10 +533,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
}
protected void flushSelectRequests(Seq<BuildRequest> requests){
for(BuildRequest req : requests){
protected void flushSelectRequests(Seq<BuildPlan> requests){
for(BuildPlan req : requests){
if(req.block != null && validPlace(req.x, req.y, req.block, req.rotation)){
BuildRequest other = getRequest(req.x, req.y, req.block.size, null);
BuildPlan other = getRequest(req.x, req.y, req.block.size, null);
if(other == null){
selectRequests.add(req.copy());
}else if(!other.breaking && other.x == req.x && other.y == req.y && other.block.size == req.block.size){
@@ -547,16 +547,16 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
}
protected void flushRequests(Seq<BuildRequest> requests){
for(BuildRequest req : requests){
protected void flushRequests(Seq<BuildPlan> requests){
for(BuildPlan req : requests){
if(req.block != null && validPlace(req.x, req.y, req.block, req.rotation)){
BuildRequest copy = req.copy();
BuildPlan copy = req.copy();
player.builder().addBuild(copy);
}
}
}
protected void drawOverRequest(BuildRequest request){
protected void drawOverRequest(BuildPlan request){
boolean valid = validPlace(request.x, request.y, request.block, request.rotation);
Draw.reset();
@@ -566,7 +566,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Draw.reset();
}
protected void drawRequest(BuildRequest request){
protected void drawRequest(BuildPlan request){
request.block.drawRequest(request, allRequests(), validPlace(request.x, request.y, request.block, request.rotation));
if(request.block.saveConfig && request.block.lastConfig != null && !request.hasConfig){
@@ -604,7 +604,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
if(!flush){
tryBreakBlock(wx, wy);
}else if(validBreak(tile.x, tile.y) && !selectRequests.contains(r -> r.tile() != null && r.tile() == tile)){
selectRequests.add(new BuildRequest(tile.x, tile.y));
selectRequests.add(new BuildPlan(tile.x, tile.y));
}
}
}
@@ -612,9 +612,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
//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.builder().requests().iterator();
Iterator<BuildPlan> it = player.builder().plans().iterator();
while(it.hasNext()){
BuildRequest req = it.next();
BuildPlan req = it.next();
if(!req.breaking && req.bounds(Tmp.r2).overlaps(Tmp.r1)){
it.remove();
}
@@ -622,7 +622,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
it = selectRequests.iterator();
while(it.hasNext()){
BuildRequest req = it.next();
BuildPlan req = it.next();
if(!req.breaking && req.bounds(Tmp.r2).overlaps(Tmp.r1)){
it.remove();
}
@@ -643,7 +643,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
lineRequests.clear();
iterateLine(x1, y1, x2, y2, l -> {
rotation = l.rotation;
BuildRequest req = new BuildRequest(l.x, l.y, l.rotation, block);
BuildPlan req = new BuildPlan(l.x, l.y, l.rotation, block);
req.animScale = 1f;
lineRequests.add(req);
});
@@ -898,8 +898,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
return validPlace(x, y, type, rotation, null);
}
public boolean validPlace(int x, int y, Block type, int rotation, BuildRequest ignore){
for(BuildRequest req : player.builder().requests()){
public boolean validPlace(int x, int y, Block type, int rotation, BuildPlan ignore){
for(BuildPlan req : player.builder().plans()){
if(req != ignore
&& !req.breaking
&& req.block.bounds(req.x, req.y, Tmp.r1).overlaps(type.bounds(x, y, Tmp.r2))
@@ -915,18 +915,18 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
}
public void placeBlock(int x, int y, Block block, int rotation){
BuildRequest req = getRequest(x, y);
BuildPlan req = getRequest(x, y);
if(req != null){
player.builder().requests().remove(req);
player.builder().plans().remove(req);
}
player.builder().addBuild(new BuildRequest(x, y, rotation, block));
player.builder().addBuild(new BuildPlan(x, y, rotation, block));
}
public void breakBlock(int x, int y){
Tile tile = world.tile(x, y);
//TODO hacky
if(tile != null && tile.entity != null) tile = tile.entity.tile();
player.builder().addBuild(new BuildRequest(tile.x, tile.y));
player.builder().addBuild(new BuildPlan(tile.x, tile.y));
}
public void drawArrow(Block block, int x, int y, int rotation){

View File

@@ -48,7 +48,7 @@ public class MobileInput extends InputHandler implements GestureListener{
private float shiftDeltaX, shiftDeltaY;
/** Place requests to be removed. */
private Seq<BuildRequest> removals = new Seq<>();
private Seq<BuildPlan> removals = new Seq<>();
/** Whether or not the player is currently shifting all placed tiles. */
private boolean selecting;
/** Whether the player is currently in line-place mode. */
@@ -58,7 +58,7 @@ public class MobileInput extends InputHandler implements GestureListener{
/** Whether no recipe was available when switching to break mode. */
private Block lastBlock;
/** Last placed request. Used for drawing block overlay. */
private BuildRequest lastPlaced;
private BuildPlan lastPlaced;
/** Down tracking for panning.*/
private boolean down = false;
@@ -97,7 +97,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 : selectRequests){
for(BuildPlan req : selectRequests){
Tile other = req.tile();
if(other == null || req.breaking) continue;
@@ -110,7 +110,7 @@ public class MobileInput extends InputHandler implements GestureListener{
}
}
for(BuildRequest req : player.builder().requests()){
for(BuildPlan req : player.builder().plans()){
Tile other = world.tile(req.x, req.y);
if(other == null || req.breaking) continue;
@@ -126,11 +126,11 @@ public class MobileInput extends InputHandler implements GestureListener{
}
/** Returns the selection request that overlaps this tile, or null. */
BuildRequest getRequest(Tile tile){
BuildPlan getRequest(Tile tile){
r2.setSize(tilesize);
r2.setCenter(tile.worldx(), tile.worldy());
for(BuildRequest req : selectRequests){
for(BuildPlan req : selectRequests){
Tile other = req.tile();
if(other == null) continue;
@@ -149,7 +149,7 @@ public class MobileInput extends InputHandler implements GestureListener{
return null;
}
void removeRequest(BuildRequest request){
void removeRequest(BuildPlan request){
selectRequests.remove(request, true);
if(!request.breaking){
removals.add(request);
@@ -204,20 +204,20 @@ public class MobileInput extends InputHandler implements GestureListener{
//confirm button
table.button(Icon.ok, Styles.clearPartiali, () -> {
for(BuildRequest request : selectRequests){
for(BuildPlan request : selectRequests){
Tile tile = request.tile();
//actually place/break all selected blocks
if(tile != null){
if(!request.breaking){
if(validPlace(request.x, request.y, request.block, request.rotation)){
BuildRequest other = getRequest(request.x, request.y, request.block.size, null);
BuildRequest copy = request.copy();
BuildPlan other = getRequest(request.x, request.y, request.block.size, null);
BuildPlan copy = request.copy();
if(other == null){
player.builder().addBuild(copy);
}else if(!other.breaking && other.x == request.x && other.y == request.y && other.block.size == request.block.size){
player.builder().requests().remove(other);
player.builder().plans().remove(other);
player.builder().addBuild(copy);
}
}
@@ -278,7 +278,7 @@ public class MobileInput extends InputHandler implements GestureListener{
Lines.stroke(1f);
//draw removals
for(BuildRequest request : removals){
for(BuildPlan request : removals){
Tile tile = request.tile();
if(tile == null) continue;
@@ -293,7 +293,7 @@ public class MobileInput extends InputHandler implements GestureListener{
}
//draw list of requests
for(BuildRequest request : selectRequests){
for(BuildPlan request : selectRequests){
Tile tile = request.tile();
if(tile == null) continue;
@@ -333,7 +333,7 @@ public class MobileInput extends InputHandler implements GestureListener{
if(mode == placing && block != null){
//draw placing
for(int i = 0; i < lineRequests.size; i++){
BuildRequest request = lineRequests.get(i);
BuildPlan request = lineRequests.get(i);
if(i == lineRequests.size - 1 && request.block.rotate){
drawArrow(block, request.x, request.y, request.rotation);
}
@@ -376,7 +376,7 @@ public class MobileInput extends InputHandler implements GestureListener{
}
@Override
protected void drawRequest(BuildRequest request){
protected void drawRequest(BuildPlan request){
if(request.tile() == null) return;
brequest.animScale = request.animScale = Mathf.lerpDelta(request.animScale, 1f, 0.1f);
@@ -551,10 +551,10 @@ 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
selectRequests.add(lastPlaced = new BuildRequest(cursor.x, cursor.y, rotation, block));
selectRequests.add(lastPlaced = new BuildPlan(cursor.x, cursor.y, rotation, block));
}else if(mode == breaking && validBreak(linked.x,linked.y) && !hasRequest(linked)){
//add to selection queue if it's a valid BREAK position
selectRequests.add(new BuildRequest(linked.x, linked.y));
selectRequests.add(new BuildPlan(linked.x, linked.y));
}else if(!canTapPlayer(worldx, worldy) && !tileTapped(linked.entity)){
tryBeginMine(cursor);
}
@@ -659,7 +659,7 @@ public class MobileInput extends InputHandler implements GestureListener{
//remove place requests that have disappeared
for(int i = removals.size - 1; i >= 0; i--){
BuildRequest request = removals.get(i);
BuildPlan request = removals.get(i);
if(request.animScale <= 0.0001f){
removals.remove(i);
@@ -720,7 +720,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 : selectRequests){
for(BuildPlan req : selectRequests){
if(req.breaking) continue; //don't shift removal requests
req.x += shiftedX;
req.y += shiftedY;