Nana can't stop phasing through walls
Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
a2b0648074
commit
7161b5ffc9
BIN
maps/world1.map
BIN
maps/world1.map
Binary file not shown.
6
src/sig/map/CollisionType.java
Normal file
6
src/sig/map/CollisionType.java
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package sig.map;
|
||||||
|
|
||||||
|
public enum CollisionType {
|
||||||
|
BLOCK,
|
||||||
|
NONE
|
||||||
|
}
|
@ -1,12 +1,12 @@
|
|||||||
package sig.map;
|
package sig.map;
|
||||||
|
|
||||||
public enum Tile {
|
public enum Tile {
|
||||||
VOID(0,0,true), //File is populated by 0s by default. This represents the void.
|
VOID(0,0,true,CollisionType.NONE), //File is populated by 0s by default. This represents the void.
|
||||||
WALL(0,0),
|
WALL(0,0,CollisionType.BLOCK),
|
||||||
FLOOR(1,0),
|
FLOOR(1,0,CollisionType.BLOCK),
|
||||||
PLATFORM_LEDGE(2,0),
|
PLATFORM_LEDGE(2,0,CollisionType.BLOCK),
|
||||||
INVISIBLE_WALL(0,0,true),
|
INVISIBLE_WALL(0,0,true,CollisionType.BLOCK),
|
||||||
HIGHLIGHTED_TILE(3,0),
|
HIGHLIGHTED_TILE(3,0,CollisionType.BLOCK),
|
||||||
;
|
;
|
||||||
|
|
||||||
final public static int TILE_WIDTH=32;
|
final public static int TILE_WIDTH=32;
|
||||||
@ -14,7 +14,20 @@ public enum Tile {
|
|||||||
|
|
||||||
int spriteSheetX,spriteSheetY;
|
int spriteSheetX,spriteSheetY;
|
||||||
boolean invisible;
|
boolean invisible;
|
||||||
|
CollisionType collision;
|
||||||
|
|
||||||
|
public boolean isInvisible() {
|
||||||
|
return invisible;
|
||||||
|
}
|
||||||
|
public void setInvisible(boolean invisible) {
|
||||||
|
this.invisible = invisible;
|
||||||
|
}
|
||||||
|
public CollisionType getCollision() {
|
||||||
|
return collision;
|
||||||
|
}
|
||||||
|
public void setCollision(CollisionType collision) {
|
||||||
|
this.collision = collision;
|
||||||
|
}
|
||||||
int tileWidth=TILE_WIDTH,tileHeight=TILE_HEIGHT;
|
int tileWidth=TILE_WIDTH,tileHeight=TILE_HEIGHT;
|
||||||
/*Tile(int spriteSheetX,int spriteSheetY,int tileWidth,int tileHeight) {
|
/*Tile(int spriteSheetX,int spriteSheetY,int tileWidth,int tileHeight) {
|
||||||
this.spriteSheetX=spriteSheetX;
|
this.spriteSheetX=spriteSheetX;
|
||||||
@ -22,13 +35,14 @@ public enum Tile {
|
|||||||
this.tileWidth=tileWidth;
|
this.tileWidth=tileWidth;
|
||||||
this.tileHeight=tileHeight;
|
this.tileHeight=tileHeight;
|
||||||
}*/
|
}*/
|
||||||
Tile(int spriteSheetX,int spriteSheetY,boolean invisible) {
|
Tile(int spriteSheetX,int spriteSheetY,boolean invisible, CollisionType collision) {
|
||||||
this.spriteSheetX=spriteSheetX;
|
this.spriteSheetX=spriteSheetX;
|
||||||
this.spriteSheetY=spriteSheetY;
|
this.spriteSheetY=spriteSheetY;
|
||||||
this.invisible=invisible;
|
this.invisible=invisible;
|
||||||
|
this.collision=collision;
|
||||||
}
|
}
|
||||||
Tile(int spriteSheetX,int spriteSheetY) {
|
Tile(int spriteSheetX,int spriteSheetY, CollisionType collision) {
|
||||||
this(spriteSheetX, spriteSheetY, false);
|
this(spriteSheetX, spriteSheetY, false, collision);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSpriteSheetX() {
|
public int getSpriteSheetX() {
|
||||||
|
@ -45,7 +45,7 @@ public class LevelRenderer extends Object{
|
|||||||
Map.SaveMap(RabiClone.CURRENT_MAP);
|
Map.SaveMap(RabiClone.CURRENT_MAP);
|
||||||
System.out.println("Map saved");
|
System.out.println("Map saved");
|
||||||
}
|
}
|
||||||
setY(RabiClone.player.getY());
|
setY(RabiClone.player.getY()-RabiClone.BASE_HEIGHT*(2/3d));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,12 +4,14 @@ import sig.RabiClone;
|
|||||||
import sig.engine.Object;
|
import sig.engine.Object;
|
||||||
import sig.engine.Panel;
|
import sig.engine.Panel;
|
||||||
import sig.engine.Sprite;
|
import sig.engine.Sprite;
|
||||||
|
import sig.map.CollisionType;
|
||||||
|
import sig.map.Tile;
|
||||||
|
|
||||||
public class Player extends Object{
|
public class Player extends Object{
|
||||||
double y_acceleration = 20;
|
double y_acceleration = 15;
|
||||||
double x_acceleration = 0;
|
double x_acceleration = 0;
|
||||||
double x_velocity = 0;
|
double x_velocity = 0;
|
||||||
double y_velocity = -4;
|
double y_velocity = 5;
|
||||||
|
|
||||||
public Player(Panel panel) {
|
public Player(Panel panel) {
|
||||||
super(panel);
|
super(panel);
|
||||||
@ -23,8 +25,24 @@ public class Player extends Object{
|
|||||||
public void update(double updateMult) {
|
public void update(double updateMult) {
|
||||||
y_velocity += y_acceleration*updateMult;
|
y_velocity += y_acceleration*updateMult;
|
||||||
double displacement = y_velocity*updateMult;
|
double displacement = y_velocity*updateMult;
|
||||||
|
boolean is_collision = false;
|
||||||
|
for(int i=0;i<4;i++){
|
||||||
|
double check_distance = (displacement/4)*(i+1);
|
||||||
|
Tile checked_tile_top = RabiClone.CURRENT_MAP.getTile((int)getX()/Tile.TILE_WIDTH, (int)(getY()+check_distance)/Tile.TILE_HEIGHT);
|
||||||
|
Tile checked_tile_bottom = RabiClone.CURRENT_MAP.getTile((int)(getX()+getSprite().getWidth())/Tile.TILE_WIDTH, (int)(getY()+getSprite().getHeight()+check_distance)/Tile.TILE_HEIGHT);
|
||||||
|
//System.out.println((int)getX()/Tile.TILE_WIDTH);
|
||||||
|
if(checked_tile_bottom.getCollision()==CollisionType.BLOCK){
|
||||||
|
setY((getY()+check_distance)+getSprite().getHeight()/2);
|
||||||
|
y_acceleration = 0;
|
||||||
|
y_velocity = 0;
|
||||||
|
is_collision=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!is_collision){
|
||||||
this.setY(this.getY()+displacement);
|
this.setY(this.getY()+displacement);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(int[] p) {
|
public void draw(int[] p) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user