@@ -13,57 +13,81 @@ public class Player extends Entity {
1313 GamePanel gamePanel ;
1414 KeyHandler keyHandler ;
1515
16+ private final String playerPath = "/player/" ;
17+
18+ public final int screenX , screenY ;
19+
20+ //specific player width due to diff size of sprites
21+ //TODO maybe it's better to make this type of constant for whole characters
22+ //because they're also might be different
23+ private static final int PLAYER_WIDTH = 16 ;
24+
1625 public Player (GamePanel gamePanel , KeyHandler keyHandler ) {
1726 this .gamePanel = gamePanel ;
1827 this .keyHandler = keyHandler ;
28+ //camera position
29+ screenX = GamePanel .SCREEN_WIDTH / 2 - (GamePanel .TILE_SIZE / 2 );
30+ screenY = GamePanel .SCREEN_HEIGHT / 2 - (GamePanel .TILE_SIZE / 2 );
31+
32+ solidArea = new Rectangle ();
33+ solidArea .x = 8 ;
34+ solidArea .y = 16 ;
35+ solidAreaDefaultX = solidArea .x ;
36+ solidAreaDefaultY = solidArea .y ;
37+ //boundaries of player
38+ //TODO adjust it if needed
39+ solidArea .width = 26 - PLAYER_WIDTH ;
40+ solidArea .height = 26 ;
41+
1942 setDefaultValues ();
2043 getPlayerImage ();
2144 }
2245
2346 public void setDefaultValues () {
24- x = 100 ;
25- y = 100 ;
26- speed = 3 ;
47+ //player position of player
48+ worldX = GamePanel .TILE_SIZE * 23 ;
49+ worldY = GamePanel .TILE_SIZE * 21 ;
50+ speed = 4 ;
2751 direction = "down" ;
2852 }
2953
3054 public void getPlayerImage () {
3155 try {
3256 up = ImageIO .read (Objects .requireNonNull (
33- getClass ().getResourceAsStream ("/player/ boy_up.png" )));
57+ getClass ().getResourceAsStream (playerPath + " boy_up.png" )));
3458
3559 up1 = ImageIO .read (Objects .requireNonNull (
36- getClass ().getResourceAsStream ("/player/ boy_up_1.png" )));
60+ getClass ().getResourceAsStream (playerPath + " boy_up_1.png" )));
3761
3862 up2 = ImageIO .read (Objects .requireNonNull (
39- getClass ().getResourceAsStream ("/player/ boy_up_2.png" )));
63+ getClass ().getResourceAsStream (playerPath + " boy_up_2.png" )));
4064
4165 down = ImageIO .read (Objects .requireNonNull (
42- getClass ().getResourceAsStream ("/player/ boy_down.png" )));
66+ getClass ().getResourceAsStream (playerPath + " boy_down.png" )));
4367
4468 down1 = ImageIO .read (Objects .requireNonNull (
45- getClass ().getResourceAsStream ("/player/ boy_down_1.png" )));
69+ getClass ().getResourceAsStream (playerPath + " boy_down_1.png" )));
4670
4771 down2 = ImageIO .read (Objects .requireNonNull (
48- getClass ().getResourceAsStream ("/player/ boy_down_2.png" )));
72+ getClass ().getResourceAsStream (playerPath + " boy_down_2.png" )));
4973
5074 left = ImageIO .read (Objects .requireNonNull (
51- getClass ().getResourceAsStream ("/player/ boy_left.png" )));
75+ getClass ().getResourceAsStream (playerPath + " boy_left.png" )));
5276
5377 left1 = ImageIO .read (Objects .requireNonNull (
54- getClass ().getResourceAsStream ("/player/ boy_left_1.png" )));
78+ getClass ().getResourceAsStream (playerPath + " boy_left_1.png" )));
5579
5680 left2 = ImageIO .read (Objects .requireNonNull (
57- getClass ().getResourceAsStream ("/player/boy_left_2 .png" )));
81+ getClass ().getResourceAsStream (playerPath + "boy_left .png" )));
5882
5983 right = ImageIO .read (Objects .requireNonNull (
60- getClass ().getResourceAsStream ("/player/ boy_right.png" )));
84+ getClass ().getResourceAsStream (playerPath + " boy_right.png" )));
6185
6286 right1 = ImageIO .read (Objects .requireNonNull (
63- getClass ().getResourceAsStream ("/player/ boy_right_1.png" )));
87+ getClass ().getResourceAsStream (playerPath + " boy_right_1.png" )));
6488
6589 right2 = ImageIO .read (Objects .requireNonNull (
66- getClass ().getResourceAsStream ("/player/ boy_right_2.png" )));
90+ getClass ().getResourceAsStream (playerPath + " boy_right_2.png" )));
6791
6892 } catch (IOException e ) {
6993 System .err .println ("Error on getting player images!" );
@@ -80,21 +104,29 @@ public void update() {
80104 //use else if to avoid diagonal movement, if it's not needed, use just if
81105 if (keyHandler .upPressed ) {
82106 direction = "up" ;
83- y -= speed ;
84107 } else if (keyHandler .downPressed ) {
85108 direction = "down" ;
86- y += speed ;
87109 } else if (keyHandler .leftPressed ) {
88110 direction = "left" ;
89- x -= speed ;
90111 } else if (keyHandler .rightPressed ) {
91112 direction = "right" ;
92- x += speed ;
93113 }
94-
95- //changing sprites, depends on nums
114+ //Check tile collision
115+ collisionOn = false ;
116+ gamePanel .checkCollision .checkTile (this );
117+
118+ //If collision false, play player move
119+ if (!collisionOn ) {
120+ switch (direction ) {
121+ case "up" -> worldY -= speed ;
122+ case "down" -> worldY += speed ;
123+ case "left" -> worldX -= speed ;
124+ case "right" -> worldX += speed ;
125+ }
126+ }
127+ //Changing sprites, depends on nums
96128 spriteCounter ++;
97- if (spriteCounter <= 13 - speed ) {
129+ if (spriteCounter <= 13 ) {
98130 spriteNum = 1 ;
99131 }
100132 if (spriteCounter > 13 && spriteCounter <= 24 ) {
@@ -105,6 +137,7 @@ public void update() {
105137 }
106138 } else {
107139 standCounter ++;
140+ //timer before the idle anim starts
108141 if (standCounter == 24 ) {
109142 spriteNum = 3 ; // Idle sprite
110143 standCounter = 0 ;
@@ -137,6 +170,7 @@ public void draw(Graphics2D graphics2D) {
137170 if (spriteNum == 3 ) image = right ;
138171 }
139172 }
140- graphics2D .drawImage (image , x , y , GamePanel .TILE_SIZE , GamePanel .TILE_SIZE , null );
173+ //FIXME player width = hardcode
174+ graphics2D .drawImage (image , screenX , screenY , GamePanel .TILE_SIZE - PLAYER_WIDTH , GamePanel .TILE_SIZE , null );
141175 }
142176}
0 commit comments