Subversion Repositories AndroidProjects

Rev

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