Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.burutaru.game.entities;

import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.gebauz.bauzoid.graphics.sprite.SimpleSprite;
import com.gebauz.bauzoid.graphics.sprite.SpriteTransform;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.burutaru.game.GameLogic;

public class VirtualPad extends Entity
{
        // Constants========================================================================================
       
        public static final float PAD_SIZE_START = 64.0f;
        public static final float PAD_SIZE_CURRENT = 80.0f;
        public static final float ARROW_WIDTH = 64.0f;
        public static final float ARROW_HEIGHT = 16.0f;

        // Embedded Types===================================================================================

        // Fields===========================================================================================
       
        private boolean mVisible = false;
       
        private float mStartX = 0.0f;
        private float mStartY = 0.0f;
       
        private float mCurrentX = 0.0f;
        private float mCurrentY = 0.0f;
       
        private SimpleSprite mPadSprite = null;
        private SimpleSprite mArrowSprite = null;

       
        // Methods==========================================================================================
       
        public VirtualPad(GameLogic gameLogic)
        {
                super(gameLogic);
               
                mPadSprite = new SimpleSprite(getGraphics(), "data/textures/vstick.png");
                mArrowSprite = new SimpleSprite(getGraphics(), "data/textures/vstick_arrow.png");
        }

        @Override
        public void initAsync()
        {
                mPadSprite.initAsync();
                mArrowSprite.initAsync();
        }
       
        @Override
        public void init()
        {
                mPadSprite.init();
                mPadSprite.getSprite().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
                mArrowSprite.init();
                mArrowSprite.getSprite().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
        }

        @Override
        public void exit()
        {
                if (mPadSprite != null)
                {
                        mPadSprite.dispose();
                        mPadSprite = null;
                }
               
                if (mArrowSprite != null)
                {
                        mArrowSprite.dispose();
                        mArrowSprite = null;
                }
        }

        @Override
        public void update(float deltaTime)
        {
        }

        @Override
        public void render()
        {
                if (mVisible)
                {
                        {
                                SpriteTransform param = mPadSprite.getSpriteTransform();
                                param.x = mStartX;
                                param.y = mStartY;
                                param.w = PAD_SIZE_START;
                                param.h = PAD_SIZE_START;
                                param.centerPivot();
                                mPadSprite.render();
                        }
                       
                        {
                                float diffX = mCurrentX - mStartX;
                                float diffY = mCurrentY - mStartY;
                               
                                float len = (float)Math.sqrt(diffX*diffX + diffY*diffY);
                               
                                SpriteTransform param = mArrowSprite.getSpriteTransform();
                                param.x = mStartX + diffX/2;
                                param.y = mStartY + diffY/2;
                                param.w = len * 2;
                                param.h = ARROW_HEIGHT;
                                param.centerPivot();
                                param.angle = MathUtil.radToDeg((float)Math.atan2(diffY, - diffX));
                                mArrowSprite.render();                 
                        }
                       
                        {
                                SpriteTransform param = mPadSprite.getSpriteTransform();
                                param.x = mCurrentX;
                                param.y = mCurrentY;
                                param.w = PAD_SIZE_CURRENT;
                                param.h = PAD_SIZE_CURRENT;
                                param.centerPivot();
                                mPadSprite.render();
                        }
                }
        }      
       
        // Getters/Setters==================================================================================
       
        public void setVisible(boolean visible) { mVisible = visible; }
       
        public void setPositions(float startX, float startY, float x, float y)
        {
                mStartX = startX; mStartY = startY;
                mCurrentX = x; mCurrentY = y;
        }

}