You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

93 lines
2.4 KiB

package rendering;
import gameobjects.GameObject;
import playground.Animation;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.LinkedList;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class AnimationArtist extends Artist {
protected LinkedList<BufferedImage> imageArray;
protected LinkedList<Double> showtime;
protected double t0;
protected int loopFrame = 0;
protected double w = 0, h = 0, scale = 0;
protected String playmode = ""; // can be loop, forward, backward
private static Logger logger = LogManager.getLogger(AnimationArtist.class);
public AnimationArtist(GameObject go, Animation anim, double t0, String playmode, double scale) {
super(go);
this.imageArray = anim.getImageList();
this.showtime = anim.getShowtimeList();
this.t0 = t0;
logger.debug("AnimationArtist start = ") ;
this.loopFrame = 0;
for (int i = 0; i < imageArray.size(); i++) {
logger.trace("ANIMRAWWH="+imageArray.get(i).getWidth()) ;
this.w = Math.max(this.w, imageArray.get(i).getWidth());
this.h = Math.max(imageArray.get(i).getHeight(), this.h);
}
logger.debug("AnimationArtist RAW WH = "+this.w+"/"+this.h) ;
this.playmode = playmode;
this.w *= scale;
this.h *= scale;
}
public double getW() {
return w;
}
public double getH() {
return h;
}
@Override
public void draw(Graphics2D g) {
double i2 = this.getGameTime();
double elapsedTime = i2 - t0;
// Diff chance from sec to millis
double mseconds = (double) elapsedTime;
logger.debug("showtime= "+showtime.get(loopFrame)+" elapsed= "+elapsedTime+" i2= "+i2);
if (playmode.equals("loop")) {
if (mseconds >= showtime.get(loopFrame)) {
loopFrame++;
if (loopFrame >= imageArray.size())
loopFrame = 0;
t0 = i2;
}
}
if (playmode.equals("forward")) {
if (mseconds >= showtime.get(loopFrame) && loopFrame < imageArray.size() - 1) {
loopFrame++;
t0 = i2;
}
}
if (playmode.equals("backward")) {
if (mseconds >= showtime.get(loopFrame) && loopFrame > 1) {
loopFrame--;
t0 = i2;
}
}
g.drawImage(imageArray.get(loopFrame), (int) Math.round(this.getX() - w / 2.),
(int) Math.round(this.getY() - h / 2.), (int) w, (int) h, null);
}
}