package com.mygame;
import loon.LRelease;
import loon.LTexture;
import loon.LTextures;
import loon.geom.RectBox;
import loon.geom.Vector2f;
public class Sprite implements LRelease{
public final static int ALIGN_BOTTOM = 0x20;
public final static int ALIGN_CENTERX = 2;
public final static int ALIGN_CENTERY = 0x10;
public final static int ALIGN_LEFT = 1;
public final static int ALIGN_RIGHT = 4;
public final static int ALIGN_TOP = 8;
private int w;
private int h;
private int icols;
private int irows;
private Vector2f origin;
private LTexture texture;
public int xoff;
public int yoff;
private Vector2f position = new Vector2f();
private Vector2f scale = new Vector2f();
private RectBox rect = new RectBox();
public Sprite(String aFile, int cols, int rows) {
this(aFile, cols, rows, 0x12);
}
public Sprite(String aFile, int cols, int rows, int align) {
this.texture = LTextures.loadTexture("assets/" + aFile + ".png");
if (aFile.indexOf("coal") != -1) {
cols = 12;
rows = 2;
} else if (cols == 19 && rows == 2) {
cols = 8;
rows = 5;
} else if (cols == 19 && rows == 1) {
cols = 8;
rows = 3;
}
this.icols = cols;
this.irows = rows;
this.w = this.texture.getWidth() / cols;
this.h = this.texture.getHeight() / rows;
this.xoff = 0;
this.yoff = 0;
if ((align & 1) > 0) {
this.xoff = 0;
} else if ((align & 2) > 0) {
this.xoff = -this.w / 2;
} else if ((align & 4) > 0) {
this.xoff = -this.w;
}
if ((align & 8) > 0) {
this.yoff = 0;
} else if ((align & 0x10) > 0) {
this.yoff = -this.h / 2;
} else if ((align & 0x20) > 0) {
this.yoff = -this.h;
}
this.origin = new Vector2f(-this.xoff, -this.yoff);
}
public Sprite(String aFile, int cols, int rows, int align, boolean retain) {
this(aFile, cols, rows, align);
}
public int getHeight() {
return this.h;
}
public int getWidth() {
return this.w;
}
public void Paint(Painter painter, float x, float y, int frame) {
int sx = (frame % this.icols) * this.w;
int sy = (frame / this.icols) * this.h;
position.set(x, y);
rect.setBounds(sx, sy, this.w, this.h);
painter.draw(this.texture, position, this.origin, rect);
}
public void Paint(Painter painter, float x, float y, int frame, float angle) {
int sx = (frame % this.icols) * this.w;
int sy = (frame / this.icols) * this.h;
position.set(x, y);
scale.set(1f, 1f);
rect.setBounds(sx, sy, this.w, this.h);
painter.drawScaledRotated(this.texture, position, this.origin, scale,
angle, rect);
}
public void PaintScaled(Painter painter, float x, float y, int frame,
float scalex, float scaley) {
int sx = (frame % this.icols) * this.w;
int sy = (frame / this.icols) * this.h;
position.set(x, y);
scale.set(scalex, scaley);
rect.setBounds(sx, sy, this.w, this.h);
painter.drawScaled(this.texture, position, this.origin, scale, rect);
}
public void PaintScaled(Painter painter, float x, float y, int frame,
float scalex, float scaley, boolean flipped) {
int sx = (frame % this.icols) * this.w;
int sy = (frame / this.icols) * this.h;
position.set(x, y);
scale.set(scalex, scaley);
rect.setBounds(sx, sy, this.w, this.h);
painter.drawScaled(this.texture, position, this.origin, scale, rect,
flipped);
}
public void PaintScaledRotated(Painter painter, float x, float y,
int frame, float scalex, float scaley, float angle) {
int sx = (frame % this.icols) * this.w;
int sy = (frame / this.icols) * this.h;
position.set(x, y);
scale.set(scalex, scaley);
rect.setBounds(sx, sy, this.w, this.h);
painter.drawScaledRotated(this.texture, position, this.origin, scale,
angle, rect);
}
public void PaintScaledRotated(Painter painter, float x, float y,
int frame, float scalex, float scaley, float angle, boolean flipped) {
int sx = (frame % this.icols) * this.w;
int sy = (frame / this.icols) * this.h;
position.set(x, y);
scale.set(scalex, scaley);
rect.setBounds(sx, sy, this.w, this.h);
painter.drawScaledRotated(this.texture, position, this.origin, scale,
angle, rect, flipped);
}
public int getRows() {
return irows;
}
@Override
public void close() {
texture.close();
}
}