diff --git a/src/NonPlayer.java b/src/NonPlayer.java
index 70f6714..9176d10 100644
--- a/src/NonPlayer.java
+++ b/src/NonPlayer.java
@@ -1,6 +1,5 @@
-/* Eric Li, ICS4U, Completed 6/19/2022
-
-NonPlayer class defines behaviour for enemies and characters that are not controlled by the player */
+// Eric Li, Charlie Zhao, ICS4U, Completed 6/19/2022
+// the NonPlayer class defines behaviour for enemies and characters that are not controlled by the player
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
@@ -9,25 +8,24 @@ import java.io.IOException;
import java.io.Serializable;
public class NonPlayer extends GenericSprite implements Serializable {
- // please note that these are not static, in contrast to the player class, as different enemies will have different heights
+ // please note that these are not static, in contrast to the player class
+ // as different enemies have different heights
public int npcWidth;
public int npcHeight;
public int currentXDirection, currentYDirection;
public boolean isDead;
public int realX;
-
public int health;
public double fadeCounter;
public BufferedImageWrapper[][][] spriteArray;
- public NonPlayer(int x, int y, BufferedImageWrapper[][][] sprites, int npcWidth, int npcHeight, int health) throws UnsupportedAudioFileException, LineUnavailableException, IOException {
+
+ public NonPlayer(int x, int y, BufferedImageWrapper[][][] sprites, int npcWidth, int npcHeight, int health) {
super(x, y, npcHeight, npcWidth);
- // bump = new Sound("sound/bump.wav");
this.health = health;
spriteArray = sprites;
- // TODO: remove
this.npcWidth = npcWidth;
WIDTH = npcWidth;
this.npcHeight = npcHeight;
@@ -37,63 +35,73 @@ public class NonPlayer extends GenericSprite implements Serializable {
fadeCounter = 1;
}
-
+ // check if the player is colliding with the enemy
public boolean collidePlayer(Player p){
- if(realX+npcWidth>p.x&&realX
p.x && realX < p.x + Player.PLAYER_WIDTH && y - p.y < Player.PLAYER_HEIGHT && p.y - y < npcHeight;
}
-
+ // update the realX value of the enemy (this is dependent on camera.x and is the x position seen by the player)
public void update(){
realX = x-GameFrame.game.camera.x;
}
+
+ // move the enemy
public void move() throws UnsupportedAudioFileException, LineUnavailableException, IOException {
+ // don't move the enemy if the enemy is dead
if (isDead) {
xVelocity = 0;
- // return;
}
+ // have the enemy go the opposite direction if the enemy would be colliding with a tile
if(!canUpdate(xVelocity, 0)){
xVelocity*=-1;
}
+ // have the enemy stop falling if they are on the ground
if(!canUpdate(0, yVelocity)){
if(yVelocity>0){
while(canUpdate(0,1)){
y+=1;
}
isGrounded = true;
- } else if(yVelocity<0){
+ } else if(yVelocity<0){ // have the enemy stop moving up if they hit something above them
while(canUpdate(0,-1)){
y-=1;
}
}
yVelocity = 0;
}
+ // move the object yVelocity and xVelocity pixels away from their current position
if(canUpdate(0, yVelocity)) {
y = y + (int) yVelocity;
x = x + (int) xVelocity;
}
+ // simulate gravity
if(!isGrounded) {
yVelocity += 0.3;
}
+ // cap maximum speed
capSpeed();
}
public int draw(Graphics g, int frame) {
+ // if the enemy is not dead, animate the enemy sprite by cycling through the frames of the enemy
if (!isDead) {
// last frame is reserved for death animation
frame %= spriteArray[0][0].length - 1;
+ // save the current x and y directions so the enemy is facing the right way if it dies
currentXDirection = (int)(Math.signum(xVelocity) + 1) / 2;
currentYDirection = (int)(Math.signum(yVelocity) + 1) / 2;
// x-GameFrame.game.camera.x is used as the camera doesn't follow NPCs
+ // draw the enemy
g.drawImage(spriteArray[currentXDirection][currentYDirection][frame].image, x-GameFrame.game.camera.x, y, null);
return 1;
} else {
+ // fade the enemy slowly by overlaying a composite on the enemy
((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)fadeCounter));
+ // draw faded enemy
g.drawImage(spriteArray[currentXDirection][currentYDirection][spriteArray[0][0].length-1].image, x-GameFrame.game.camera.x, (int)(y+HEIGHT/1.7), null);
// reset composite to not affect other sprites being drawn
((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1));
+ // increase the amount of fade every tick to a maximum fade amount of 100% (total transparency)
fadeCounter = Math.max(0, fadeCounter-0.01);
return 0;
}
diff --git a/src/Particle.java b/src/Particle.java
index c0734b0..b54f1e9 100644
--- a/src/Particle.java
+++ b/src/Particle.java
@@ -1,10 +1,11 @@
+// Eric Li, Charlie Zhao, ICS4U, Finished 6/18/22
+// create particles when the character jumps or on top of lava
+
import java.awt.*;
import java.io.IOException;
import java.io.Serializable;
public class Particle extends GenericSprite implements Serializable {
- public static final int small = 3;
- public static final int big = 10;
public int xVelocity;
diff --git a/src/Player.java b/src/Player.java
index 545b4b3..785a174 100644
--- a/src/Player.java
+++ b/src/Player.java
@@ -1,6 +1,5 @@
-/* Eric Li, ICS4U, Completed 5/29/2022
-
-Paddle class defines behaviours for the left and right player-controlled paddles */
+// Eric Li, Charlie Zhao, ICS4U, Completed 6/20/2022
+// Player class defines behaviours for the player controlled character
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;