예제 #1
0
    public CriFsLoadAssetBundleRequest LoadAssetBundle(CriFsBinder binder, string path, int readUnitSize)
    {
        var request = new CriFsLoadAssetBundleRequest(binder, path, readUnitSize);

        this.AddRequest(request);
        return(request);
    }
예제 #2
0
 public CriFsBindRequest BindFile(CriFsBinder targetBinder, CriFsBinder srcBinder, string path)
 {
     var request = new CriFsBindRequest(
         CriFsBindRequest.BindType.File, targetBinder, srcBinder, path);
     this.AddRequest(request);
     return request;
 }
예제 #3
0
    public CriFsInstallRequest Install(CriFsBinder srcBinder, string srcPath, string dstPath, CriFsRequest.DoneDelegate doneDelegate)
    {
        var request = new CriFsInstallRequestLegacy(srcBinder, srcPath, dstPath, doneDelegate, this.installBufferSize);

        this.requestList.Add(request);
        return(request);
    }
예제 #4
0
    private CriAtomExAcb LoadAcbFile(CriFsBinder binder, string acbFile, string awbFile)
    {
        if (String.IsNullOrEmpty(acbFile))
        {
            return(null);
        }

        string acbPath = acbFile;

        if ((binder == null) && CriWare.Common.IsStreamingAssetsPath(acbPath))
        {
            acbPath = Path.Combine(CriWare.Common.streamingAssetsPath, acbPath);
        }

        string awbPath = awbFile;

        if (!String.IsNullOrEmpty(awbPath))
        {
            if ((binder == null) && CriWare.Common.IsStreamingAssetsPath(awbPath))
            {
                awbPath = Path.Combine(CriWare.Common.streamingAssetsPath, awbPath);
            }
        }

        return(CriAtomExAcb.LoadAcbFile(binder, acbPath, awbPath));
    }
예제 #5
0
    public CriFsLoadFileRequest LoadFile(CriFsBinder binder, string path, CriFsRequest.DoneDelegate doneDelegate, int readUnitSize)
    {
        var request = new CriFsLoadFileRequest(binder, path, doneDelegate, readUnitSize);

        this.AddRequest(request);
        return(request);
    }
예제 #6
0
    /**
     * <summary>ACBデータの非同期ロード</summary>
     * <param name="acbData">ACBデータのバイト配列</param>
     * <param name="awbBinder">AWB用バインダオブジェクト</param>
     * <param name="awbPath">AWBファイルのパス</param>
     * <param name="loadAwbOnMemory">AWBファイルをメモリ上にロードするか(オプション)</param>
     * <returns>CriAtomExAcbLoaderオブジェクト</returns>
     * \par 説明:
     * ACBデータの非同期ロードを開始します。<br/>
     * 戻り値に対して ::CriAtomExAcbLoader::GetStatus を呼び出してロード状態を確認し、
     * 状態が Complete に遷移したら、 ::CriAtomExAcbLoader::MoveAcb により ::CriAtomExAcb が取得可能です。<br>
     */
    public static CriAtomExAcbLoader LoadAcbDataAsync(byte[] acbData, CriFsBinder awbBinder, string awbPath, bool loadAwbOnMemory = false)
    {
        /* バージョン番号が不正なライブラリではキューシートをロードしない */
        /* 備考)不正に差し替えられたsoファイルを使用している可能性あり。 */
        bool isCorrectVersion = CriWare.CheckBinaryVersionCompatibility();

        if (isCorrectVersion == false)
        {
            return(null);
        }

        IntPtr       binderHandle = (awbBinder != null) ? awbBinder.nativeHandle : IntPtr.Zero;
        LoaderConfig config       = new LoaderConfig();

        config.shouldLoadAwbOnMemory = loadAwbOnMemory;
        IntPtr handle = criAtomExAcbLoader_Create(ref config);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        bool result = criAtomExAcbLoader_LoadAcbDataAsync(handle, acbData, acbData.Length, binderHandle, awbPath);

        if (result == false)
        {
            return(null);
        }
        return(new CriAtomExAcbLoader(handle, acbData));
    }
        /// <summary>
        /// 指定ファイルのバインド
        /// </summary>
        /// <param name="_cpkName"></param>
        /// <param name="bindId"></param>
        /// <returns></returns>
        private IEnumerator BindCPK(string _cpkName, string _versionHashName)
        {
            uint bindId = 0;

            if (m_manager == null)
            {
                Debug.LogWarning("Cant Exec Coroutine");
                yield break;
            }
            string      path   = CriPackageCacheController.GetOutputPath(_cpkName, _versionHashName);
            CriFsBinder binder = new CriFsBinder();

            CriFsBindRequest request = CriFsUtility.BindCpk(binder, path);

            bindId = request.bindId;

            // 待機
            yield return(request.WaitForDone(m_manager));

            if (string.IsNullOrEmpty(request.error))
            {
                // Succeeded
                // List に登録
                BindDict.Add(_cpkName, new BinderData(bindId, binder));
            }
            else
            {
                //Error
                Debug.LogWarning("Failed to bind CPK. (path=" + path + ")");
                Debug.LogWarning("Error:" + request.error);
            }
        }
예제 #8
0
    public CriFsBindRequest BindFile(CriFsBinder targetBinder, CriFsBinder srcBinder, string path)
    {
        var request = new CriFsBindRequest(
            CriFsBindRequest.BindType.File, targetBinder, srcBinder, path);

        this.AddRequest(request);
        return(request);
    }
예제 #9
0
 /**
  * <summary>ストリーム用AWBファイルのアタッチ</summary>
  * <param name="awb_binder">AWBファイルを含むバインダのハンドル</param>
  * <param name="awb_path">AWBファイルのパス</param>
  * <param name="awb_name">AWB名</param>
  * \par 説明:
  * ACBハンドルに対してストリーム用のAWBファイルをアタッチします。
  * 第1引数の awb_binder 、および第2引数の awb_path には、ストリーム再生用
  * のAWBファイルを指定します。<br>
  * 第3引数の awb_name はAWBをアタッチするスロットを指定するために使用します。
  * このため、AtomCraftが出力したAWB名(ファイル名から拡張子を取り除いた部分)を変更している場合
  * はオリジナルのAWB名を指定してください。<br>
  * AWBファイルのアタッチに失敗した場合、エラーコールバックが発生します。<br>
  * 失敗の理由については、エラーコールバックのメッセージで確認可能です。<br>
  * \par 備考:
  * AWBファイルをアタッチするとライブラリ内部的にバインダ( CriFsBinderHn )とローダ( CriFsLoaderHn )
  * を確保します。<br>
  * 追加でAWBファイルをアタッチする場合、追加数分のバインダとローダが確保できる設定で
  * Atomライブラリ(またはCRI File Systemライブラリ)を初期化する必要があります。<br>
  */
 public void AttachAwbFile(CriFsBinder awb_binder, string awb_path, string awb_name)
 {
     if (this.isAvailable)
     {
         IntPtr binderHandle = (awb_binder != null) ? awb_binder.nativeHandle : IntPtr.Zero;
         criAtomExAcb_AttachAwbFile(this.handle, binderHandle, awb_path, awb_name, IntPtr.Zero, 0);
     }
 }
예제 #10
0
    private void LoadAcbFileAsync(CriAtomCueSheet cueSheet, CriFsBinder binder, string acbFile, string awbFile, bool loadAwbOnMemory)
    {
        if (String.IsNullOrEmpty(acbFile))
        {
            return;
        }

        StartCoroutine(LoadAcbFileCoroutine(cueSheet, binder, acbFile, awbFile, loadAwbOnMemory));
    }
 public void SetRelease()
 {
     m_refCount--;
     if (m_refCount < 1)
     {
         CriFsBinder.Unbind(BindId);
         Binder.Dispose();
         m_binder = null;
     }
 }
