jeu-de-combat/src/gameplay/frames/nextFrameBuffer.java

116 lines
2.3 KiB
Java

package gameplay.frames;
import java.util.ArrayList;
/**
* This will handle the next frames to be played by each entity.
* @author Victor Azra
*/
public class nextFrameBuffer {
private Frame current;
private nextFrameBuffer next;
/**
* creates a new framebuffer, empty for now
*/
public nextFrameBuffer() {
this.current = null;
this.next = null;
}
public void setCurrentFrame(Frame f) {
this.current = f;
}
public void clone(nextFrameBuffer f) {
try{
Frame cf = new Frame();
cf.clone(f.current);
this.current = cf; }
catch (NullPointerException n) {
this.current = null;
this.next = null;
}
nextFrameBuffer nfb = new nextFrameBuffer();
try {
nfb.clone(f.next);
} catch (NullPointerException n) {}
this.next = nfb;
}
public void setNext(nextFrameBuffer f) {
this.next.clone(f);
}
public void emptyQueue() {
this.next = null;
}
public void empty() {
this.current = null;
this.next = null;
}
public void goToNext() {
//try {
nextFrameBuffer nfb = new nextFrameBuffer();
nfb.clone(this.next);
this.clone(nfb);
/*} catch (NullPointerException n) {
this.setCurrentFrame(null);
this.setNext(new nextFrameBuffer());
}*/
}
public Frame getCurrentFrame() {
return this.current;
}
public Frame getNextframe() {
try {
return this.next.current;
} catch(NullPointerException e) {return null;}
}
/**
* Adds a frame at the end of the buffer
* @param f the frame to add at the end
*/
public void addFrameToQueue(Frame f) {
if(this.current == null) {
this.current = f;
} else if(this.next == null){
nextFrameBuffer fb = new nextFrameBuffer();
fb.current = f;
this.next = fb;
} else {
this.next.addFrameToQueue(f);
}
}
/**
* Copies the same amount of frames from f in this, as the amount originally present, but keepsoriginal move data
* @param f frames array to copy
*/
public void changeFramesExceptForMove(ArrayList<Frame> f) {
int i = 0;
boolean goOn = true;
nextFrameBuffer fb = new nextFrameBuffer();
fb.clone(this);
this.emptyQueue();
try{fb.goToNext();} catch(NullPointerException e) {goOn = false;}
while(goOn && i < f.size()) {
try{
fb.current.cloneWithoutMovement(f.get(i));
this.addFrameToQueue(fb.current);
fb.goToNext();
i++;
} catch(NullPointerException e) { goOn = false;}
}
}
}