/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package test.egc.res.mir2.actor;
import test.egc.res.mir2.map.DrawImage2D;
import test.egc.res.mir2.map.Point2D;
import java.awt.Graphics2D;
import java.awt.Image;
import egc.res.mir2.Mir2PictureManager;
/**
*
* @author easy
*/
public abstract class AbstractMir2Actor2D implements Point2D {
Mir2PictureManager mgr;
Featureable featureable = Featureable.DEFAULT;
@Override
public void draw(Graphics2D g2d, int canvasX, int canvasY, int canvasWidth, int canvasHeight) {
DrawImage2D d2d = getBodyDrawImage2D();
if (d2d != null) {
d2d.draw(g2d, getCurrentBodyImage(), canvasX, canvasY, canvasWidth, canvasHeight);
}
}
protected Image getCurrentBodyImage() {
int fileIndex = getCurrentFileIndex();
int offset = getCurrentBodyOffset();
String fileName = getFileName();
int currFrame = getCurrentFrame();
if (currFrame >= 0 && fileIndex >= 0 && offset >= 0 && fileName != null) {
int frame = offset + currFrame;
return mgr.getImage(fileName, fileIndex, frame);
}
return null;
}
protected int getCurrentBodyOffset() {
return getBodyOffset(getCurrentFeature());
}
/***/
protected abstract int getBodyOffset(int feature);
protected int getCurrentFileIndex() {
return getFileIndex(getCurrentFileIndex());
}
/***/
protected abstract int getFileIndex(int feature);
/***/
protected abstract String getFileName();
protected DrawImage2D getBodyDrawImage2D() {
return DrawImage2D.DEFAULT_DRAW_IMAGE;
}
public AbstractMir2Actor2D(Mir2PictureManager mgr) {
this.mgr = mgr;
}
protected ActorInfo getCurrentActionInfo() {
return getActorInfo(getCurrentFeature());
}
protected ActorInfo getActorInfo(int feature) {
return getActorInfo(getCurrentAction(), getRace(feature));
}
/***/
protected abstract ActorInfo getActorInfo(int action, int race);
protected abstract int getCurrentAction();
protected int getRace(int feature) {
return getFeatureable().decode().getRace(feature);
}
// protected abstract int getCurrentDir();
protected abstract int getCurrentFrame();
protected abstract int getCurrentFeature();
protected Featureable getFeatureable() {
return featureable;
}
/***/
// protected abstract int getMaxFrame();
public class ActorInfo {
public final int start;
public final int frame;
public final int skip;
public final int time;
public final int useTick;
public ActorInfo(int start, int frame, int skip, int time, int useTick) {
this.start = start;
this.frame = frame;
this.skip = skip;
this.time = time;
this.useTick = useTick;
}
}
}
|