예제 #12
0
	/**
	 * <summary>ACBファイルのロード</summary>
	 * <param name="binder">バインダオブジェクト</param>
	 * <param name="acbPath">ACBファイルのパス</param>
	 * <param name="awbPath">AWBファイルのパス</param>
	 * <returns>CriAtomExAcbオブジェクト</returns>
	 * \par 説明:
	 * ACBファイルをロードし、キュー再生に必要な情報を取り込みます。<br/>
	 * <br/>
	 * 第2引数の acbPath にはオンメモリ再生用のACBファイルのパスを、
	 * 第3引数の awbPath にはストリーム再生用のAWBファイルのパスを、それぞれ指定します。<br/>
	 * (オンメモリ再生のみのACBデータをロードする場合、
	 * awbPath にセットした値は無視されます。)<br/>
	 * <br/>
	 * ACBファイルとAWBファイルを一つのCPKファイルにパッキングしている場合、
	 * 第1引数( binder )にCPKファイルをバインドしたCriFsBinderオブジェクトを指定する必要があります。<br/>
	 * <br/>
	 * ACBファイルをロードすると、ACBデータにアクセスするためのCriAtomExAcbオブジェクト
	 * ( ::CriAtomExAcb )が返されます。<br/>
	 * AtomExプレーヤに対し、 ::CriAtomExPlayer::SetCue 関数でACBハンドル、
	 * および再生するキュー名を指定することで、
	 * ACBファイル内のキューを再生することが可能です。<br/>
	 * <br/>
	 * リードエラー等によりACBファイルのロードに失敗した場合、
	 * 本関数は戻り値として null を返します。<br/>
	 * \attention
	 * 本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/>
	 * <br/>
	 * ACBハンドルは内部的にバインダ( CriFsBinder )を確保します。<br/>
	 * ACBファイルをロードする場合、
	 * ACBファイル数分のバインダが確保できる設定でライブラリを初期化する必要があります。<br/>
	 * <br/>
	 * 本関数は完了復帰型の関数です。<br/>
	 * ACBファイルのロードにかかる時間は、プラットフォームによって異なります。<br/>
	 * ゲームループ等の画面更新が必要なタイミングで本関数を実行するとミリ秒単位で
	 * 処理がブロックされ、フレーム落ちが発生する恐れがあります。<br/>
	 * ACBファイルのロードは、シーンの切り替わり等、負荷変動を許容できる
	 * タイミングで行うようお願いいたします。<br/>
	 * \sa criAtomExAcb_CalculateWorkSizeForLoadAcbFile, CriAtomExAcbHn, criAtomExPlayer_SetCueId
	 */
	public static CriAtomExAcb LoadAcbFile(CriFsBinder binder, string acbPath, string awbPath)
	{
		IntPtr binderHandle = (binder != null) ? binder.nativeHandle : IntPtr.Zero;
		IntPtr handle = criAtomExAcb_LoadAcbFile(
			binderHandle, acbPath, binderHandle, awbPath, IntPtr.Zero, 0);
		if (handle == IntPtr.Zero) {
			return null;
		}
		return new CriAtomExAcb(handle);
	}
예제 #13
0
    public static CriAtomExAcbAsync LoadAcbData(byte[] data, CriFsBinder awbBinder, string awbPath)
    {
        IntPtr binderHandle = (awbBinder != null) ? awbBinder.nativeHandle : IntPtr.Zero;
        IntPtr handle       = criAtomExAcbAsync_LoadAcbData(data, data.Length, binderHandle, awbPath);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        return(new CriAtomExAcbAsync(handle));
    }
예제 #14
0
    public static CriAtomExAcbAsync LoadAcbFile(CriFsBinder binder, string acbPath, string awbPath)
    {
        IntPtr binderHandle = (binder != null) ? binder.nativeHandle : IntPtr.Zero;
        IntPtr handle       = criAtomExAcbAsync_LoadAcbFile(binderHandle, acbPath, binderHandle, awbPath);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        return(new CriAtomExAcbAsync(handle));
    }
예제 #15
0
    /**
     * <summary>ACBデータのロード</summary>
     * <param name="acbData">ACBデータのバイト配列</param>
     * <param name="awbBinder">AWB用バインダオブジェクト</param>
     * <param name="awbPath">AWBファイルのパス</param>
     * <returns>CriAtomExAcbオブジェクト</returns>
     * \par 説明:
     * メモリ上に配置されたACBデータをロードし、キュー再生に必要な情報を取り込みます。<br/>
     * <br/>
     * 第2引数の awbPath にはストリーム再生用のAWBファイルのパスを、それぞれ指定します。<br/>
     * (オンメモリ再生のみのACBデータをロードする場合、
     * awbPath にセットした値は無視されます。)<br/>
     * <br/>
     * AWBファイルをCPKファイルにパッキングしている場合、
     * 第2引数( binder )にCPKファイルをバインドしたCriFsBinderオブジェクトを指定する必要があります。<br/>
     * <br/>
     * ACBデータをロードすると、ACBデータにアクセスするためのCriAtomExAcbオブジェクト
     * ( ::CriAtomExAcb )が返されます。<br/>
     * AtomExプレーヤに対し、 ::CriAtomExPlayer::SetCue 関数でACBハンドル、
     * および再生するキュー名を指定することで、
     * ACBファイル内のキューを再生することが可能です。<br/>
     * <br/>
     * リードエラー等によりACBファイルのロードに失敗した場合、
     * 本関数は戻り値として null を返します。<br/>
     * \attention
     * 本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/>
     * <br/>
     * ACBハンドルは内部的にバインダ( CriFsBinder )を確保します。<br/>
     * ACBファイルをロードする場合、
     * ACBファイル数分のバインダが確保できる設定でライブラリを初期化する必要があります。<br/>
     * <br/>
     * 本関数は完了復帰型の関数です。<br/>
     * ACBファイルのロードにかかる時間は、プラットフォームによって異なります。<br/>
     * ゲームループ等の画面更新が必要なタイミングで本関数を実行するとミリ秒単位で
     * 処理がブロックされ、フレーム落ちが発生する恐れがあります。<br/>
     * ACBファイルのロードは、シーンの切り替わり等、負荷変動を許容できる
     * タイミングで行うようお願いいたします。<br/>
     * \sa criAtomExAcb_CalculateWorkSizeForLoadAcbFile, CriAtomExAcbHn, criAtomExPlayer_SetCueId
     */
    public static CriAtomExAcb LoadAcbData(byte[] acbData, CriFsBinder awbBinder, string awbPath)
    {
        IntPtr binderHandle = (awbBinder != null) ? awbBinder.nativeHandle : IntPtr.Zero;
        IntPtr handle       = criAtomExAcb_LoadAcbData(
            acbData, acbData.Length, binderHandle, awbPath, IntPtr.Zero, 0);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        return(new CriAtomExAcb(handle, acbData));
    }
예제 #16
0
    private IEnumerator LoadAcbFileCoroutine(CriAtomCueSheet cueSheet, CriFsBinder binder, string acbPath, string awbPath, bool loadAwbOnMemory)
    {
        cueSheet.loaderStatus = CriAtomExAcbLoader.Status.Loading;

        if ((binder == null) && CriWare.Common.IsStreamingAssetsPath(acbPath))
        {
            acbPath = Path.Combine(CriWare.Common.streamingAssetsPath, acbPath);
        }

        if (!String.IsNullOrEmpty(awbPath))
        {
            if ((binder == null) && CriWare.Common.IsStreamingAssetsPath(awbPath))
            {
                awbPath = Path.Combine(CriWare.Common.streamingAssetsPath, awbPath);
            }
        }

        while (this.acfIsLoading)
        {
            yield return(null);
        }

        using (var asyncLoader = CriAtomExAcbLoader.LoadAcbFileAsync(binder, acbPath, awbPath, loadAwbOnMemory)) {
            if (asyncLoader == null)
            {
                cueSheet.loaderStatus = CriAtomExAcbLoader.Status.Error;
                yield break;
            }

            while (true)
            {
                var status = asyncLoader.GetStatus();
                cueSheet.loaderStatus = status;
                if (status == CriAtomExAcbLoader.Status.Complete)
                {
                    cueSheet.acb = asyncLoader.MoveAcb();
                    break;
                }
                else if (status == CriAtomExAcbLoader.Status.Error)
                {
                    break;
                }
                yield return(null);
            }
        }
    }
예제 #17
0
    private CriAtomExAcb LoadAcbData(byte[] acbData, CriFsBinder binder, string awbFile)
    {
        if (acbData == null)
        {
            return(null);
        }

        string awbPath = awbFile;

        if (!String.IsNullOrEmpty(awbPath))
        {
            if ((binder == null) && CriWare.IsStreamingAssetsPath(awbPath))
            {
                awbPath = Path.Combine(CriWare.streamingAssetsPath, awbPath);
            }
        }

        return(CriAtomExAcb.LoadAcbData(acbData, binder, awbPath));
    }
