Merge remote-tracking branch 'origin/master'

master
Chara1236 2022-06-20 19:28:21 -04:00
commit a94409dd12
3 changed files with 29 additions and 21 deletions

View File

@ -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+Player.PLAYER_WIDTH&&y-p.y<Player.PLAYER_HEIGHT&&p.y-y<npcHeight){
return true;
}
return false;
return realX + npcWidth > 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;
}

View File

@ -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;

View File

@ -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;