Create a method to handle adding collisions for entities

Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com>
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
main
sigonasr2 3 years ago
parent 2cc1292946
commit fb8ee6c991
  1. 8
      src/sig/engine/Rectangle.java
  2. 8
      src/sig/engine/objects/CollisionEntity.java
  3. 2
      src/sig/engine/objects/GameEntity.java
  4. 12
      src/sig/engine/objects/Object.java
  5. 16
      src/sig/objects/LevelRenderer.java
  6. 15
      src/sig/objects/Player.java

@ -14,6 +14,10 @@ public class Rectangle {
return x; return x;
} }
public int getX2() {
return x+w;
}
public void setX(int x) { public void setX(int x) {
this.x = x; this.x = x;
} }
@ -22,6 +26,10 @@ public class Rectangle {
return y; return y;
} }
public int getY2() {
return y+h;
}
public void setY(int y) { public void setY(int y) {
this.y = y; this.y = y;
} }

@ -0,0 +1,8 @@
package sig.engine.objects;
import sig.engine.Rectangle;
public interface CollisionEntity {
Rectangle getCollisionBounds();
void setCollisionBounds(Rectangle bounds);
}

@ -1,4 +1,4 @@
package sig.engine; package sig.engine.objects;
public interface GameEntity { public interface GameEntity {
public void update(double updateMult); public void update(double updateMult);

@ -6,11 +6,11 @@ import sig.engine.Action;
import sig.engine.Alpha; import sig.engine.Alpha;
import sig.engine.AnimatedSprite; import sig.engine.AnimatedSprite;
import sig.engine.Font; import sig.engine.Font;
import sig.engine.GameEntity;
import sig.engine.KeyBind; import sig.engine.KeyBind;
import sig.engine.MouseScrollValue; import sig.engine.MouseScrollValue;
import sig.engine.PaletteColor; import sig.engine.PaletteColor;
import sig.engine.Panel; import sig.engine.Panel;
import sig.engine.Rectangle;
import sig.engine.Sprite; import sig.engine.Sprite;
import sig.engine.String; import sig.engine.String;
import sig.engine.Transform; import sig.engine.Transform;
@ -19,6 +19,16 @@ public abstract class Object implements GameEntity{
double x,y; double x,y;
Sprite spr; Sprite spr;
Panel panel; Panel panel;
Rectangle collisionBox;
public Rectangle getCollisionBox() {
return collisionBox;
}
public void setCollisionBox(Rectangle collisionBox) {
this.collisionBox = collisionBox;
}
public Panel getPanel() { public Panel getPanel() {
return panel; return panel;
} }

@ -31,6 +31,19 @@ public class LevelRenderer extends Object{
} }
private void CreateCollisionGrid() { 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++) { 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) { if (y<0||y>Map.MAP_HEIGHT) {
continue; continue;
@ -79,10 +92,9 @@ public class LevelRenderer extends Object{
Draw_Text(4,4,new String(RabiClone.player.x_velocity),Font.PROFONT_12); 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); Draw_Text(4,4+Font.PROFONT_12.getGlyphHeight(),new String(RabiClone.player.slide_time3),Font.PROFONT_12);
} }
//RenderCollisionGrid(p); RenderCollisionGrid(p);
} }
@SuppressWarnings("unused")
private void RenderCollisionGrid(byte[] p) { private void RenderCollisionGrid(byte[] p) {
for (int y=0;y<RabiClone.BASE_HEIGHT;y++) { for (int y=0;y<RabiClone.BASE_HEIGHT;y++) {
for (int x=0;x<RabiClone.BASE_WIDTH;x++) { for (int x=0;x<RabiClone.BASE_WIDTH;x++) {

@ -3,8 +3,10 @@ package sig.objects;
import sig.RabiClone; import sig.RabiClone;
import sig.engine.Action; import sig.engine.Action;
import sig.engine.Panel; import sig.engine.Panel;
import sig.engine.Rectangle;
import sig.engine.Sprite; import sig.engine.Sprite;
import sig.engine.objects.AnimatedObject; import sig.engine.objects.AnimatedObject;
import sig.engine.objects.CollisionEntity;
import sig.map.CollisionType; import sig.map.CollisionType;
import sig.map.Map; import sig.map.Map;
import sig.map.Tile; import sig.map.Tile;
@ -12,7 +14,7 @@ import sig.map.View;
import sig.objects.actor.State; import sig.objects.actor.State;
import sig.utils.TimeUtils; import sig.utils.TimeUtils;
public class Player extends AnimatedObject { public class Player extends AnimatedObject implements CollisionEntity {
final static double GRAVITY = 1300; final static double GRAVITY = 1300;
final static double NORMAL_FRICTION = 6400; final static double NORMAL_FRICTION = 6400;
final static double NORMAL_JUMP_VELOCITY = -300; final static double NORMAL_JUMP_VELOCITY = -300;
@ -71,6 +73,7 @@ public class Player extends AnimatedObject {
super(Sprite.ERINA, 5, panel); super(Sprite.ERINA, 5, panel);
setX(RabiClone.BASE_WIDTH / 2 - getAnimatedSpr().getWidth() / 2); setX(RabiClone.BASE_WIDTH / 2 - getAnimatedSpr().getWidth() / 2);
setY(RabiClone.BASE_HEIGHT * (2 / 3d) - getAnimatedSpr().getHeight() / 2); setY(RabiClone.BASE_HEIGHT * (2 / 3d) - getAnimatedSpr().getHeight() / 2);
setCollisionBounds(new Rectangle(2,2,28,28));
} }
@Override @Override
@ -524,4 +527,14 @@ public class Player extends AnimatedObject {
+ getY() + "]"; + getY() + "]";
} }
@Override
public Rectangle getCollisionBounds() {
return getCollisionBox();
}
@Override
public void setCollisionBounds(Rectangle bounds) {
setCollisionBox(bounds);
}
} }

Loading…
Cancel
Save