예제 #18
0
    /**
     * <summary>ACBデータの非同期ロード</summary>
     * <param name="acbData">ACBデータのバイト配列</param>
     * <param name="awbBinder">AWB用バインダオブジェクト</param>
     * <param name="awbPath">AWBファイルのパス</param>
     * <param name="loadAwbOnMemory">AWBファイルをメモリ上にロードするか(オプション)</param>
     * <returns>CriAtomExAcbLoaderオブジェクト</returns>
     * \par 説明:
     * ACBデータの非同期ロードを開始します。<br/>
     * 戻り値に対して ::CriAtomExAcbLoader::GetStatus を呼び出してロード状態を確認し、
     * 状態が Complete に遷移したら、 ::CriAtomExAcbLoader::MoveAcb により ::CriAtomExAcb が取得可能です。<br>
     */
    public static CriAtomExAcbLoader LoadAcbDataAsync(byte[] acbData, CriFsBinder awbBinder, string awbPath, bool loadAwbOnMemory = false)
    {
        IntPtr       binderHandle = (awbBinder != null) ? awbBinder.nativeHandle : IntPtr.Zero;
        LoaderConfig config       = new LoaderConfig();

        config.shouldLoadAwbOnMemory = loadAwbOnMemory;
        IntPtr handle = criAtomExAcbLoader_Create(ref config);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        bool result = criAtomExAcbLoader_LoadAcbDataAsync(handle, acbData, acbData.Length, binderHandle, awbPath);

        if (result == false)
        {
            return(null);
        }
        return(new CriAtomExAcbLoader(handle, acbData));
    }
예제 #19
0
    /**
     * <summary>ACBファイルのロード</summary>
     * <param name="binder">バインダオブジェクト</param>
     * <param name="acbPath">ACBファイルのパス</param>
     * <param name="awbPath">AWBファイルのパス</param>
     * <returns>CriAtomExAcbオブジェクト</returns>
     * \par 説明:
     * ACBファイルをロードし、キュー再生に必要な情報を取り込みます。<br/>
     * <br/>
     * 第2引数の acbPath にはオンメモリ再生用のACBファイルのパスを、
     * 第3引数の awbPath にはストリーム再生用のAWBファイルのパスを、それぞれ指定します。<br/>
     * (オンメモリ再生のみのACBデータをロードする場合、
     * awbPath にセットした値は無視されます。)<br/>
     * <br/>
     * ACBファイルとAWBファイルを一つのCPKファイルにパッキングしている場合、
     * 第1引数( binder )にCPKファイルをバインドしたCriFsBinderオブジェクトを指定する必要があります。<br/>
     * <br/>
     * ACBファイルをロードすると、ACBデータにアクセスするためのCriAtomExAcbオブジェクト
     * ( ::CriAtomExAcb )が返されます。<br/>
     * AtomExプレーヤに対し、 ::CriAtomExPlayer::SetCue 関数でACBハンドル、
     * および再生するキュー名を指定することで、
     * ACBファイル内のキューを再生することが可能です。<br/>
     * <br/>
     * リードエラー等によりACBファイルのロードに失敗した場合、
     * 本関数は戻り値として null を返します。<br/>
     * \attention
     * 本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/>
     * <br/>
     * ACBハンドルは内部的にバインダ( CriFsBinder )を確保します。<br/>
     * ACBファイルをロードする場合、
     * ACBファイル数分のバインダが確保できる設定でライブラリを初期化する必要があります。<br/>
     * <br/>
     * 本関数は完了復帰型の関数です。<br/>
     * ACBファイルのロードにかかる時間は、プラットフォームによって異なります。<br/>
     * ゲームループ等の画面更新が必要なタイミングで本関数を実行するとミリ秒単位で
     * 処理がブロックされ、フレーム落ちが発生する恐れがあります。<br/>
     * ACBファイルのロードは、シーンの切り替わり等、負荷変動を許容できる
     * タイミングで行うようお願いいたします。<br/>
     * \sa criAtomExAcb_CalculateWorkSizeForLoadAcbFile, CriAtomExAcbHn, criAtomExPlayer_SetCueId
     */
    public static CriAtomExAcb LoadAcbFile(CriFsBinder binder, string acbPath, string awbPath)
    {
        /* バージョン番号が不正なライブラリではキューシートをロードしない */
        /* 備考)不正に差し替えられたsoファイルを使用している可能性あり。 */
        bool isCorrectVersion = CriWare.CheckBinaryVersionCompatibility();

        if (isCorrectVersion == false)
        {
            return(null);
        }

        IntPtr binderHandle = (binder != null) ? binder.nativeHandle : IntPtr.Zero;
        IntPtr handle       = criAtomExAcb_LoadAcbFile(
            binderHandle, acbPath, binderHandle, awbPath, IntPtr.Zero, 0);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        return(new CriAtomExAcb(handle, null));
    }
예제 #20
0
    private IEnumerator LoadAcbFileCoroutine(CriAtomCueSheet cueSheet, CriFsBinder binder, string acbPath, string awbPath)
    {
        if ((binder == null) && CriWare.IsStreamingAssetsPath(acbPath))
        {
            acbPath = Path.Combine(CriWare.streamingAssetsPath, acbPath);
        }

        if (!String.IsNullOrEmpty(awbPath))
        {
            if ((binder == null) && CriWare.IsStreamingAssetsPath(awbPath))
            {
                awbPath = Path.Combine(CriWare.streamingAssetsPath, awbPath);
            }
        }

        while (this.acfIsLoading)
        {
            yield return(new WaitForEndOfFrame());
        }

        using (var async = CriAtomExAcbAsync.LoadAcbFile(binder, acbPath, awbPath)) {
            cueSheet.async = async;
            while (true)
            {
                var status = async.GetStatus();
                if (status == CriAtomExAcbAsync.Status.Complete)
                {
                    cueSheet.acb = async.MoveAcb();
                    break;
                }
                else if (status == CriAtomExAcbAsync.Status.Error)
                {
                    break;
                }
                yield return(new WaitForEndOfFrame());
            }
            cueSheet.async = null;
        }
    }
예제 #21
0
    /**
     * <summary>ACBデータのロード</summary>
     * <param name='acbData'>ACBデータのバイト配列</param>
     * <param name='awbBinder'>AWB用バインダオブジェクト</param>
     * <param name='awbPath'>AWBファイルのパス</param>
     * <returns>CriAtomExAcbオブジェクト</returns>
     * <remarks>
     * <para header='説明'>メモリ上に配置されたACBデータをロードし、キュー再生に必要な情報を取り込みます。<br/>
     * <br/>
     * 第2引数の awbPath にはストリーム再生用のAWBファイルのパスを、それぞれ指定します。<br/>
     * (オンメモリ再生のみのACBデータをロードする場合、
     * awbPath にセットした値は無視されます。)<br/>
     * <br/>
     * AWBファイルをCPKファイルにパッキングしている場合、
     * 第2引数( binder )にCPKファイルをバインドしたCriFsBinderオブジェクトを指定する必要があります。<br/>
     * <br/>
     * ACBデータをロードすると、ACBデータにアクセスするためのCriAtomExAcbオブジェクト
     * ( ::CriAtomExAcb )が返されます。<br/>
     * AtomExプレーヤに対し、 ::CriAtomExPlayer::SetCue 関数でACBハンドル、
     * および再生するキュー名を指定することで、
     * ACBファイル内のキューを再生することが可能です。<br/>
     * <br/>
     * リードエラー等によりACBファイルのロードに失敗した場合、
     * 本関数は戻り値として null を返します。<br/></para>
     * <para header='注意'>本関数を実行する前に、ライブラリを初期化しておく必要があります。<br/>
     * <br/>
     * ACBハンドルは内部的にバインダ( CriFsBinder )を確保します。<br/>
     * ACBファイルをロードする場合、
     * ACBファイル数分のバインダが確保できる設定でライブラリを初期化する必要があります。<br/>
     * <br/>
     * 本関数は完了復帰型の関数です。<br/>
     * ACBファイルのロードにかかる時間は、プラットフォームによって異なります。<br/>
     * ゲームループ等の画面更新が必要なタイミングで本関数を実行するとミリ秒単位で
     * 処理がブロックされ、フレーム落ちが発生する恐れがあります。<br/>
     * ACBファイルのロードは、シーンの切り替わり等、負荷変動を許容できる
     * タイミングで行うようお願いいたします。<br/></para>
     * </remarks>
     * <seealso cref='criAtomExAcb_CalculateWorkSizeForLoadAcbFile'/>
     * <seealso cref='CriAtomExAcbHn'/>
     * <seealso cref='criAtomExPlayer_SetCueId'/>
     */
    public static CriAtomExAcb LoadAcbData(byte[] acbData, CriFsBinder awbBinder, string awbPath)
    {
        /* バージョン番号が不正なライブラリではキューシートをロードしない */
        /* 備考)不正に差し替えられたsoファイルを使用している可能性あり。 */
        bool isCorrectVersion = CriWare.Common.CheckBinaryVersionCompatibility();

        if (isCorrectVersion == false)
        {
            return(null);
        }

        IntPtr   binderHandle = (awbBinder != null) ? awbBinder.nativeHandle : IntPtr.Zero;
        GCHandle gch          = GCHandle.Alloc(acbData, GCHandleType.Pinned);
        IntPtr   handle       = criAtomExAcb_LoadAcbData(
            gch.AddrOfPinnedObject(), acbData.Length, binderHandle, awbPath, IntPtr.Zero, 0);

        if (handle == IntPtr.Zero)
        {
            return(null);
        }
        return(new CriAtomExAcb(handle, gch));
    }
