//----------------------------------------------------------------------------

    /*!
     *          @brief	ページ切り替え処理:古いページのフェードアウト後イベント
     *          @note	この時点では画面上にページが一切表示されていない
     *          @retval[ true	] : 処理完遂
     *          @retval[ false	] : 処理中
     */
    //----------------------------------------------------------------------------
    public bool LayoutSwitchSeqOldFadeOutAfter()
    {
        //--------------------------------
        // ページ閉じ後のイベント実行
        //--------------------------------
        bool            bEventPlaying  = false;
        LayoutSwitchObj cPrevLayoutObj = GetLayoutSwitchObj(m_WorkSwitchPagePrev);

        if (cPrevLayoutObj != null &&
            cPrevLayoutObj.m_LayoutSwitchSeq != null
            )
        {
            bool bRet = cPrevLayoutObj.m_LayoutSwitchSeq.LayoutSwitchEventDisableAfter();
            if (bRet == true)
            {
                bEventPlaying = true;
            }
        }
        if (bEventPlaying == true)
        {
            return(false);
        }

        //--------------------------------
        // ページ閉じ後のイベントが完遂したら次へ
        //--------------------------------
        return(true);
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ページ切り替え処理:新しいページのフェードイン後イベント
     *          @retval[ true	] : 処理完遂
     *          @retval[ false	] : 処理中
     */
    //----------------------------------------------------------------------------
    public bool LayoutSwitchSeqNewFadeInAfter()
    {
        //--------------------------------
        // ページ開き後のイベント実行
        //--------------------------------
        bool            bEventPlaying = false;
        LayoutSwitchObj cNewLayoutObj = GetLayoutSwitchObj(m_WorkSwitchPageNow);

        if (cNewLayoutObj != null &&
            cNewLayoutObj.m_LayoutGameObj != null &&
            cNewLayoutObj.m_LayoutSwitchSeq != null
            )
        {
            bool bRet = cNewLayoutObj.m_LayoutSwitchSeq.LayoutSwitchEventEnableAfter();
            if (bRet == true)
            {
                bEventPlaying = true;
            }
        }
        if (bEventPlaying == true)
        {
            return(false);
        }

        //--------------------------------
        // ページ閉じ後のイベントが完遂したら次へ
        //--------------------------------
        m_WorkSwitchFinish = m_WorkSwitchAccess;
        return(true);
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ページ切り替え処理:古いページのフェードアウト前イベント
     *          @retval[ true	] : 処理完遂
     *          @retval[ false	] : 処理中
     */
    //----------------------------------------------------------------------------
    public bool LayoutSwitchSeqOldFadeOutBefore()
    {
        //--------------------------------
        // ページ閉じ前のイベント実行
        //--------------------------------
        bool            bEventPlaying  = false;
        LayoutSwitchObj cPrevLayoutObj = GetLayoutSwitchObj(m_WorkSwitchPagePrev);

        if (cPrevLayoutObj != null &&
            cPrevLayoutObj.m_LayoutSwitchSeq != null
            )
        {
            bool bRet = cPrevLayoutObj.m_LayoutSwitchSeq.LayoutSwitchEventDisableBefore();
            if (bRet == true)
            {
                bEventPlaying = true;
            }
        }
        if (bEventPlaying == true)
        {
            return(false);
        }

        //		Debug.LogError( "bbbbbbbbbbbbbb" + gameObject.name );
        //--------------------------------
        // 処理完遂
        //--------------------------------
        return(true);
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	アニメーション終了チェック
     *          @retval[ true	]	終了
     *          @retval[ false	]	再生中
     */
    //----------------------------------------------------------------------------
    public bool ChkLayoutAnimationFinish(int nPageID)
    {
        //--------------------------------
        // ページ切り替え中なら再生中とみなす
        //--------------------------------
        if (m_WorkSwitchState != SwitchState.REQUEST_CHK)
        {
            return(false);
        }

        //--------------------------------
        // ページ切り替えリクエストが存在するなら再生中とみなす
        //--------------------------------
        if (m_SwitchRequestInput != m_WorkSwitchFinish)
        {
            return(false);
        }

        //--------------------------------
        // エラーチェック
        //--------------------------------
        LayoutSwitchObj cLayoutSwitchObj = GetLayoutSwitchObj(nPageID);

        if (cLayoutSwitchObj == null)
        {
            Debug.LogError("Layout Index Error! - " + nPageID);
            return(true);
        }

        return(cLayoutSwitchObj.m_LayoutSwitchSeq.LayoutSwitchFinishCheck());
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ページアクティブチェック
     *          @retval[ true	]	アクティブ
     *          @retval[ false	]	非アクティブ
     */
    //----------------------------------------------------------------------------
    public bool ChkLayoutActive(int nPageID)
    {
        //--------------------------------
        // リクエストが指定番号のページなら「後にアクティブになるやつ」としてアクティブ判定
        //--------------------------------
        if (m_SwitchRequestID == nPageID)
        {
            return(true);
        }

        //--------------------------------
        // エラーチェック
        //--------------------------------
        LayoutSwitchObj cLayoutSwitchObj = GetLayoutSwitchObj(nPageID);

        if (cLayoutSwitchObj == null)
        {
            Debug.LogError("Layout Index Error! - " + nPageID);
            return(false);
        }

        //--------------------------------
        // レイアウトの有効無効チェック
        //--------------------------------
        return(UnityUtil.ChkObjectEnabled(cLayoutSwitchObj.m_LayoutGameObj));
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	レイアウト初期化登録:レイアウト追加
     *          @param	int				( nLayoutID			)	: レイアウトID
     *          @param	GameObject		( cOriginObj		)	: レイアウトに登録するオブジェクト
     *          @param	bool			( bInstantiate		)	: レイアウトに登録するオブジェクトの複製フラグ
     *          @param	GameObject		( cParentObj		)	: レイアウトの親になるオブジェクト
     *          @param	Type			( cComponentType	)	: レイアウトに接続するコンポーネント(LayoutSwitchSeq継承限定)
     */
    //----------------------------------------------------------------------------
    public bool SetLayoutSwitchFromName(int nLayoutID, string strOriginObjPath, bool bInstantiate, GameObject cParentObj, Type cComponentType)
    {
        //--------------------------------
        // 同じレイアウトIDのオブジェクトがすでに登録されてないかチェック
        //--------------------------------
        for (int i = 0; i < m_LaytoutList.m_BufferSize; i++)
        {
            if (m_LaytoutList[i] == null ||
                m_LaytoutList[i].m_LayoutID != nLayoutID
                )
            {
                continue;
            }

            Debug.LogError("LayoutID Error! - " + nLayoutID);
            return(false);
        }

        //--------------------------------
        //
        //--------------------------------
        LayoutSwitchObj cLayoutSwitchObj = new LayoutSwitchObj();

        if (bInstantiate == true)
        {
            //--------------------------------
            // 複製指定の場合はオブジェクトを複製する
            //
            // 起動時間短縮のため、複製の場合はその場で複製せず、表示が有効になった瞬間に実体を生成する
            //--------------------------------
            cLayoutSwitchObj.m_PrentObject      = cParentObj;
            cLayoutSwitchObj.m_OriginComponent  = cComponentType;
            cLayoutSwitchObj.m_OriginObject     = null;
            cLayoutSwitchObj.m_OriginObjectPath = strOriginObjPath;
            cLayoutSwitchObj.m_LayoutGameObj    = null;
            cLayoutSwitchObj.m_LayoutSwitchSeq  = null;
            //			cLayoutSwitchObj.m_LayoutGameObj		= Instantiate( cOriginObj ) as GameObject;
            //			cLayoutSwitchObj.m_LayoutSwitchSeq		= cLayoutSwitchObj.m_LayoutGameObj.AddComponent( cComponentType.Name ) as LayoutSwitchSeq;
            cLayoutSwitchObj.m_LayoutID          = nLayoutID;
            cLayoutSwitchObj.m_LayoutInstantiate = true;
        }
        else
        {
            //--------------------------------
            // 名前指定の場合には複製タイプしか認めない
            //--------------------------------
            Debug.LogError("NameType Is Instantiate Only!!");
            return(false);
        }

        //--------------------------------
        // オブジェクトを登録
        //--------------------------------
        m_LaytoutList.Add(cLayoutSwitchObj);
        return(true);
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ページ切り替え処理:新しいページのフェードイン前イベント
     *          @note	この時点では画面上にページが一切表示されていない
     *          @retval[ true	] : 処理完遂
     *          @retval[ false	] : 処理中
     */
    //----------------------------------------------------------------------------
    public bool LayoutSwitchSeqNewFadeInBefore()
    {
        //--------------------------------
        // ページ開き前のイベント実行
        //--------------------------------
        bool            bEventPlaying = false;
        LayoutSwitchObj cNewLayoutObj = GetLayoutSwitchObj(m_WorkSwitchID);

        if (cNewLayoutObj != null)
        {
            //--------------------------------
            // 新しいページのオブジェクト存在チェック。
            // ページの実体がまだ作られていないなら実体作成
            //--------------------------------
            if (cNewLayoutObj.m_LayoutGameObj == null)
            {
                LayoutInstantiate(m_WorkSwitchID);
                return(false);
            }
            if (cNewLayoutObj.m_LayoutSwitchSeq != null &&
                cNewLayoutObj.m_LayoutSwitchSeq.m_LayoutStartOK == false
                )
            {
                if (UnityUtil.ChkObjectEnabled(cNewLayoutObj.m_LayoutGameObj) == false)
                {
                    UnityUtil.SetObjectEnabled(cNewLayoutObj.m_LayoutGameObj, true);
                }
                return(false);
            }

            //--------------------------------
            //
            //--------------------------------
            if (cNewLayoutObj.m_LayoutSwitchSeq != null)
            {
                bool bRet = cNewLayoutObj.m_LayoutSwitchSeq.LayoutSwitchEventEnableBefore();
                if (bRet == true)
                {
                    bEventPlaying = true;
                }
            }
        }

        if (bEventPlaying == true)
        {
            return(false);
        }

        //--------------------------------
        // 処理完遂
        //--------------------------------
        return(true);
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ページの読み込み処理
     *          @note	シーン読み込み直後に全ページを一括で読み込むと待ち時間が長くなるので、必要なタイミングで読み込むように対応
     *          @retval[ true	]	:ページの準備完了
     *          @retval[ false	]	:ページの見た目複製と初期化中
     */
    //----------------------------------------------------------------------------
    private bool LayoutInstantiate(int nLayoutID)
    {
        //--------------------------------
        // インスタンスを生成してないなら生成実行
        //
        // オリジナルオブジェクト(Prefab)を複製して実体化する
        //--------------------------------
        LayoutSwitchObj cLayoutObj = GetLayoutSwitchObj(nLayoutID);

        if (cLayoutObj == null)
        {
            Debug.LogError("LayoutObject None! - " + nLayoutID);
            return(false);
        }

        {
            //--------------------------------
            // オリジナルオブジェクトのインスタンスがまだ読まれてないなら読み込んで適用
            //--------------------------------
            if (cLayoutObj.m_LayoutGameObj == null &&
                cLayoutObj.m_OriginObject == null &&
                cLayoutObj.m_OriginObjectPath.Length > 0
                )
            {
#if BUILD_TYPE_DEBUG
                //				Debug.Log( "Create Layout - " + cLayoutObj.m_OriginObjectPath + " , " + nLayoutID );
#endif
                cLayoutObj.m_OriginObject = Resources.Load(cLayoutObj.m_OriginObjectPath) as GameObject;
            }

            //--------------------------------
            // オブジェクト複製
            //--------------------------------
            if (cLayoutObj.m_LayoutGameObj == null &&
                cLayoutObj.m_OriginObject != null
                )
            {
                //--------------------------------
                // 複製フラグが立ってるなら複製、立ってないならそのまま実体参照
                //--------------------------------
                if (cLayoutObj.m_LayoutInstantiate == true)
                {
                    cLayoutObj.m_LayoutGameObj = Instantiate(cLayoutObj.m_OriginObject) as GameObject;
                }
                else
                {
                    cLayoutObj.m_LayoutGameObj = cLayoutObj.m_OriginObject;
                }

                //--------------------------------
                //
                //--------------------------------
                if (cLayoutObj.m_LayoutGameObj != null)
                {
                    //--------------------------------
                    // オブジェクトの親としてNGUI階層を設定
                    //--------------------------------
                    if (cLayoutObj.m_PrentObject != null)
                    {
                        cLayoutObj.m_LayoutGameObj.transform.SetParent(cLayoutObj.m_PrentObject.transform, false);
                        //cLayoutObj.m_LayoutGameObj.transform.parent = cLayoutObj.m_PrentObject.transform;
                        //cLayoutObj.m_LayoutGameObj.transform.localPosition	= cLayoutObj.m_OriginObject.transform.localPosition;
                        //cLayoutObj.m_LayoutGameObj.transform.localScale		= cLayoutObj.m_OriginObject.transform.localScale;
                    }
                    else
                    {
                        Debug.LogError("Layout Parent Is Null!");
                    }

                    //--------------------------------
                    // 初期化中のレイアウトを見られたくないので
                    // 一時的に表示しないレイヤーに設定する
                    //--------------------------------
                    UnityUtil.SetObjectLayer(cLayoutObj.m_LayoutGameObj, LayerMask.NameToLayer("DRAW_CLIP"));

                    //--------------------------------
                    // 有効化しないとStart関数まで行きつかないらしい。
                    //
                    // 表示レイヤーが違うことで準備中のものが描画されることはないので一旦無条件で有効化しておく
                    //--------------------------------
                    UnityUtil.SetObjectEnabledFix(cLayoutObj.m_LayoutGameObj, true);


                    //					Debug.LogError( "Layout Instantiate - " + cLayoutObj.m_LayoutGameObj.name );
                }
                else
                {
                    Debug.LogError("LayoutGameObj Error!");
                }
            }

            if (cLayoutObj.m_LayoutSwitchSeq == null &&
                cLayoutObj.m_LayoutGameObj != null
                )
            {
                cLayoutObj.m_LayoutSwitchSeq = cLayoutObj.m_LayoutGameObj.AddComponent(cLayoutObj.m_OriginComponent) as LayoutSwitchSeq;
                cLayoutObj.m_LayoutSwitchSeq.m_LayoutSwitchManager = this;
                cLayoutObj.m_LayoutGameObj.name = cLayoutObj.m_OriginComponent.ToString();
            }
        }

        //--------------------------------
        //
        //--------------------------------
        return(true);
    }
    //----------------------------------------------------------------------------

    /*!
     *          @brief	レイアウト初期化登録:レイアウト追加
     *          @param	int				( nLayoutID			)	: レイアウトID
     *          @param	GameObject		( cOriginObj		)	: レイアウトに登録するオブジェクト
     *          @param	bool			( bInstantiate		)	: レイアウトに登録するオブジェクトの複製フラグ
     *          @param	GameObject		( cParentObj		)	: レイアウトの親になるオブジェクト
     *          @param	Type			( cComponentType	)	: レイアウトに接続するコンポーネント(LayoutSwitchSeq継承限定)
     */
    //----------------------------------------------------------------------------
    public bool SetLayoutSwitch(int nLayoutID, GameObject cOriginObj, bool bInstantiate, GameObject cParentObj, Type cComponentType)
    {
        //--------------------------------
        // エラーチェック
        //--------------------------------
        if (cOriginObj == null)
        {
            Debug.LogError("Layout Add Error! - " + nLayoutID);
            return(false);
        }

        //--------------------------------
        // 同じレイアウトIDのオブジェクトがすでに登録されてないかチェック
        //--------------------------------
        for (int i = 0; i < m_LaytoutList.m_BufferSize; i++)
        {
            if (m_LaytoutList[i] == null ||
                m_LaytoutList[i].m_LayoutID != nLayoutID
                )
            {
                continue;
            }

            Debug.LogError("LayoutID Error! - " + nLayoutID);
            return(false);
        }


        //--------------------------------
        //
        //--------------------------------
        LayoutSwitchObj cLayoutSwitchObj = new LayoutSwitchObj();

        if (bInstantiate == true)
        {
            //--------------------------------
            // 複製指定の場合はオブジェクトを複製する
            //
            // 起動時間短縮のため、複製の場合はその場で複製せず、表示が有効になった瞬間に実体を生成する
            //--------------------------------
            cLayoutSwitchObj.m_PrentObject      = cParentObj;
            cLayoutSwitchObj.m_OriginComponent  = cComponentType;
            cLayoutSwitchObj.m_OriginObject     = cOriginObj;
            cLayoutSwitchObj.m_OriginObjectPath = "";
            cLayoutSwitchObj.m_LayoutGameObj    = null;
            cLayoutSwitchObj.m_LayoutSwitchSeq  = null;
            //			cLayoutSwitchObj.m_LayoutGameObj		= Instantiate( cOriginObj ) as GameObject;
            //			cLayoutSwitchObj.m_LayoutSwitchSeq		= cLayoutSwitchObj.m_LayoutGameObj.AddComponent( cComponentType.Name ) as LayoutSwitchSeq;
            cLayoutSwitchObj.m_LayoutID          = nLayoutID;
            cLayoutSwitchObj.m_LayoutInstantiate = true;
        }
        else
        {
            //--------------------------------
            // 複製しない場合はオブジェクト自体を追加登録する
            //--------------------------------
            cLayoutSwitchObj.m_PrentObject       = cParentObj;
            cLayoutSwitchObj.m_OriginComponent   = null;
            cLayoutSwitchObj.m_OriginObject      = null;
            cLayoutSwitchObj.m_OriginObjectPath  = "";
            cLayoutSwitchObj.m_LayoutGameObj     = cOriginObj;
            cLayoutSwitchObj.m_LayoutSwitchSeq   = cLayoutSwitchObj.m_LayoutGameObj.AddComponent(cComponentType) as LayoutSwitchSeq;
            cLayoutSwitchObj.m_LayoutID          = nLayoutID;
            cLayoutSwitchObj.m_LayoutInstantiate = false;


            //--------------------------------
            // オブジェクトの親としてNGUI階層を設定
            //--------------------------------
            if (cParentObj != null)
            {
                Vector3 vLocalPos   = cLayoutSwitchObj.m_LayoutGameObj.transform.localPosition;
                Vector3 vLocalScale = cLayoutSwitchObj.m_LayoutGameObj.transform.localScale;

                cLayoutSwitchObj.m_LayoutGameObj.transform.SetParent(cParentObj.transform, false);
                //cLayoutSwitchObj.m_LayoutGameObj.transform.parent			= cParentObj.transform;
                //cLayoutSwitchObj.m_LayoutGameObj.transform.localPosition	= vLocalPos;
                //cLayoutSwitchObj.m_LayoutGameObj.transform.localScale		= vLocalScale;
            }

            //--------------------------------
            // 初期化中のレイアウトを見られたくないので
            // 一時的に表示しないレイヤーに設定する
            //--------------------------------
            UnityUtil.SetObjectLayer(cLayoutSwitchObj.m_LayoutGameObj, LayerMask.NameToLayer("DRAW_CLIP"));
        }

        /*
         *      //--------------------------------
         *      // 有効化しないとStart関数まで行きつかないらしい。
         *      // 黒フェードで隠すことを想定して最初は全て有効化する
         *      //--------------------------------
         *      UnityUtil.SetObjectEnabledFix( cLayoutSwitchObj.m_LayoutGameObj , true );
         */
        //--------------------------------
        // オブジェクトを登録
        //--------------------------------
        m_LaytoutList.Add(cLayoutSwitchObj);
        return(true);
    }
Example #10
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief	ページ切り替え処理:新しいページのフェードイン処理中
     *          @retval[ true	] : 処理完遂
     *          @retval[ false	] : 処理中
     */
    //----------------------------------------------------------------------------
    public bool LayoutSwitchSeqNewFadeIn()
    {
        //--------------------------------
        // 開く対象の場合には有効化操作呼出し
        //--------------------------------
        if (m_WorkSwitchTriger == true)
        {
            LayoutSwitchObj cNewLayoutObj = GetLayoutSwitchObj(m_WorkSwitchID);
            if (cNewLayoutObj != null &&
                cNewLayoutObj.m_LayoutSwitchSeq != null
                )
            {
                //--------------------------------
                // 開く対象の場合には有効化操作呼出し
                //--------------------------------
                cNewLayoutObj.m_LayoutSwitchSeq.LayoutSwitchTriger(true, m_WorkSwitchFast);
                cNewLayoutObj.m_LayoutSwitchSeq.m_LayoutExecOK = true;
            }

            //--------------------------------
            // 現在開いているページを設定
            //--------------------------------
            m_WorkSwitchPageNow = m_WorkSwitchID;
            m_LayoutId          = m_WorkSwitchID;

            //--------------------------------
            // 初期化中のレイアウトを見られたくないので
            // 一時的に表示しないレイヤーに設定している。
            //
            // そのままだと表示されないのでGUIレイヤーに書き換えて描画有効化
            //--------------------------------
            if (cNewLayoutObj != null &&
                cNewLayoutObj.m_LayoutGameObj != null &&
                cNewLayoutObj.m_LayoutGameObj.layer != m_LayoutLayerMask
                )
            {
                UnityUtil.SetObjectLayer(cNewLayoutObj.m_LayoutGameObj, m_LayoutLayerMask);
            }
        }



        //--------------------------------
        // フェード処理の完遂待ち
        //--------------------------------
        bool bSwitchFinish = true;

        for (int i = 0; i < m_LaytoutList.m_BufferSize; i++)
        {
            if (m_LaytoutList[i] == null ||
                m_LaytoutList[i].m_LayoutSwitchSeq == null ||
                m_LaytoutList[i].m_LayoutGameObj == null
                )
            {
                continue;
            }

            if (UnityUtil.ChkObjectEnabled(m_LaytoutList[i].m_LayoutGameObj) == false)
            {
                continue;
            }

            bSwitchFinish &= m_LaytoutList[i].m_LayoutSwitchSeq.LayoutSwitchFinishCheck();
        }
        if (bSwitchFinish == false)
        {
            return(false);
        }

        //--------------------------------
        // 処理完遂
        //--------------------------------
        return(true);
    }