Subversion Repositories AndroidProjects

Rev

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; }

}