예제 #22
0
 /**
  * <summary>キューシートの追加</summary>
  * <param name="name">キューシート名</param>
  * <param name="acbFile">ACBファイルパス</param>
  * <param name="awbFile">AWBファイルパス</param>
  * <param name="binder">バインダオブジェクト(オプション)</param>
  * <returns>キューシートオブジェクト</returns>
  * \par 説明:
  * 引数に指定したファイルパス情報を元にキューシートの追加を行います。<br/>
  * 同時に複数のキューシートを登録することが可能です。<br/>
  * <br/>
  * 各ファイルパスに対して相対パスを指定した場合は StreamingAssets フォルダからの相対でファイルをロードします。<br/>
  * 絶対パス、あるいはURLを指定した場合には指定したパスでファイルをロードします。<br/>
  * <br/>
  * CPKファイルにパッキングされたACBファイルとAWBファイルからキューシートを追加する場合は、
  * binder引数にCPKをバインドしたバインダを指定してください。<br/>
  * なお、バインダ機能はADX2LEではご利用になれません。<br/>
  */
 public static CriAtomCueSheet AddCueSheet(string name, string acbFile, string awbFile, CriFsBinder binder = null)
 {
     return(CriAtom.instance.AddCueSheetInternal(name, acbFile, awbFile, binder));
 }
예제 #23
0
	/**
	 * <summary>音声データのセット(ファイル名の指定)</summary>
	 * <param name="binder">バインダオブジェクト</param>
	 * <param name="path">ファイルパス</param>
	 * \par 説明:
	 * 音声ファイルをAtomExプレーヤに関連付けます。<br/>
	 * 本関数でファイルを指定後、 ::CriAtomExPlayer::Start 関数で再生を開始すると、
	 * 指定されたファイルがストリーミング再生されます。<br/>
	 * 尚、本関数を実行した時点では、ファイルの読み込みは開始されません。<br/>
	 * ファイルの読み込みが開始されるのは、 ::CriAtomExPlayer::Start 関数実行後です。<br/>
	 * \par 例:
	 * \code
	 * 		:
	 * 	// プレーヤの作成
	 * 	CriAtomExPlayer player = new CriAtomExPlayer();
	 * 	
	 * 	// 音声ファイルをセット
	 * 	player.SetFile(null, "sample.hca");
	 * 	
	 * 	// 再生する音声データのフォーマットを指定
	 * 	player.SetFormat(CriAtomEx.Format.HCA);
	 * 	player.SetNumChannels(2);
	 * 	player.SetSamplingRate(48000);
	 * 	
	 * 	// セットされた音声データを再生
	 * 	player.Start();
	 * 		:
	 * \endcode
	 * 尚、一旦セットしたファイルの情報は、
	 * 他のデータがセットされるまでAtomExプレーヤ内に保持されます。<br/>
	 * そのため、同じデータを何度も再生する場合には、
	 * 再生毎にデータをセットしなおす必要はありません。<br/>
	 * ( ::CriAtomExPlayer::Start 関数を繰り返し実行可能です。)
	 * \attention
	 * 本関数を使用する場合、AtomExプレーヤを単体ファイル再生用に作成する必要があります。<br/>
	 * 具体的には、 ::CriAtomExPlayer::CriAtomExPlayer() の代わりに、
	 * ::CriAtomExPlayer::CriAtomExPlayer(int, int) を使用する必要があります。<br/>
	 * <br/>
	 * ::CriAtomExPlayer::SetFile 関数で音声データをセットする場合、
	 * 以下の関数を使用して再生する音声データの情報を別途指定する必要があります。<br/>
	 * 	- ::CriAtomExPlayer::SetFormat
	 * 	- ::CriAtomExPlayer::SetNumChannels
	 * 	- ::CriAtomExPlayer::SetSamplingRate
	 * 	.
	 * \sa CriAtomExPlayer::CriAtomExPlayer(int, int),
	 * CriAtomExPlayer::Start, CriAtomExPlayer::SetFormat,
	 * CriAtomExPlayer::SetNumChannels, CriAtomExPlayer::SetSamplingRate
	 */
	public void SetFile(CriFsBinder binder, string path)
	{
		criAtomExPlayer_SetFile(this.handle, 
			(binder != null) ? binder.nativeHandle : IntPtr.Zero, path);
	}
예제 #24
0
    /**
     * <summary>キューシートの追加(メモリからの読み込み)</summary>
     * <param name="name">キューシート名</param>
     * <param name="acbData">ACBデータ</param>
     * <param name="awbFile">AWBファイルパス</param>
     * <param name="awbBinder">AWB用バインダオブジェクト(オプション)</param>
     * <returns>キューシートオブジェクト</returns>
     * \par 説明:
     * 引数に指定したデータとファイルパス情報からキューシートの追加を行います。<br/>
     * 同時に複数のキューシートを登録することが可能です。<br/>
     * <br/>
     * ファイルパスに対して相対パスを指定した場合は StreamingAssets フォルダからの相対でファイルをロードします。<br/>
     * 絶対パス、あるいはURLを指定した場合には指定したパスでファイルをロードします。<br/>
     * <br/>
     * CPKファイルにパッキングされたAWBファイルからキューシートを追加する場合は、
     * awbBinder引数にCPKをバインドしたバインダを指定してください。<br/>
     * なお、バインダ機能はADX2LEではご利用になれません。<br/>
     */
    public static CriAtomCueSheet AddCueSheet(string name, byte[] acbData, string awbFile, CriFsBinder awbBinder = null)
    {
        CriAtomCueSheet cueSheet = CriAtom.instance.AddCueSheetInternal(name, "", awbFile, awbBinder);

        if (Application.isPlaying)
        {
            cueSheet.acb = CriAtom.instance.LoadAcbData(acbData, awbBinder, awbFile);
        }
        return(cueSheet);
    }
예제 #25
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    public CriFsBindRequest(BindType type, CriFsBinder targetBinder, CriFsBinder srcBinder, string path)
    {
        /* パスの保存 */
        this.path = path;

        /* バインド種別のチェック */
        switch (type) {
            case BindType.Cpk:
            this.bindId = targetBinder.BindCpk(srcBinder, path);
            break;

            case BindType.Directory:
            this.bindId = targetBinder.BindDirectory(srcBinder, path);
            break;

            case BindType.File:
            this.bindId = targetBinder.BindFile(srcBinder, path);
            break;

            default:
            throw new Exception("Invalid bind type.");
        }
    }
예제 #26
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>ファイルのロードを開始します。</summary>
  * <param name="binder">バインダ</param>
  * <param name="path">ファイルパス</param>
  * <param name="readUnitSize">内部で使用するCriFsLoaderの読み込み単位サイズ</param>
  * <returns>CriFsLoadFileRequest</returns>
  * \par 説明:
  * バインド済みのファイルの読み込みを開始します。<br/>
  * <br/>
  * 本関数は即時復帰関数です。<br/>
  * ロードの完了をチェックするには、 ::CriFsLoadFileRequest::isDone を確認する必要があります。<br/>
  * ロード処理中にエラーが発生した場合、 ::CriFsLoadFileRequest::error にエラー情報が格納されます。<br/>
  * \par 備考:
  * 第一引数にバインダを指定する点以外は、 ::CriFsUtility::LoadFile(string) 関数と同じです。<br/>
  * \sa
  * CriFsLoadFileRequest, CriFsUtility::LoadFile(string)
  */
 public static CriFsLoadFileRequest LoadFile(CriFsBinder binder, string path, int readUnitSize = DefaultReadUnitSize)
 {
     return CriFsServer.instance.LoadFile(binder, path, null, readUnitSize);
 }
