Resolved bottoming out edge cases with collisions. No more empty block bugs.
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
c542d07708
commit
c68177f5f5
BIN
Meteo_Engine.jar
BIN
Meteo_Engine.jar
Binary file not shown.
@ -72,8 +72,8 @@ public class BlockClump {
|
|||||||
g.setColor(new Color(0,255,0,128));
|
g.setColor(new Color(0,255,0,128));
|
||||||
for (int i=0;i<collisionColumnRanges.length;i++) {
|
for (int i=0;i<collisionColumnRanges.length;i++) {
|
||||||
if (collisionColumnRanges[i][0]!=-1) {
|
if (collisionColumnRanges[i][0]!=-1) {
|
||||||
g.drawRect((int)(x+i*block_width)+originX,(int)(originY-y-(block_height*(collisionColumnRanges[i][1]-collisionColumnRanges[i][0]))),block_width,block_height*(collisionColumnRanges[i][1]-collisionColumnRanges[i][0]+1));
|
g.drawRect((int)(x+i*block_width)+originX,(int)(originY-y-(block_height*(collisionColumnRanges[i][1]))),block_width,block_height*(collisionColumnRanges[i][1]-collisionColumnRanges[i][0]+1));
|
||||||
g.drawRect((int)(x+i*block_width)+originX+1,(int)(originY+1-y-(block_height*(collisionColumnRanges[i][1]-collisionColumnRanges[i][0]))),block_width,block_height*(collisionColumnRanges[i][1]-collisionColumnRanges[i][0]+1));
|
g.drawRect((int)(x+i*block_width)+originX+1,(int)(originY+1-y-(block_height*(collisionColumnRanges[i][1]))),block_width,block_height*(collisionColumnRanges[i][1]-collisionColumnRanges[i][0]+1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,19 +63,35 @@ public class Board {
|
|||||||
DestroyOutsideBlocks(blocks);
|
DestroyOutsideBlocks(blocks);
|
||||||
if (checkForMatches(blocks)) {continue;}
|
if (checkForMatches(blocks)) {continue;}
|
||||||
double FUTURE_FALL_POSITION = blocks.y+blocks.yspd+gravity;
|
double FUTURE_FALL_POSITION = blocks.y+blocks.yspd+gravity;
|
||||||
for (int x=0;x<width;x++) {
|
List<CollisionRangeIdentifier> ranges = new ArrayList<CollisionRangeIdentifier>();
|
||||||
|
for (int k=0;k<blocks.collisionColumnRanges.length;k++) {
|
||||||
|
int[] range = blocks.collisionColumnRanges[k];
|
||||||
|
ranges.add(new CollisionRangeIdentifier(k, range));
|
||||||
|
}
|
||||||
|
ranges = ranges.stream().sorted((a,b)->a.range[0]-b.range[0]).collect(Collectors.toList());
|
||||||
|
//System.out.println(ranges);
|
||||||
|
for (int l=0;l<ranges.size();l++) {
|
||||||
|
int x=ranges.get(l).index;
|
||||||
if (blocks.collisionColumnRanges[x][0]!=-1) {
|
if (blocks.collisionColumnRanges[x][0]!=-1) {
|
||||||
for (int j=0;j<blockData.size();j++) {
|
for (int j=0;j<blockData.size();j++) {
|
||||||
BlockClump blocks2 = blockData.get(j);
|
BlockClump blocks2 = blockData.get(j);
|
||||||
if (!blocks.equals(blocks2)&&blocks2.collisionColumnRanges[x][1]!=-1) {
|
if (!blocks.equals(blocks2)&&blocks2.collisionColumnRanges[x][1]!=-1) {
|
||||||
if (FUTURE_FALL_POSITION<blocks2.y) {
|
if (blocks.yspd>0) {
|
||||||
if (FUTURE_FALL_POSITION+blocks.collisionColumnRanges[x][1]*block_height>blocks2.y+(blocks2.collisionColumnRanges[x][0]+1)*block_height) {
|
if (blocks2.y+(blocks2.collisionColumnRanges[x][0])*block_height>FUTURE_FALL_POSITION+(blocks.collisionColumnRanges[x][1])*block_height) {
|
||||||
HandleBlockLand(blocks, x, blocks2.y+(blocks2.collisionColumnRanges[x][0]+1)*block_height);
|
if (FUTURE_FALL_POSITION+(blocks.collisionColumnRanges[x][1])*block_height>blocks2.y+(blocks2.collisionColumnRanges[x][0])*block_height) {
|
||||||
|
HandleBlockLand(blocks, x, blocks2.y+(blocks2.collisionColumnRanges[x][0])*block_height-blocks.maxBlockHeight*block_height);
|
||||||
continue outerloop;
|
continue outerloop;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (FUTURE_FALL_POSITION+blocks.collisionColumnRanges[x][0]*block_height<blocks2.y+(blocks2.collisionColumnRanges[x][1]+1)*block_height) {
|
if (FUTURE_FALL_POSITION+(blocks.collisionColumnRanges[x][0])*block_height<=0) { //Handle reaching the ground.
|
||||||
|
HandleBlockLand(blocks, x, 0);
|
||||||
|
continue outerloop;
|
||||||
|
} else
|
||||||
|
if (blocks2.y<FUTURE_FALL_POSITION+(blocks.collisionColumnRanges[x][0])*block_height) {
|
||||||
|
if (FUTURE_FALL_POSITION+(blocks.collisionColumnRanges[x][0])*block_height<blocks2.y+(blocks2.collisionColumnRanges[x][1]+1)*block_height) {
|
||||||
HandleBlockLand(blocks, x, blocks2.y+(blocks2.collisionColumnRanges[x][1]+1)*block_height);
|
HandleBlockLand(blocks, x, blocks2.y+(blocks2.collisionColumnRanges[x][1]+1)*block_height);
|
||||||
|
System.out.println(ranges);
|
||||||
if (blocks.launched==-1) {
|
if (blocks.launched==-1) {
|
||||||
CombineAToB(blocks,blocks2);
|
CombineAToB(blocks,blocks2);
|
||||||
blocks.launched=-2;
|
blocks.launched=-2;
|
||||||
@ -87,6 +103,7 @@ public class Board {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (FUTURE_FALL_POSITION>0) {
|
if (FUTURE_FALL_POSITION>0) {
|
||||||
blocks.yspd=Math.max(blocks.yspd+gravity,max_fall_spd);
|
blocks.yspd=Math.max(blocks.yspd+gravity,max_fall_spd);
|
||||||
blocks.y+=blocks.yspd;
|
blocks.y+=blocks.yspd;
|
||||||
@ -166,7 +183,7 @@ public class Board {
|
|||||||
b.y-=minY;
|
b.y-=minY;
|
||||||
}
|
}
|
||||||
blockClumpAddList.add(
|
blockClumpAddList.add(
|
||||||
new BlockClump(newClumpBlocks, blocks.x, blocks.y+minY*block_height+4, launch_power, width, 120)
|
new BlockClump(newClumpBlocks, blocks.x, blocks.y+minY*block_height, launch_power, width, 120)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return markedBlocks.size()>0;
|
return markedBlocks.size()>0;
|
||||||
|
16
src/sig/CollisionRangeIdentifier.java
Normal file
16
src/sig/CollisionRangeIdentifier.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package sig;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class CollisionRangeIdentifier {
|
||||||
|
int index;
|
||||||
|
int[] range;
|
||||||
|
CollisionRangeIdentifier(int index,int[] range) {
|
||||||
|
this.index=index;
|
||||||
|
this.range=range;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CollisionRangeIdentifier [index=" + index + ", range=" + Arrays.toString(range) + "]";
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user