Fixing Collisions, added level manager
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 963 B |
After Width: | Height: | Size: 953 B |
After Width: | Height: | Size: 937 B |
After Width: | Height: | Size: 942 B |
After Width: | Height: | Size: 993 B |
After Width: | Height: | Size: 965 B |
After Width: | Height: | Size: 1002 B |
After Width: | Height: | Size: 844 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.0 KiB |
|
@ -1,18 +1,18 @@
|
|||
10000000
|
||||
01101101
|
||||
00000000
|
||||
00000000
|
||||
00010000
|
||||
00010000
|
||||
00010000
|
||||
00010100
|
||||
00000000
|
||||
00000000
|
||||
10000001
|
||||
0000000011000100000000000101010100110100
|
||||
0000000000000000000000000000000000000000000101000000111111111111111111111
|
||||
100000000000000000000000000000000000000000011000001000000000000000000000
|
||||
100000000000000000000000000000000000000000011000001000000000000000000000
|
||||
10000000000000000000010000bb00001000000000010000000000000000000000000
|
||||
10000000000000000000000000b000000000000000010000000000000011111111111111111
|
||||
2333333333333333333333333333333333333333333333341111111111
|
||||
2wwwwwwwwwwwwwwwwe
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd 1
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd 1 1 1 1 1
|
||||
sssssssssssssssssd 1
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd qwe qwe
|
||||
sssssssssssssssssd asd asd
|
||||
sssssssssssssssssd 1 zxc zxc
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd qwwwwwwwwe
|
||||
sssssssssssssssssd qrsssssssstwe
|
||||
sssssssssssssssssd qwwrssssssssssstwe qwe
|
||||
ssssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrsssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrstwwwwww3
|
|
@ -0,0 +1,18 @@
|
|||
2wwwwwwwwwwwwwwwwe
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd 1
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd 1 1 1 1 1
|
||||
sssssssssssssssssd 1
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd
|
||||
sssssssssssssssssd qwe qwe
|
||||
sssssssssssssssssd asd asd
|
||||
sssssssssssssssssd bbb 1 zxc zxc
|
||||
sssssssssssssssssdbbbbbbbbbbbbbbbbbbbbbbb
|
||||
sssssssssssssssssd qwwwwwwwwe
|
||||
sssssssssssssssssd qrsssssssstwe
|
||||
sssssssssssssssssd bbb qwwrssssssssssstwe qwe
|
||||
ssssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrsssssssssssssssstwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrstwwwwww3
|
|
@ -138,10 +138,8 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
|||
for (Tile i : map) {
|
||||
i.update();
|
||||
}
|
||||
//force player to remain on screen
|
||||
if (player.y <= 0) {
|
||||
player.y = 0;
|
||||
}
|
||||
//force player to remain on screen (For the most part)
|
||||
|
||||
if (player.y >= GAME_HEIGHT - Player.PLAYER_HEIGHT) {
|
||||
player.y = GAME_HEIGHT - Player.PLAYER_HEIGHT;
|
||||
player.yVelocity = 0;
|
||||
|
@ -165,6 +163,7 @@ public class GamePanel extends JPanel implements Runnable, KeyListener{
|
|||
|
||||
//run() method is what makes the game continue running without end. It calls other methods to move objects, check for collision, and update the screen
|
||||
public void run(){
|
||||
LevelManager.setLevel(1);
|
||||
try {
|
||||
MapReader.inputMap(map, "saves/Level1.txt");
|
||||
} catch (IOException | SpriteException e) {
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
public class LevelManager {
|
||||
public static int level = 1;
|
||||
public static int xSpawn = 0;
|
||||
public static int ySpawn = 600;
|
||||
|
||||
public static String filePath;
|
||||
public static void setLevel(int level){
|
||||
LevelManager.level = level;
|
||||
if(level == 1){
|
||||
xSpawn = 0;
|
||||
ySpawn = 600;
|
||||
filePath = "saves/Level1.txt";
|
||||
} else if(level == 2){
|
||||
xSpawn = 0;
|
||||
ySpawn = 600;
|
||||
filePath = "saves/Level2.txt";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,27 +6,56 @@ public class MapReader {
|
|||
//Input game map
|
||||
/*
|
||||
1: Normal Grass
|
||||
2: Left Grass
|
||||
3: Middle Grass
|
||||
4: Right Grass
|
||||
2: Left Grass:
|
||||
3: Right Grass:
|
||||
Grass Tiling:
|
||||
qwe
|
||||
asd
|
||||
zxc
|
||||
!: Slime
|
||||
Grass:
|
||||
*/
|
||||
public static void inputMap(ArrayList<Tile> map, String filePath) throws IOException, SpriteException {
|
||||
String file = FileManager.readFile(filePath);
|
||||
int x = -GamePanel.WIDTH*Tile.length;
|
||||
String file = FileManager.readFile(LevelManager.filePath);
|
||||
int x = -GamePanel.GAME_WIDTH/2 + Tile.length;
|
||||
int y = 0;
|
||||
for(int i=0; i<file.length(); i++){
|
||||
if(file.charAt(i)=='\n'){
|
||||
y+=Tile.length;
|
||||
x= -GamePanel.WIDTH*Tile.length;
|
||||
x= -GamePanel.GAME_WIDTH/2;
|
||||
}
|
||||
else if(file.charAt(i)=='1'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grass.png")));
|
||||
} else if(file.charAt(i)=='2'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassLeft.png")));
|
||||
} else if(file.charAt(i)=='3'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassMid.png")));
|
||||
} else if(file.charAt(i)=='4'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassRight.png")));
|
||||
} else if(file.charAt(i)=='q'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassTopLeft.png")));
|
||||
} else if(file.charAt(i)=='w'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassMid.png")));
|
||||
} else if(file.charAt(i)=='e'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassTopRight.png")));
|
||||
} else if(file.charAt(i)=='a'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassMiddleLeft.png")));
|
||||
} else if(file.charAt(i)=='s'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassCenter.png")));
|
||||
} else if(file.charAt(i)=='d'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassMiddleRight.png")));
|
||||
} else if(file.charAt(i)=='z'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassBottomLeft.png")));
|
||||
} else if(file.charAt(i)=='x'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassBottomMiddle.png")));
|
||||
} else if(file.charAt(i)=='c'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/grassBottomRight.png")));
|
||||
} else if(file.charAt(i)=='r'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/cornerTopLeft.png")));
|
||||
} else if(file.charAt(i)=='t'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/cornerTopRight.png")));
|
||||
} else if(file.charAt(i)=='f'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/cornerBottomLeft.png")));
|
||||
} else if(file.charAt(i)=='g'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/terrain/cornerBottomRight.png")));
|
||||
} else if(file.charAt(i)=='b'){
|
||||
map.add(new SingleTile(x,y, GamePanel.getImage("img/tiles/boxes/box.png")));
|
||||
map.get(map.size()-1).collision = false;
|
||||
|
|
|
@ -31,11 +31,51 @@ public class NonPlayer extends GenericSprite {
|
|||
|
||||
xVelocity = 3;
|
||||
}
|
||||
private boolean collide(Tile tile, double x, double y){
|
||||
if(!tile.collision){
|
||||
return false;
|
||||
}
|
||||
if(x+npcWidth>tile.x&&x<tile.x+Tile.length&&y-tile.y<Tile.length&&tile.y-y<npcHeight){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public boolean canUpdate(double x, double y){
|
||||
boolean canUpdate = true;
|
||||
for(Tile i: GamePanel.map){
|
||||
if(collide(i,this.x+x,this.y+y)){
|
||||
canUpdate = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return canUpdate;
|
||||
}
|
||||
|
||||
|
||||
public void move(){
|
||||
x += (int)xVelocity;
|
||||
y += (int)yVelocity;
|
||||
if(!canUpdate(xVelocity, 0)){
|
||||
xVelocity*=-1;
|
||||
}
|
||||
if(!canUpdate(0, yVelocity)){
|
||||
if(yVelocity>0){
|
||||
while(canUpdate(0,1)){
|
||||
y+=1;
|
||||
}
|
||||
isGrounded = true;
|
||||
} else if(yVelocity<0){
|
||||
while(canUpdate(0,-1)){
|
||||
y-=1;
|
||||
}
|
||||
}
|
||||
yVelocity = 0;
|
||||
}
|
||||
if(canUpdate(0, yVelocity)) {
|
||||
y = y + (int) yVelocity;
|
||||
x = x + (int) xVelocity;
|
||||
}
|
||||
if(!isGrounded) {
|
||||
yVelocity += 0.3;
|
||||
}
|
||||
capSpeed();
|
||||
}
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ import java.io.IOException;
|
|||
|
||||
public class Player extends GenericSprite {
|
||||
public final int SPEED = 5;
|
||||
public static final int PLAYER_WIDTH = 72;
|
||||
public static final int PLAYER_HEIGHT = 97;
|
||||
public static final int PLAYER_WIDTH = 64;
|
||||
public static final int PLAYER_HEIGHT = 94;
|
||||
public int lastXDirection, lastYDirection, lastFrame;
|
||||
public int upKey, downKey, rightKey, leftKey;
|
||||
|
||||
|
@ -72,11 +72,6 @@ public class Player extends GenericSprite {
|
|||
}
|
||||
|
||||
private boolean collide(Tile tile, double x, double y){
|
||||
// if(tile.realX-x>PLAYER_WIDTH&&x-tile.realX<Tile.length){
|
||||
// System.out.println("Ligma");
|
||||
// return true;
|
||||
// }
|
||||
// System.out.println("")
|
||||
if(!tile.collision){
|
||||
return false;
|
||||
}
|
||||
|
@ -87,7 +82,7 @@ public class Player extends GenericSprite {
|
|||
}
|
||||
// calls parent
|
||||
|
||||
private boolean canUpdate(double x, double y){
|
||||
public boolean canUpdate(double x, double y){
|
||||
boolean canUpdate = true;
|
||||
for(Tile i: GamePanel.map){
|
||||
if(collide(i,this.x+x,this.y+y)){
|
||||
|
@ -99,6 +94,9 @@ public class Player extends GenericSprite {
|
|||
}
|
||||
public void move(){
|
||||
|
||||
if(canUpdate(xVelocity, 0)&&canUpdate(0, yVelocity)&&!canUpdate(xVelocity, yVelocity)){
|
||||
GamePanel.camera.x += -Math.signum(xVelocity);
|
||||
}
|
||||
if(!canUpdate(xVelocity, 0)){
|
||||
int updateAmount = 0;
|
||||
if(xVelocity>0){
|
||||
|
@ -113,13 +111,14 @@ public class Player extends GenericSprite {
|
|||
GamePanel.camera.x+=updateAmount+1;
|
||||
}
|
||||
xVelocity = 0;
|
||||
} if(!canUpdate(0, yVelocity)){
|
||||
}
|
||||
if(!canUpdate(0, yVelocity)){
|
||||
if(yVelocity>0){
|
||||
while(canUpdate(0,1)){
|
||||
y+=1;
|
||||
}
|
||||
isGrounded = true;
|
||||
} else if(yVelocity>0){
|
||||
} else if(yVelocity<0){
|
||||
while(canUpdate(0,-1)){
|
||||
y-=1;
|
||||
}
|
||||
|
@ -148,6 +147,9 @@ public class Player extends GenericSprite {
|
|||
xVelocity*=0.9;
|
||||
if(!isGrounded) {
|
||||
yVelocity += 0.3;
|
||||
if(downPressed){
|
||||
yVelocity+=1;
|
||||
}
|
||||
}
|
||||
capSpeed();
|
||||
}
|
||||
|
@ -155,13 +157,13 @@ public class Player extends GenericSprite {
|
|||
public int draw(Graphics g, int frame) {
|
||||
frame %= spriteArray[0][0].length;
|
||||
if (!upPressed && !downPressed && !leftPressed && !rightPressed) {
|
||||
g.drawImage(spriteArray[lastXDirection][lastYDirection][0], x, y, null);
|
||||
g.drawImage(spriteArray[lastXDirection][lastYDirection][0], x-6, y, null);
|
||||
return 0;
|
||||
} else {
|
||||
lastXDirection = (int)(Math.signum(xVelocity) + 1) / 2;
|
||||
lastYDirection = (int)(Math.signum(yVelocity) + 1) / 2;
|
||||
lastFrame = frame;
|
||||
g.drawImage(spriteArray[lastXDirection][lastYDirection][frame], x, y, null);
|
||||
g.drawImage(spriteArray[lastXDirection][lastYDirection][frame], x-6, y, null);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
|