side collision tests
Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
fb8ee6c991
commit
9e9addad53
BIN
maps/world1.map
BIN
maps/world1.map
Binary file not shown.
@ -31,19 +31,6 @@ public class LevelRenderer extends Object{
|
||||
}
|
||||
|
||||
private void CreateCollisionGrid() {
|
||||
for (int i=0;i<RabiClone.OBJ.size();i++) {
|
||||
Object o = RabiClone.OBJ.get(i);
|
||||
if (o.getCollisionBox()!=null) {
|
||||
for (int yy=o.getCollisionBox().getY();yy<o.getCollisionBox().getY2();yy++) {
|
||||
for (int xx=o.getCollisionBox().getX();xx<o.getCollisionBox().getX2();xx++) {
|
||||
int xpos=(int)(o.getX()-o.getSprite().getWidth()/2-this.getX()+xx),ypos=(int)(o.getY()-o.getSprite().getHeight()/2-this.getY()+yy);
|
||||
if (xpos>=0&&xpos<RabiClone.BASE_WIDTH&&ypos>=0&&ypos<RabiClone.BASE_HEIGHT) {
|
||||
RabiClone.COLLISION[ypos*RabiClone.BASE_WIDTH+xpos]=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int y=(int)(this.getY()/Tile.TILE_HEIGHT);y<(int)(RabiClone.BASE_HEIGHT/Tile.TILE_HEIGHT+this.getY()/Tile.TILE_HEIGHT+1);y++) {
|
||||
if (y<0||y>Map.MAP_HEIGHT) {
|
||||
continue;
|
||||
@ -92,7 +79,7 @@ public class LevelRenderer extends Object{
|
||||
Draw_Text(4,4,new String(RabiClone.player.x_velocity),Font.PROFONT_12);
|
||||
Draw_Text(4,4+Font.PROFONT_12.getGlyphHeight(),new String(RabiClone.player.slide_time3),Font.PROFONT_12);
|
||||
}
|
||||
RenderCollisionGrid(p);
|
||||
//RenderCollisionGrid(p);
|
||||
}
|
||||
|
||||
private void RenderCollisionGrid(byte[] p) {
|
||||
|
@ -362,70 +362,22 @@ public class Player extends AnimatedObject implements CollisionEntity {
|
||||
double displacement_x = x_velocity*updateMult;
|
||||
|
||||
boolean sideCollision = false;
|
||||
for(int i=0;i<4;i++){
|
||||
double check_distance_x = (displacement_x/4)*(i+1);
|
||||
|
||||
Tile checked_tile_top_right = RabiClone.CURRENT_MAP.getTile((int)(getX()+getAnimatedSpr().getWidth()/2-4+check_distance_x)/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2)/Tile.TILE_HEIGHT);
|
||||
Tile checked_tile_top_left = RabiClone.CURRENT_MAP.getTile((int)(getX()-getAnimatedSpr().getWidth()/2+4+check_distance_x)/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2)/Tile.TILE_HEIGHT);
|
||||
Tile checked_tile_bottom_center = RabiClone.CURRENT_MAP.getTile((int)(getX())/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2)/Tile.TILE_HEIGHT);
|
||||
|
||||
if(checked_tile_top_right.getCollision()==CollisionType.BLOCK||checked_tile_top_left.getCollision()==CollisionType.BLOCK){
|
||||
//System.out.println(checked_tile_top_right.getCollision()+"//"+checked_tile_top_left.getCollision());
|
||||
if(checked_tile_bottom_center.getCollision()==CollisionType.SLOPE){
|
||||
} else {
|
||||
if (checked_tile_top_right.getCollision()==CollisionType.BLOCK) {
|
||||
setX(((int)(getX()-getAnimatedSpr().getWidth()/2)/Tile.TILE_WIDTH)*Tile.TILE_WIDTH+Tile.TILE_WIDTH/2+3+check_distance_x);
|
||||
} else {
|
||||
setX(((int)(getX()+getAnimatedSpr().getWidth())/Tile.TILE_WIDTH)*Tile.TILE_WIDTH-Tile.TILE_WIDTH/2-3+check_distance_x);
|
||||
}
|
||||
double startingX=getX();
|
||||
if (displacement_x>0) {
|
||||
for (int x=(int)getX();x<startingX+displacement_x;x++) {
|
||||
if (x==getX()) {
|
||||
continue;
|
||||
}
|
||||
if (RabiClone.COLLISION[(int)((getY()-RabiClone.level_renderer.getY())*RabiClone.BASE_WIDTH+(x-RabiClone.level_renderer.getX()+getCollisionBox().getX2()-getSprite().getWidth()/2))]) {
|
||||
x_acceleration = 0;
|
||||
x_velocity = Math.signum(x_velocity)*0.000001;
|
||||
sideCollision=true;
|
||||
setX(x-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (y_velocity==0) {
|
||||
Tile checked_tile_bottom_right = RabiClone.CURRENT_MAP.getTile((int)(getX()+getAnimatedSpr().getWidth()/2-4)/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2+1)/Tile.TILE_HEIGHT);
|
||||
Tile checked_tile_bottom_left = RabiClone.CURRENT_MAP.getTile((int)(getX()-getAnimatedSpr().getWidth()/2+4)/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2+1)/Tile.TILE_HEIGHT);
|
||||
Tile checked_tile_bottom_center = RabiClone.CURRENT_MAP.getTile((int)(getX())/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2)/Tile.TILE_HEIGHT);
|
||||
|
||||
if (!(checked_tile_bottom_right.getCollision()==CollisionType.BLOCK
|
||||
||checked_tile_bottom_left.getCollision()==CollisionType.BLOCK
|
||||
||checked_tile_bottom_center.getCollision()==CollisionType.SLOPE)) {
|
||||
groundCollision=false;
|
||||
} else {
|
||||
if(checked_tile_bottom_center.getCollision()==CollisionType.SLOPE){
|
||||
moveUpSlope(checked_tile_bottom_center);
|
||||
}
|
||||
groundCollision=true;
|
||||
jumpCount=maxJumpCount;
|
||||
}
|
||||
} else {
|
||||
//System.out.println(x_velocity);
|
||||
//System.out.println(((int)(getX()+getAnimatedSpr().getWidth()/2+displacement_x)/Tile.TILE_WIDTH)+"//"+((int)(getY()+getAnimatedSpr().getHeight()/2)/Tile.TILE_HEIGHT));
|
||||
boolean collisionOccured=false;
|
||||
for(int i=0;i<4;i++){
|
||||
double check_distance_y = (displacement_y/4)*(i+1);
|
||||
Tile checked_tile_bottom_right = RabiClone.CURRENT_MAP.getTile((int)(getX()+getAnimatedSpr().getWidth()/2-4)/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2+check_distance_y)/Tile.TILE_HEIGHT);
|
||||
Tile checked_tile_bottom_left = RabiClone.CURRENT_MAP.getTile((int)(getX()-getAnimatedSpr().getWidth()/2+4)/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2+check_distance_y)/Tile.TILE_HEIGHT);
|
||||
Tile checked_tile_bottom_center = RabiClone.CURRENT_MAP.getTile((int)(getX())/Tile.TILE_WIDTH, (int)(getY()+getAnimatedSpr().getHeight()/2)/Tile.TILE_HEIGHT);
|
||||
if(checked_tile_bottom_center.getCollision()==CollisionType.SLOPE
|
||||
&& getY()+check_distance_y>ySlopeCollisionPoint(checked_tile_bottom_center))
|
||||
{
|
||||
moveUpSlope(checked_tile_bottom_center);
|
||||
collisionOccured = groundCollision(0);
|
||||
break;
|
||||
}
|
||||
//System.out.println((int)getX()/Tile.TILE_WIDTH);
|
||||
if(checked_tile_bottom_right.getCollision()==CollisionType.BLOCK||checked_tile_bottom_left.getCollision()==CollisionType.BLOCK){
|
||||
collisionOccured = groundCollision(check_distance_y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!collisionOccured) {
|
||||
groundCollision=false;
|
||||
}
|
||||
}
|
||||
groundCollision=true;
|
||||
if (!groundCollision){
|
||||
this.setY(this.getY()+displacement_y);
|
||||
y_acceleration = GRAVITY;
|
||||
|
Loading…
x
Reference in New Issue
Block a user