Merge remote-tracking branch 'origin/master'
commit
a94409dd12
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue