Rev 1731 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package com.gebauz.bauzoid2.graphics.sprite;
import com.gebauz.bauzoid2.game.Engine;
import com.gebauz.bauzoid2.math.Matrix4;
import com.gebauz.bauzoid2.math.Vector4;
public class SpriteSheetRegion
{
// Constants========================================================================================
// Embedded Types===================================================================================
// Fields===========================================================================================
public float left = 0;
public float top = 0;
public float right = 0;
public float bottom = 0;
public int regionIndex = -1;
private SpriteSheet mParent = null;
// Matrices for temp storage so we don't have to re-allocate new matrices every frame.
private Matrix4 mScale = new Matrix4();
private Matrix4 mMirror = new Matrix4();
private Matrix4 mPivotTranslate = new Matrix4();
private Matrix4 mRotateZ = new Matrix4();
private Matrix4 mTranslate = new Matrix4();
private Matrix4 mModelMatrix = new Matrix4();
// Methods==========================================================================================
public SpriteSheetRegion(SpriteSheet sheet, float relativeLeft, float relativeTop, float relativeRight, float relativeBottom)
{
mParent = sheet;
left = relativeLeft;
top = relativeTop;
right = relativeRight;
bottom = relativeBottom;
}
public SpriteSheetRegion(SpriteSheet sheet, float l, float t, float r, float b, boolean absoluteCoords)
{
this(sheet, l, t, r, b);
if (absoluteCoords)
{
left /= sheet.getTexture().getWidth();
top /= sheet.getTexture().getHeight();
right /= sheet.getTexture().getWidth();
bottom /= sheet.getTexture().getHeight();
}
}
public void render(SpriteTransform transform)
{
render(transform.x, transform.y, transform.w, transform.h, transform.pivotX, transform.pivotY, transform.angle,
transform.alpha, transform.color, transform.fogColor, transform.mirrorX, transform.mirrorY);
}
public void render(float x, float y, float w, float h, float pivotX, float pivotY, float angle, float alpha,
Vector4 color, Vector4 fogColor, boolean mirrorX, boolean mirrorY)
{
mScale.setScale(w/2, h/2, 1.0f);
mPivotTranslate.setTranslation(-pivotX+w/2, -pivotY+h/2, 0);
mMirror.setScale((mirrorX ? -1 : 1), (mirrorY ? -1 : 1), 1);
mRotateZ.setRotationZ(angle);
mTranslate.setTranslation(x, y, 0);
mModelMatrix.identity();
Matrix4.multiply(mModelMatrix, mModelMatrix, mMirror);
Matrix4.multiply(mModelMatrix, mModelMatrix, mScale);
Matrix4.multiply(mModelMatrix, mModelMatrix, mPivotTranslate);
Matrix4.multiply(mModelMatrix, mModelMatrix, mRotateZ);
Matrix4.multiply(mModelMatrix, mModelMatrix, mTranslate);
Engine.graphics.renderStates.pushModelMatrix();
{
Engine.graphics.renderStates.model = mModelMatrix;
//sprite.performRender(getRegionIndex(), alpha, color, fogColor);
mParent.render(regionIndex, alpha, color, fogColor);
}
Engine.graphics.renderStates.popModelMatrix();
}
// Getters/Setters==================================================================================
public final SpriteSheet getOwner()
{
return mParent;
}
public final float getWidth() { return (right-left); }
public final float getHeight() { return (bottom-top); }
public final float getPixelWidth()
{
return getWidth() * mParent.getTexture().getWidth();
}
public final float getPixelHeight()
{
return getHeight() * mParent.getTexture().getHeight();
}
}