예제 #27
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>ファイルのインストールを開始します。</summary>
  * <param name="srcBinder">インストール元バインダ</param>
  * <param name="srcPath">インストール元ファイルパス</param>
  * <param name="dstPath">インストール先ファイルパス</param>
  * <returns>CriFsInstallRequest</returns>
  * \par 説明:
  * バインド済のファイルのインストールを開始します。<br/>
  * インストール元ファイルパスをsrcPath、インストール先ファイルパスをdstPathで指定します。<br/>
  * <br/>
  * 本関数は即時復帰関数です。<br/>
  * インストールの完了をチェックするには、 ::CriFsInstallRequest::isDone を確認する必要があります。<br/>
  * インストール処理中にエラーが発生した場合、 ::CriFsInstallRequest::error にエラー情報が格納されます。<br/>
  * \par 備考:
  * 第一引数にバインダを指定する点以外は、 ::CriFsUtility::Install(string, string) 関数と同じです。<br/>
  * (本関数は、CPKファイル内のコンテンツを、ファイルとして書き出す際にのみ使用します。)<br/>
  * \sa
  * CriFsInstallRequest, CriFsUtility::Install(string, string)
  */
 public static CriFsInstallRequest Install(CriFsBinder srcBinder, string srcPath, string dstPath)
 {
     return CriFsServer.instance.Install(srcBinder, srcPath, dstPath, null);
 }
예제 #28
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>ディレクトリパスのバインドを開始します。</summary>
  * <param name="targetBinder">バインド先バインダ</param>
  * <param name="srcPath">バインドするディレクトリのパス名</param>
  * \par 説明:
  * ディレクトリパス名をバインドします。<br/>
  * <br/>
  * 本関数は即時復帰関数です。<br/>
  * バインドの完了をチェックするには、 ::CriFsBindRequest::isDone を確認する必要があります。<br/>
  * バインド処理中にエラーが発生した場合、 ::CriFsBindRequest::error にエラー情報が格納されます。<br/>
  * <br/>
  * StreamingAssetsフォルダ以下のディレクトリをバインドする場合は、 ::CriWare::streamingAssetsPath を
  * ファイルパスの前に連結してください。
  * \par 備考:
  * バインド時に指定されたディレクトリが存在するか否かはチェックしていません。<br/>
  * バインダ内に保持されるのはディレクトリパスだけで、
  * 指定されたディレクトリ内のファイルをオープン状態にするものではありません。<br/>
  * \attention
  * 本関数は開発支援用のデバッグ関数です。<br/>
  * 本関数を使用した場合、以下の問題が発生する可能性があります。<br/>
  * - ::CriFsLoader::Load 関数や ::CriFsBinder::GetFileSize 関数内で処理が長時間ブロックされる。<br/>
  * - バインドしたディレクトリ内のファイルにアクセスする際、音声やムービーのストリーム再生が途切れる。<br/>
  * \attention
  * マスターアップ時には本関数をアプリケーション中で使用しないようご注意ください。<br/>
  * (ディレクトリ内のデータをCPKファイル化して ::CriFsUtility::BindCpk 関数でバインドするか、
  * またはディレクトリ内のファイルを全て ::CriFsUtility::BindFile 関数でバインドしてください。)<br/>
  * \sa
  * CriFsBindRequest, CriFsUtility::BindCpk, CriFsUtility::BindFile
  */
 public static CriFsBindRequest BindDirectory(CriFsBinder targetBinder, string srcPath)
 {
     return CriFsServer.instance.BindDirectory(targetBinder, null, srcPath);
 }
예제 #29
0
    public CriAtomCueSheet AddCueSheetInternal(string name, string acbFile, string awbFile, CriFsBinder binder)
    {
        var cueSheets = new CriAtomCueSheet[this.cueSheets.Length + 1];
        this.cueSheets.CopyTo(cueSheets, 0);
        this.cueSheets = cueSheets;

        var cueSheet = new CriAtomCueSheet();
        this.cueSheets[this.cueSheets.Length - 1] = cueSheet;
        if (String.IsNullOrEmpty(name)) {
            cueSheet.name = Path.GetFileNameWithoutExtension(acbFile);
        } else {
            cueSheet.name = name;
        }
        cueSheet.acbFile = acbFile;
        cueSheet.awbFile = awbFile;
        if (Application.isPlaying) {
            cueSheet.acb = this.LoadAcbFile(acbFile, awbFile);
        }
        return cueSheet;
    }
예제 #30
0
 public CriFsInstallRequest Install(CriFsBinder srcBinder, string srcPath, string dstPath, CriFsRequest.DoneDelegate doneDelegate)
 {
     var request = new CriFsInstallRequest(srcBinder, srcPath, dstPath, doneDelegate, this.installBufferSize);
     this.requestList.Add(request);
     return request;
 }
예제 #31
0
 public CriFsLoadFileRequest LoadFile(CriFsBinder binder, string path, CriFsRequest.DoneDelegate doneDelegate, int readUnitSize)
 {
     var request = new CriFsLoadFileRequest(binder, path, doneDelegate, readUnitSize);
     this.AddRequest(request);
     return request;
 }
예제 #32
0
 public CriFsLoadAssetBundleRequest LoadAssetBundle(CriFsBinder binder, string path, int readUnitSize)
 {
     var request = new CriFsLoadAssetBundleRequest(binder, path, readUnitSize);
     this.AddRequest(request);
     return request;
 }
예제 #33
0
    /**
     * <summary>ACFファイルの登録</summary>
     * <param name="binder">バインダ</param>
     * <param name="acfPath">ACFファイルのファイルパス</param>
     * \par 説明:
     * ACFファイルをロードし、ライブラリに取り込みます。<br/>
     * \sa CriAtomEx::UnregisterAcf
     */
    public static void RegisterAcf(CriFsBinder binder, string acfPath)
    {
        IntPtr binderHandle = (binder != null) ? binder.nativeHandle : IntPtr.Zero;

        criAtomEx_RegisterAcfFile(binderHandle, acfPath, IntPtr.Zero, 0);
    }
예제 #34
0
    /**
     * <summary>キューシートの追加(メモリからの読み込み)</summary>
     * <param name="name">キューシート名</param>
     * <param name="acbData">ACBデータ</param>
     * <param name="awbFile">AWBファイルパス</param>
     * <param name="awbBinder">AWB用バインダオブジェクト(オプション)</param>
     * <returns>キューシートオブジェクト</returns>
     * \par 説明:
     * 引数に指定したデータとファイルパス情報からキューシートの追加を行います。<br/>
     * 同時に複数のキューシートを登録することが可能です。<br/>
     * <br/>
     * ファイルパスに対して相対パスを指定した場合は StreamingAssets フォルダからの相対でファイルをロードします。<br/>
     * 絶対パス、あるいはURLを指定した場合には指定したパスでファイルをロードします。<br/>
     * <br/>
     * CPKファイルにパッキングされたAWBファイルからキューシートを追加する場合は、
     * awbBinder引数にCPKをバインドしたバインダを指定してください。<br/>
     * なお、バインダ機能はADX2LEではご利用になれません。<br/>
     */
    public static CriAtomCueSheet AddCueSheet(string name, byte[] acbData, string awbFile, CriFsBinder awbBinder = null)
    {
        CriAtomCueSheet cueSheet = CriAtom.instance.AddCueSheetInternal(name, "", awbFile, awbBinder);

        if (Application.isPlaying)
        {
                #if (!UNITY_EDITOR || UNITY_EDITOR_OSX) && UNITY_WEBGL
            CriAtom.instance.LoadAcbDataAsync(cueSheet, acbData, awbBinder, awbFile);
                #else
            cueSheet.acb = CriAtom.instance.LoadAcbData(acbData, awbBinder, awbFile);
                #endif
        }
        return(cueSheet);
    }
 // コンストラクタ
 public BinderData(uint _bindId, CriFsBinder _binder)
 {
     m_bindId   = _bindId;
     m_binder   = _binder;
     m_refCount = 0;
 }
예제 #36
0
 public static CriAtomCueSheet AddCueSheet(string name, string acbFile, string awbFile, CriFsBinder binder)
 {
     return CriAtom.instance.AddCueSheetInternal(name, acbFile, awbFile, binder);
 }
예제 #37
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>ファイルのバインドを開始します。</summary>
  * <param name="targetBinder">バインド先バインダ</param>
  * <param name="srcBinder">バインドするファイルにアクセスするためのバインダ</param>
  * <param name="srcPath">ファイルパス</param>
  * <returns>CriFsBindRequest</returns>
  * \par 説明:
  * ファイルのバインドを開始します。<br/>
  * ::CriFsUtility::BindFile(CriFsBinder, string) に加え、
  * CPKファイル内のファイルにアクセスするためのバインダが指定可能です<br/>
  * <br/>
  * 本関数は即時復帰関数です。<br/>
  * バインドの完了をチェックするには、 ::CriFsBindRequest::isDone を確認する必要があります。<br/>
  * バインド処理中にエラーが発生した場合、 ::CriFsBindRequest::error にエラー情報が格納されます。<br/>
  * \sa
  * CriFsBindRequest, CriFsUtility::BindFile(CriFsBinder, string)
  */
 public static CriFsBindRequest BindFile(CriFsBinder targetBinder, CriFsBinder srcBinder, string srcPath)
 {
     return CriFsServer.instance.BindFile(targetBinder, srcBinder, srcPath);
 }
예제 #38
0
 /**
  * <summary>キューシートの追加(メモリからの読み込み)</summary>
  * <param name='name'>キューシート名</param>
  * <param name='acbData'>ACBデータ</param>
  * <param name='awbFile'>AWBファイルパス</param>
  * <param name='awbBinder'>AWB用バインダオブジェクト(オプション)</param>
  * <returns>キューシートオブジェクト</returns>
  * <remarks>
  * <para header='説明'>引数に指定したデータとファイルパス情報からキューシートの追加を行います。<br/>
  * 同時に複数のキューシートを登録することが可能です。<br/>
  * <br/>
  * ファイルパスに対して相対パスを指定した場合は StreamingAssets フォルダからの相対でファイルをロードします。<br/>
  * 絶対パス、あるいはURLを指定した場合には指定したパスでファイルをロードします。<br/>
  * <br/>
  * CPKファイルにパッキングされたAWBファイルからキューシートを追加する場合は、
  * awbBinder引数にCPKをバインドしたバインダを指定してください。<br/>
  * なお、バインダ機能はADX2LEではご利用になれません。<br/></para>
  * </remarks>
  */
 public static CriAtomCueSheet AddCueSheet(string name, byte[] acbData, string awbFile, CriFsBinder awbBinder = null)
 {
     #if CRIWARE_FORCE_LOAD_ASYNC
     return(CriAtom.AddCueSheetAsync(name, acbData, awbFile, awbBinder));
     #else
     CriAtomCueSheet cueSheet = CriAtom.instance.AddCueSheetInternal(name, "", awbFile, awbBinder);
     if (Application.isPlaying)
     {
         cueSheet.acb = CriAtom.instance.LoadAcbData(acbData, awbBinder, awbFile);
     }
     return(cueSheet);
     #endif
 }
예제 #39
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 public static CriFsInstallRequest Install(CriFsBinder srcBinder, string srcPath, string dstPath, CriFsRequest.DoneDelegate doneDeleagate)
 {
     return CriFsServer.instance.Install(srcBinder, srcPath, dstPath, doneDeleagate);
 }
예제 #40
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 public CriFsInstallRequest(CriFsBinder srcBinder, string srcPath, string dstPath, CriFsRequest.DoneDelegate doneDelegate, int installBufferSize)
 {
     this.sourcePath = srcPath;
     this.destinationPath = dstPath;
     this.doneDelegate = doneDelegate;
     this.progress = 0.0f;
     this.installer = new CriFsInstaller();
     this.installer.Copy(srcBinder, srcPath, dstPath, installBufferSize);
 }
예제 #41
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>ファイルをバインドします。</summary>
  * <param name="srcBinder">バインドするファイルにアクセスするためのバインダ</param>
  * <param name="path">バインドするファイルのパス名</param>
  * <returns>バインドID</returns>
  * \par 説明:
  * ファイルをバインドし、バインドIDを返します。<br/>
  * (srcBinderのバインダからpathで指定されたファイルを検索してバインドします。)<br/>
  * srcBinderがnullの場合、デフォルトデバイスを使用します。<br/>
  * <br/>
  * バインドを開始できない場合、バインドIDは0が返されます。<br/>
  * バインドIDに0以外が返された場合は内部リソースを確保していますので、<br/>
  * 不要になったバインドIDは必ずアンバインドしてください。<br/>
  * (バインド中のCPKファイルは、オープンされた状態で保持されます。)<br/>
  * <br/>
  * 本関数は即時復帰関数です。<br/>
  * 本関数から復帰した直後はファイルのバインドはまだ完了しておらず、
  * バインドIDを利用したファイルへのアクセスは行えません。<br/>
  * バインドIDのバインド状態が完了( Complete )となった後に、
  * ファイルは利用可能となります。<br/>
  * バインド状態は ::CriFsBinder::GetStatus 関数で取得します。<br/>
  * \sa CriFsBinder::GetStatus, CriFsBinder::Unbind
  */
 public uint BindFile(CriFsBinder srcBinder, string path)
 {
     uint bindId;
     criFsBinder_BindFile(this.handle,
         (srcBinder != null) ? srcBinder.nativeHandle : IntPtr.Zero,
         path, IntPtr.Zero, 0, out bindId);
     return bindId;
 }
예제 #42
0
    /* シーン初期化処理 */
    void OnEnable()
    {
        /* バインダの作成 */
        /* ファイルバインド、CPKバインド、ディレクトリバインド等のバインド機能を使う場合、*/
        /* アプリケーションが明示的にバインダを作成する必要があります。 */
        this.binder = new CriFsBinder();

        /* パスの作成 */
        /* インストール先のパスを作成 */
        this.localCpkPath = Path.Combine(CriWare.installTargetPath, CpkFilename);

        /* インストール元のパスを作成 */
        this.remoteCpkPath = Path.Combine(RemoteUrl, CpkFilename);
    }
예제 #43
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>ファイルをコピーします。</summary>
  * <param name="binder">バインダ</param>
  * <param name="srcPath">コピー元ファイルパス名</param>
  * <param name="dstPath">コピー先ファイルパス名</param>
  * \par 説明:
  * ファイルのコピーを開始します。<br/>
  * <br/>
  * 本関数は即時復帰関数です。<br/>
  * コピーの完了状態を取得するには ::CriFsInstaller::GetStatus 関数を使用してください。
  * \sa CriFsInstaller::GetStatus
  */
 public void Copy(CriFsBinder binder, string srcPath, string dstPath, int installBufferSize)
 {
     string copySrcPath = srcPath;
     if (copySrcPath.StartsWith("http:") || copySrcPath.StartsWith("https:")) {
         /* HTTP I/Oを使用したインストールはセカンダリ HTTP I/O デバイスを使用する */
         copySrcPath = "net2:" + copySrcPath;
     }
     if (installBufferSize > 0) {
         this.installBuffer    = new byte[installBufferSize];
         this.installBufferGch = GCHandle.Alloc(this.installBuffer, GCHandleType.Pinned);
         criFsInstaller_Copy(this.handle,
             (binder != null) ? binder.nativeHandle : IntPtr.Zero,
             copySrcPath, dstPath, this.installBufferGch.AddrOfPinnedObject(), this.installBuffer.Length);
     }
     else {
         criFsInstaller_Copy(this.handle,
             (binder != null) ? binder.nativeHandle : IntPtr.Zero,
             copySrcPath, dstPath, IntPtr.Zero, 0);
     }
 }
예제 #44
0
    /* シーン終了処理 */
    void OnDisable()
    {
        /* シーンのリセット */
        this.reset();

        /* アンバインド処理の実行 */
        this.UnbindCpk();

        /* バインダの破棄 */
        /* アプリケーションはバインダを使い終わった際に明示的に破棄する必要があります。 */
        this.binder.Dispose();
        this.binder = null;
    }
예제 #45
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 public CriFsLoadAssetBundleRequest(CriFsBinder binder, string path, int readUnitSize)
 {
     this.path = path;
     this.loadFileReq = CriFsUtility.LoadFile(binder, path, readUnitSize);
 }
예제 #46
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
 /**
  * <summary>データのロードを開始します。</summary>
  * <param name="binder">バインダ</param>
  * <param name="id">ファイルID</param>
  * <param name="fileOffset">ファイルの先頭からのオフセット位置(単位はバイト)</param>
  * <param name="loadSize">ロード要求サイズ(単位はバイト)</param>
  * <param name="buffer">ロード先バッファ</param>
  * \par 説明:
  * 指定されたバインダとファイルIDで、データの読み込みを開始します。<br/>
  * ファイル内のfileOffsetバイト目から、loadSizeバイト分読み込みます。<br/>
  * 本関数は即時復帰関数です。<br/>
  * ロードの完了状態を取得するには ::CriFsLoader::GetStatus 関数を使用してください。<br/>
  * \sa CriFsLoader::GetStatus
  */
 public void LoadById(CriFsBinder binder, int id, long fileOffset, long loadSize, byte[] buffer)
 {
     this.gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);
     criFsLoader_LoadById(this.handle,
         (binder != null) ? binder.nativeHandle : IntPtr.Zero, id,
         fileOffset, loadSize, this.gch.AddrOfPinnedObject(), buffer.Length);
 }
