Rev 470 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package com.gebauz.Bauzoid.graphics.sprite;
import com.gebauz.Bauzoid.graphics.renderstates.RenderStates;
import com.gebauz.Bauzoid.math.Matrix4;
import com.gebauz.Bauzoid.math.Vector4;
public class AtlasSpriteInstance
{
public float x = 0.0f;
public float y = 0.0f;
public float w = 0.0f;
public float h = 0.0f;
public float angle = 0.0f;
public float alpha = 1.0f;
public Vector4 color = new Vector4(1.0f, 1.0f, 1.0f, 1.0f);
public boolean mirrorX = false;
public boolean mirrorY = false;
/** Rotation and scaling pivot point in absolute coordinates. */
public float pivotX = 0.0f;
public float pivotY = 0.0f;
private AtlasSprite mSprite = null;
private int mRegionIndex = -1;
public AtlasSpriteInstance(AtlasSprite sprite, int regionIndex)
{
mSprite = sprite;
mRegionIndex = regionIndex;
w = mSprite.getRegionWidth(mRegionIndex);
h = mSprite.getRegionHeight(mRegionIndex);
pivotX = w/2;
pivotY = h/2;
}
public void render()
{
render(x, y, w, h);
}
public void render(float _x, float _y, float _w, float _h)
{
/* mSprite.x = x;
mSprite.y = y;
mSprite.w = w;
mSprite.h = h;
mSprite.angle = angle;
mSprite.alpha = alpha;
mSprite.pivotX = pivotX;
mSprite.pivotY = pivotY;
mSprite.mirrorX = mirrorX;
mSprite.mirrorY = mirrorY;
mSprite.color = color;
mSprite.render(mRegionIndex);*/
SpriteShader shader = mSprite.getGraphics().getSpriteShader();
RenderStates rs = mSprite.getRenderStates();
Matrix4 modelMatrix = Matrix4.multiply(Matrix4.createScale(_w, _h, 1.0f), Matrix4.createTranslation(-pivotX, -pivotY, 0));
modelMatrix = Matrix4.multiply(modelMatrix, Matrix4.createScale((mirrorX ? -1 : 1), (mirrorY ? -1 : 1), 1));
modelMatrix = Matrix4.multiply(modelMatrix, Matrix4.createRotationZ(angle));
modelMatrix = Matrix4.multiply(modelMatrix, Matrix4.createTranslation(_x, _y, 0));
rs.pushModelMatrix();
{
rs.model = modelMatrix;
// draw sprite
shader.activate(mSprite.getTexture(), alpha, color);
{
rs.blending.setEnabled(true);
rs.culling.setEnabled(false);
rs.activate();
{
//mSprite.getMesh(mRegionIndex).render(3, 3);
mSprite.getMesh().render(mSprite.getMeshStartIndex(mRegionIndex), AtlasSprite.NUM_INDICES_PER_REGION);
}
rs.deactivate();
}
shader.deactivate();
}
rs.popModelMatrix();
}
public final int getRegionIndex()
{
return mRegionIndex;
}
}