Blame |
Last modification |
View Log
| RSS feed
package com.gebauz.bauzoid.graphics.spritex;
import com.gebauz.bauzoid.graphics.renderstates.RenderStates;
import com.gebauz.bauzoid.math.Matrix4;
public class AtlasSpriteFrame
{
public SpriteParameters param = new SpriteParameters();
private AtlasSprite mSprite = null;
private int mRegionIndex = -1;
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();
public AtlasSpriteFrame(AtlasSprite sprite, int regionIndex)
{
mSprite = sprite;
mRegionIndex = regionIndex;
param.w = mSprite.getRegionWidth(mRegionIndex);
param.h = mSprite.getRegionHeight(mRegionIndex);
param.pivotX = param.w/2;
param.pivotY = param.h/2;
}
public void render()
{
render(param.x, param.y, param.w, param.h, param.pivotX, param.pivotY, param.angle, param.mirrorX, param.mirrorY);
}
public void render(float _x, float _y, float _w, float _h)
{
render(_x, _y, _w, _h, param.pivotX, param.pivotY, param.angle, param.mirrorX, param.mirrorY);
}
public void render(float _x, float _y, float _w, float _h, float _pivotX, float _pivotY)
{
render(_x, _y, _w, _h, _pivotX, _pivotY, param.angle, param.mirrorX, param.mirrorY);
}
public void render(float _x, float _y, float _w, float _h, float _pivotX, float _pivotY, float _angle)
{
render(_x, _y, _w, _h, _pivotX, _pivotY, _angle, param.mirrorX, param.mirrorY);
}
public void render(float _x, float _y, float _w, float _h, float _pivotX, float _pivotY, float _angle, boolean _mirrorX, boolean _mirrorY)
{
//SpriteShader shader = mSprite.getGraphics().getSpriteShader();
RenderStates rs = mSprite.getRenderStates();
// Matrix4 mirrorTranslate1 = Matrix4.createTranslation(-0.5f, -0.5f, 0);
// Matrix4 mirrorTranslate2 = Matrix4.createTranslation(+0.5f, +0.5f, 0);
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, mirrorTranslate1);
//Matrix4.multiply(mModelMatrix, mModelMatrix, mMirror);
//Matrix4.multiply(mModelMatrix, mModelMatrix, mirrorTranslate2);
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);
rs.pushModelMatrix();
{
rs.model = mModelMatrix;
mSprite.performRender(mRegionIndex, param.alpha, param.color);
}
rs.popModelMatrix();
}
public final int getRegionIndex()
{
return mRegionIndex;
}
/** Center the pivot. */
public void centerPivot()
{
param.centerPivot();
}
public Matrix4 getModelMatrix()
{
return mModelMatrix;
}
public AtlasSprite getSprite() { return mSprite; }
}