ソースコード

ソースコード




TextureResourceクラスの全ソースコードです。

TextureResource.java
package <パッケージ名>;

import java.util.Iterator;
import java.util.Vector;
import java.io.IOException;
import java.io.InputStream;

import <パッケージ名>.DrawDevice;
import <パッケージ名>.Texture;
import <パッケージ名>.Picture;



//  テクスチャリソース
public class TextureResource
{
    //  テクスチャタイプ
    public enum TEXTURE_TYPE
    {
        CHARA,
        MENU,
    }

    //  コンストラクタ
    public  TextureResource( AppResource appRes, DrawDevice drawDevice )
    {
        m_AppRes        = appRes;
        m_DrawDevice    = drawDevice;

        m_LoadTexInfoVec    = new Vector< TextureInfo >();
    }

    //  ロード
    public Texture  Load( String fileName, TEXTURE_TYPE type )
    {
        TextureInfo info    = new TextureInfo( fileName, type );
        Texture     tex     = _GetTexture( info );

        //  すでに読み込まれていたらそれを返す
        if( tex == null )
        {
            //  新しく作ってそれを返す

            //  ファイルパス作成
            String      filePath    = String.format( "%s/%s.png", _GetDirectory( type ), fileName );
            InputStream inputStream = m_AppRes.Load( filePath );
            if( inputStream == null )
                return null;

            Picture picture = new Picture();
            {
                if( picture.Load( m_DrawDevice, inputStream ))
                {
                    //  ロードに成功!
                    tex = picture;
                    info.SetTexture( tex );
                    m_LoadTexInfoVec.add( info );
                }
                else
                {
                    //  ロードに失敗...
                }

                //  ストリームを閉じる
                try
                {
                    inputStream.close();
                }
                catch( IOException e )
                {
                    e.printStackTrace();
                }
            }
        }
        return tex;
    }

    //  削除
    public void Delete( TEXTURE_TYPE type )
    {
        for( Iterator< TextureInfo > it = m_LoadTexInfoVec.iterator(); it.hasNext(); )
        {
            TextureInfo info    = it.next();
            if( info.TypeEqual( type ))
            {
                info.GetTexture().Release();

                it.remove();
            }
        }
    }



    //  ロード済みテクスチャ情報
    private class TextureInfo
    {
        //  コンストラクタ
        public  TextureInfo( String fileName, TEXTURE_TYPE type )
        {
            m_FileName  = fileName;
            m_Type      = type;
            m_Tex       = null;
        }

        //  テクスチャ設定
        public void SetTexture( Texture tex )
        {
            m_Tex   = tex;
        }

        public Texture  GetTexture()
        {
            return m_Tex;
        }

        //  比較
        public boolean  TypeEqual( TEXTURE_TYPE type )
        {
            return m_Type.equals( type );
        }
        public boolean  Equal( TextureInfo rhs )
        {
            return ( m_FileName.equals( rhs.m_FileName )) && ( m_Type.equals( rhs.m_Type ));
        }



        private String          m_FileName;
        private TEXTURE_TYPE    m_Type;

        private Texture     m_Tex;
    }

    //  読み込み済みテクスチャ取得
    private Texture _GetTexture( TextureInfo texInfo )
    {
        for( Iterator< TextureInfo > it = m_LoadTexInfoVec.iterator(); it.hasNext(); )
        {
            TextureInfo info    = it.next();
            if( texInfo.Equal( info ))
                return info.GetTexture();
        }
        return null;
    }

    //  タイプに応じたディレクトリ取得
    private String  _GetDirectory( TEXTURE_TYPE type )
    {
        switch( type )
        {
        case CHARA:     return "model/chara";
        case MENU:      return "model/menu";
        default:        return "";
        }
    }



    private AppResource         m_AppRes;
    private DrawDevice              m_DrawDevice;
    private Vector< TextureInfo > m_LoadTexInfoVec;
}


次のページ>