Advertisement
NoneyaBiznazz

LayeredAssetsBitmapTextureAtlasSource

Jul 5th, 2016
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.62 KB | None | 0 0
  1. package com.smiths;
  2. import java.io.IOException;
  3.  
  4. public class LayeredAssetsBitmapTextureAtlasSource extends BaseTextureAtlasSource implements IBitmapTextureAtlasSource
  5. {
  6.    private final Context mContext;
  7.    private final String mBaseAssetPath;
  8.    private final ArrayList<AssetLayer> mAssetLayers = new ArrayList<AssetLayer>();
  9.  
  10.    // ===========================================================
  11.    // Constructors
  12.    // ===========================================================
  13.  
  14.    public LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath)
  15.    {
  16.       this(context, pBaseAssetPath, 0, 0);
  17.    }
  18.  
  19.    public LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath, final int pTexturePositionX, final int pTexturePositionY)
  20.    {
  21.       this(context, pBaseAssetPath, pTexturePositionX, pTexturePositionY, getDimensions(context, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + pBaseAssetPath));
  22.    }
  23.  
  24.    public LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath, final int pTexturePositionX, final int pTexturePositionY, final Point pSize)
  25.    {
  26.       super(pTexturePositionX, pTexturePositionY, pSize.x, pSize.y);
  27.       this.mContext = context;
  28.       this.mBaseAssetPath = pBaseAssetPath;
  29. //      BitmapTextureAtlasTextureRegionFactory.setAssetBasePath(pBaseAssetPath);
  30.    }
  31.    
  32.    private LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath, final ArrayList<AssetLayer> assetLayers, final int pTexturePositionX, final int pTexturePositionY, final int pWidth, final int pHeight)
  33.    {
  34.       super(pTexturePositionX, pTexturePositionY, pWidth, pHeight);
  35.       this.mContext = context;
  36.       this.mBaseAssetPath = pBaseAssetPath;
  37.       for (int i = 0; i < assetLayers.size(); i++)
  38.          mAssetLayers.add(assetLayers.get(i));
  39.    }
  40.  
  41.    
  42.    public void clearAssetLayer(){
  43.           mAssetLayers.clear();
  44.        }
  45.    
  46.    
  47.    public boolean addLayer(final String layerPath, final float xOffset, final float yOffset)
  48.    {
  49.       if (mBaseAssetPath == null)
  50.          return false;
  51.       final Point size = getDimensions(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + layerPath);
  52. //      if (mTextureWidth < (size.x + xOffset) || mTextureHeight < (size.y + yOffset))
  53. //         return false;
  54.       mAssetLayers.add(new AssetLayer(layerPath, xOffset, yOffset));
  55.       return true;
  56.    }
  57.  
  58.  
  59.    @Override
  60.    public LayeredAssetsBitmapTextureAtlasSource deepCopy()
  61.    {
  62.       return new LayeredAssetsBitmapTextureAtlasSource(this.mContext, this.mBaseAssetPath,
  63.             this.mAssetLayers, this.mTextureX, this.mTextureY, this.mTextureWidth, this.mTextureHeight);
  64.    }
  65.  
  66.    // ===========================================================
  67.    // Methods for/from SuperClass/Interfaces
  68.    // ===========================================================
  69.  
  70.    @Override
  71.    public Bitmap onLoadBitmap(final Config pBitmapConfig)
  72.    {
  73.       final Bitmap image = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + this.mBaseAssetPath);//mBaseAssetPath);
  74.       if (image == null)
  75.          return null;
  76.  
  77.       final Bitmap bitmap = Bitmap.createBitmap(mTextureWidth, mTextureHeight, Bitmap.Config.ARGB_8888);
  78.       final Canvas canvas = new Canvas(bitmap);
  79.       canvas.drawBitmap(image, 0f, 0f, null);
  80.       for (int i = 0; i < mAssetLayers.size(); i++)
  81.       {
  82.          final AssetLayer al = mAssetLayers.get(i);
  83.          final Bitmap layer = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + al.mAssetPath);
  84.          canvas.drawBitmap(layer, al.mXOffset, al.mYOffset, null);
  85.       }
  86.       return bitmap;
  87.    }
  88.  
  89.    public Bitmap onLoadBitmap(Config pBitmapConfig, boolean pMutable) {
  90.       return onLoadBitmap(pBitmapConfig);
  91.    }
  92.  
  93.    // ===========================================================
  94.    // Private Methods
  95.    // ===========================================================
  96.  
  97.    private Bitmap BitmapFromAsset(final Context context, final String assetPath)
  98.    {
  99.       InputStream in = null;
  100.       Bitmap bitmap = null;
  101.       try
  102.       {
  103.          in = context.getAssets().open(assetPath);
  104.          bitmap = BitmapFactory.decodeStream(in, null, null);
  105.       }
  106.       catch (final IOException e)
  107.       {
  108.          Debug.e("Failed loading Bitmap in BitmapFromAsset. AssetPath: " + assetPath, e);
  109.       }
  110.       finally
  111.       {
  112.          StreamUtils.close(in);
  113.       }
  114.       return bitmap;
  115.    }
  116.  
  117.    private static Point getDimensions(final Context context, final String pAssetPath)
  118.    {
  119.       final BitmapFactory.Options decodeOptions = new BitmapFactory.Options();
  120.       decodeOptions.inJustDecodeBounds = true;
  121.  
  122.       InputStream in = null;
  123.       Point size = null;
  124.       try
  125.       {
  126.          in = context.getAssets().open(pAssetPath);
  127.          BitmapFactory.decodeStream(in, null, decodeOptions);
  128.          size = new Point(decodeOptions.outWidth, decodeOptions.outHeight);
  129.       }
  130.       catch (final IOException e)
  131.       {
  132.          Debug.e("Failed loading Bitmap in LayeredAssetsBitmapTextureAtlasSource. AssetPath: " + pAssetPath, e);
  133.  
  134.       }
  135.       finally
  136.       {
  137.          StreamUtils.close(in);
  138.       }
  139.       return size;
  140.    }
  141.  
  142.    private class AssetLayer
  143.    {    
  144.       public final String mAssetPath;
  145.       public final float mXOffset;
  146.       public final float mYOffset;
  147.       public AssetLayer(final String assetPath, final float xOffset, final float yOffset)
  148.       {
  149.          mAssetPath = assetPath;
  150.          mXOffset = xOffset;
  151.          mYOffset = yOffset;
  152.       }
  153.    }
  154.  
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement