side collision tests

Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com>
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
main
sigonasr2 3 years ago
parent fb8ee6c991
commit 9e9addad53
  1. BIN
      maps/world1.map
  2. 15
      src/sig/objects/LevelRenderer.java
  3. 66
      src/sig/objects/Player.java

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…
Cancel
Save