예제 #47
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    public CriFsLoadFileRequest(CriFsBinder srcBinder, string path, CriFsRequest.DoneDelegate doneDelegate, int readUnitSize)
    {
        /* パスの保存 */
        this.path = path;

        /* 完了コールバック指定 */
        this.doneDelegate = doneDelegate;

        /* readUnitSizeの保存 */
        this.readUnitSize = readUnitSize;

        /* ファイルのバインド要求 */
        if (srcBinder == null) {
            this.newBinder = new CriFsBinder();
            this.refBinder = this.newBinder;
            this.bindId = this.newBinder.BindFile(srcBinder, path);
            this.phase = Phase.Bind;
        } else {
            this.newBinder = null;
            this.refBinder = srcBinder;
            this.fileSize = srcBinder.GetFileSize(path);
            if (this.fileSize < 0) {
                this.phase = Phase.Error;
            } else {
                this.phase = Phase.Load;
            }
        }
    }
예제 #48
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    public override void Dispose()
    {
        if (this.isDisposed) {
            return;
        }

        /* ローダの破棄 */
        if (this.loader != null) {
            this.loader.Dispose();
            this.loader = null;
        }

        /* バインダの破棄 */
        if (this.newBinder != null) {
            this.newBinder.Dispose();
            this.newBinder = null;
        }

        /* メモリの解放 */
        this.bytes = null;

        GC.SuppressFinalize(this);
        this.isDisposed = true;
    }
예제 #49
0
	/**
	 * <summary>音声データのセット(CPKコンテンツIDの指定)</summary>
	 * <param name="binder">バインダ</param>
	 * <param name="contentId">コンテンツID</param>
	 * \par 説明:
	 * コンテンツをAtomExプレーヤに関連付けます。<br/>
	 * CRI File Systemライブラリを使用してCPKファイル内のコンテンツファイルを
	 * ID指定で再生するために使用します。<br/>
	 * 本関数でプレーヤにバインダとコンテンツIDを指定し、
	 * ::CriAtomExPlayer::Start 関数を実行すると、
	 * 指定されたコンテンツファイルがストリーミング再生されます。<br/>
	 * 尚、本関数を実行した時点では、ファイルの読み込みは開始されません。<br/>
	 * ファイルの読み込みが開始されるのは、 ::CriAtomExPlayer::Start 関数実行後です。<br/>
	 * \par 例:
	 * \code
	 * 		:
	 * 	// プレーヤの作成
	 * 	CriAtomExPlayer player = new CriAtomExPlayer();
	 * 	
	 * 	// バインダの作成
	 * 	CriFsBinder binder = new CriFsBinder();
	 * 	
	 * 	// CPKファイルのバインドを開始
	 * 	CriFsBindRequest bindRequest = CriFsUtility.BindCpk(binder, "sample.cpk");
	 * 	
	 * 	// バインドの完了を待つ
	 * 	yield return bindRequest.WaitForDone(this);
	 * 	
	 * 	// 音声ファイルをセット
	 * 	// sample.cpk内の1番のコンテンツをセット
	 * 	player.SetContentId(binder, 1);
	 * 	
	 * 	// 再生する音声データのフォーマットを指定
	 * 	player.SetFormat(CriAtomEx.Format.ADX);
	 * 	player.SetNumChannels(2);
	 * 	player.SetSamplingRate(44100);
	 * 	
	 * 	// セットされた音声データを再生
	 * 	plaeyr.Start();
	 * 		:
	 * \endcode
	 * 尚、一旦セットしたファイルの情報は、
	 * 他のデータがセットされるまでAtomExプレーヤ内に保持されます。<br/>
	 * そのため、同じデータを何度も再生する場合には、
	 * 再生毎にデータをセットしなおす必要はありません。<br/>
	 * ( ::CriAtomExPlayer::Start 関数を繰り返し実行可能です。)
	 * \attention
	 * ::CriAtomExPlayer::SetContentId 関数で音声データをセットする場合、
	 * 以下の関数を使用して再生する音声データの情報を別途指定する必要があります。<br/>
	 * 	- ::CriAtomExPlayer::SetFormat
	 * 	- ::CriAtomExPlayer::SetNumChannels
	 * 	- ::CriAtomExPlayer::SetSamplingRate
	 * 	.
	 * \sa CriAtomExPlayer::Start, CriAtomExPlayer::SetFormat,
	 * CriAtomExPlayer::SetNumChannels, CriAtomExPlayer::SetSamplingRate
	 */
	public void SetContentId(CriFsBinder binder, int contentId)
	{
		criAtomExPlayer_SetContentId(this.handle, 
			(binder != null) ? binder.nativeHandle : IntPtr.Zero, contentId);
	}
예제 #50
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    private void OnError()
    {
        this.bytes = null;
        this.error = "Error occurred.";
        this.refBinder = null;
        /* バインダの破棄 */
        if (this.newBinder != null) {
            this.newBinder.Dispose();
            this.newBinder = null;
        }
        /* ローダの破棄 */
        if (this.loader != null) {
            this.loader.Dispose();
            this.loader = null;
        }
        this.phase = Phase.Done;
        this.Done();

        return;
    }
예제 #51
0
    public CriAtomCueSheet AddCueSheetInternal(string name, string acbFile, string awbFile, CriFsBinder binder)
    {
        var cueSheets = new CriAtomCueSheet[this.cueSheets.Length + 1];

        this.cueSheets.CopyTo(cueSheets, 0);
        this.cueSheets = cueSheets;

        var cueSheet = new CriAtomCueSheet();

        this.cueSheets[this.cueSheets.Length - 1] = cueSheet;
        if (String.IsNullOrEmpty(name))
        {
            cueSheet.name = Path.GetFileNameWithoutExtension(acbFile);
        }
        else
        {
            cueSheet.name = name;
        }
        cueSheet.acbFile = acbFile;
        cueSheet.awbFile = awbFile;
        return(cueSheet);
    }
예제 #52
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    private void UpdateLoader()
    {
        /* ローダが確保済みかどうかチェック */
        if (this.loader == null) {
            /* ロード要求の発行 */
            this.loader = new CriFsLoader();
            this.loader.SetReadUnitSize(readUnitSize);
            this.bytes = new byte[this.fileSize];
            this.loader.Load(this.refBinder, this.path, 0, this.fileSize, this.bytes);
        }

        /* ローダのステータスをチェック */
        CriFsLoader.Status loaderStatus = this.loader.GetStatus();
        if (loaderStatus == CriFsLoader.Status.Loading) {
            /* ロード中は何もしない */
            return;
        }

        /* エラーチェック */
        switch (loaderStatus) {
            case CriFsLoader.Status.Stop:
            this.bytes = null;
            break;

            case CriFsLoader.Status.Error:
            /* エラーに遷移 */
            this.phase = Phase.Error;
            return;

            default:
            break;
        }

        /* フェーズの更新 */
        this.phase = Phase.Done;

        /* ローダの破棄 */
        this.loader.Dispose();
        this.loader = null;

        /* バインダの破棄 */
        if (this.newBinder != null) {
            this.newBinder.Dispose();
            this.newBinder = null;
        }

        /* 処理の完了を通知 */
        this.Done();
    }
예제 #53
0
    /* シーン初期化処理 */
    void OnEnable()
    {
        /* バインダの作成 */
        /* ファイルバインド、CPKバインド、ディレクトリバインド等のバインド機能を使う場合、*/
        /* アプリケーションが明示的にバインダを作成する必要があります。 */
        this.binder = new CriFsBinder();

        /* ローカルCPKファイルのパスを作成 */
        this.localCpkFilePath = Path.Combine(CriWare.streamingAssetsPath, "sample.cpk");
    }
