Subversion Repositories AndroidProjects

Rev

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

}