예제 #54
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    public const int DefaultReadUnitSize = (1024 * 1024); // 1.0 Mb

    #endregion Fields

    #region Methods

    /**
     * <summary>CPKファイルのバインドを開始します。</summary>
     * <param name="targetBinder">バインド先バインダ</param>
     * <param name="srcPath">CPKファイルパス</param>
     * <returns>CriFsBindRequest</returns>
     * \par 説明:
     * CPKファイルのバインドを開始します。<br/>
     * <br/>
     * 本関数は即時復帰関数です。<br/>
     * バインドの完了をチェックするには、 ::CriFsBindRequest::isDone を確認する必要があります。<br/>
     * バインド処理中にエラーが発生した場合、 ::CriFsBindRequest::error にエラー情報が格納されます。<br/>
     * <br/>
     * StreamingAssetsフォルダ以下のデータをバインドする場合は、 ::CriWare::streamingAssetsPath を
     * ファイルパスの前に連結してください。
     * \par 例:
     * ::CriFsUtility::BindCpk 関数、および ::CriFsUtility::LoadFile
     * 関数を用いてCPKファイル内のコンテンツを読み込むコードは以下のとおりです。<br/>
     * \code
     * private CriFsBinder binder = null;	// バインダ
     * private uint bindId = 0;				// バインドID
     *
     * void OnEnable()
     * {
     * 	// バインダの作成
     * 	this.binder = new CriFsBinder();
     * }
     *
     * void OnDisable()
     * {
     * 	// アンバインド処理の実行
     * 	if (this.bindId > 0) {
     * 		CriFsBinder.Unbind(this.bindId);
     * 		this.bindId = 0;
     * 	}
     *
     * 	// バインダの破棄
     * 	this.binder.Dispose();
     * 	this.binder = null;
     * }
     *
     * IEnumerator UserLoadFileFromCpk(string cpk_path, string content_path)
     * {
     * 	// CPKファイルのバインドを開始
     * 	CriFsBindRequest bind_request = CriFsUtility.BindCpk(this.binder, cpk_path);
     *
     * 	// バインドの完了を待つ
     * 	yield return bind_request.WaitForDone(this);
     *
     * 	// エラーチェック
     * 	if (bind_request.error != null) {
     * 		// エラー発生時の処理
     * 		…
     * 		yield break;
     * 	}
     *
     * 	// CPK内のコンテンツの読み込みを開始
     * 	CriFsLoadFileRequest load_request = CriFsUtility.LoadFile(this.binder, content_path);
     *
     * 	// 読み込み完了を待つ
     * 	yield return load_request.WaitForDone(this);
     *
     * 	// エラーチェック
     * 	if (load_request.error != null) {
     * 		// エラー発生時の処理
     * 		…
     * 		yield break;
     * 	}
     *
     * 	// 備考)ロードされたファイルの内容は request.bytes 内に格納されています。
     * }
     * \endcode
     * \par 備考:
     * マルチバインド機能を使用する場合や、CPKファイル内のCPKデータをバインドする場合には、
     * 本関数の代わりに ::CriFsUtility::BindCpk(CriFsBinder, CriFsBinder, string)
     * を使用する必要があります。<br/>
     * <br/>
     * パスにURLを指定することで、ネットワーク上のCPKファイルをバインドすることも可能です。<br/>
     * \code
     * // crimot.comのsample.cpkをバインド
     * CriFsLoadFileRequest request = CriFsUtility.LoadFile(
     * 	"http://crimot.com/sdk/sampledata/crifilesystem/sample.cpk");
     * \endcode
     * \attention
     * CPKコンテンツの情報を取得するタイミングは、バインド時のみです。<br/>
     * そのため、ネットワーク上のCPKファイルをバインドした場合、
     * サーバ側でファイルが更新されたとしても、クライアント側では更新を検知することはできません。<br/>
     * (更新後のCPKファイルに対し意図としないアクセスが発生する可能性があります。)<br/>
     * \sa
     * CriFsBindRequest, CriFsUtility::BindCpk(CriFsBinder, CriFsBinder, string)
     */
    public static CriFsBindRequest BindCpk(CriFsBinder targetBinder, string srcPath)
    {
        return CriFsUtility.BindCpk(targetBinder, null, srcPath);
    }
예제 #55
0
 private void LoadAcbDataAsync(CriAtomCueSheet cueSheet, byte[] acbData, CriFsBinder awbBinder, string awbFile, bool loadAwbOnMemory)
 {
     StartCoroutine(LoadAcbDataCoroutine(cueSheet, acbData, awbBinder, awbFile, loadAwbOnMemory));
 }
예제 #56
0
	private CriAtomExAcb LoadAcbFile(CriFsBinder binder, string acbFile, string awbFile)
	{
		if (String.IsNullOrEmpty(acbFile)) {
			return null;
		}

		string acbPath = acbFile;
		if ((binder == null) && CriWare.IsStreamingAssetsPath(acbPath)) {
			acbPath = Path.Combine(CriWare.streamingAssetsPath, acbPath);
		}

		string awbPath = awbFile;
		if (!String.IsNullOrEmpty(awbPath)) {
			if ((binder == null) && CriWare.IsStreamingAssetsPath(awbPath)) {
				awbPath = Path.Combine(CriWare.streamingAssetsPath, awbPath);
			}
		}

		return CriAtomExAcb.LoadAcbFile(binder, acbPath, awbPath);
	}
예제 #57
0
 /**
  * <summary>非同期でのキューシートの追加(メモリからの読み込み)</summary>
  * <param name='name'>キューシート名</param>
  * <param name='acbData'>ACBデータ</param>
  * <param name='awbFile'>AWBファイルパス</param>
  * <param name='awbBinder'>AWB用バインダオブジェクト(オプション)</param>
  * <param name='loadAwbOnMemory'>AWBファイルをメモリ上にロードするか(オプション)</param>
  * <returns>キューシートオブジェクト</returns>
  * <remarks>
  * <para header='説明'>引数に指定したデータとファイルパス情報からキューシートの追加を行います。<br/>
  * 同時に複数のキューシートを登録することが可能です。<br/>
  * <br/>
  * ファイルパスに対して相対パスを指定した場合は StreamingAssets フォルダからの相対でファイルをロードします。<br/>
  * 絶対パス、あるいはURLを指定した場合には指定したパスでファイルをロードします。<br/>
  * <br/>
  * CPKファイルにパッキングされたAWBファイルからキューシートを追加する場合は、
  * awbBinder引数にCPKをバインドしたバインダを指定してください。<br/>
  * なお、バインダ機能はADX2LEではご利用になれません。<br/>
  * <br/>
  * 戻り値のキューシートオブジェクトの CriAtomCueSheet::isLoading メンバが true を返す間はロード中です。<br/>
  * 必ず false を返すのを確認してからキューの再生等を行うようにしてください。<br/>
  * <br/>
  * loadAwbOnMemory が false の場合、AWBファイルのヘッダ部分のみをメモリ上にロードしストリーム再生を行います。<br/>
  * loadAwbOnMemory を true に設定すると、AWBファイル全体をメモリ上にロードするため実質メモリ再生になります。<br/>
  * WebGL(Editor実行時)では内部都合上、 loadAwbOnMemory が強制的にtrueになります。<br/></para>
  * </remarks>
  */
 public static CriAtomCueSheet AddCueSheetAsync(string name, byte[] acbData, string awbFile, CriFsBinder awbBinder = null, bool loadAwbOnMemory = false)
 {
     #if UNITY_EDITOR && UNITY_WEBGL
     loadAwbOnMemory = true;
     #endif
     CriAtomCueSheet cueSheet = CriAtom.instance.AddCueSheetInternal(name, "", awbFile, awbBinder);
     if (Application.isPlaying)
     {
         CriAtom.instance.LoadAcbDataAsync(cueSheet, acbData, awbBinder, awbFile, loadAwbOnMemory);
     }
     return(cueSheet);
 }
예제 #58
0
파일: CriFs.cs 프로젝트: Dio-Deus/solitude
    /**
     * <summary>データのロードを開始します。</summary>
     * <param name="binder">バインダ</param>
     * <param name="path">ファイルパス名</param>
     * <param name="fileOffset">ファイルの先頭からのオフセット位置(単位はバイト)</param>
     * <param name="loadSize">ロード要求サイズ(単位はバイト)</param>
     * <param name="buffer">ロード先バッファ</param>
     * \par 説明:
     * 指定されたバインダとファイル名で、データの読み込みを開始します。<br/>
     * ファイル内のfileOffsetバイト目から、loadSizeバイト分読み込みます。<br/>
     * 本関数は即時復帰関数です。<br/>
     * ロードの完了状態を取得するには ::CriFsLoader::GetStatus 関数を使用してください。<br/>
     * \sa CriFsLoader::GetStatus
     */
    public void Load(CriFsBinder binder, string path, long fileOffset, long loadSize, byte[] buffer)
    {
        this.gch = GCHandle.Alloc(buffer, GCHandleType.Pinned);

        #if !UNITY_EDITOR && UNITY_PSP2
        criFsLoader_LoadWorkaroundForVITA(this.handle,
                          (binder != null) ? binder.nativeHandle : IntPtr.Zero, fileOffset,
                          path, loadSize, this.gch.AddrOfPinnedObject(), buffer.Length);
        #else
        criFsLoader_Load(this.handle,
                         (binder != null) ? binder.nativeHandle : IntPtr.Zero, path,
                         fileOffset, loadSize, this.gch.AddrOfPinnedObject(), buffer.Length);
        #endif
    }