/// <summary>
    /// お手本戦闘用のカード供給
    /// </summary>
    /// <returns></returns>
    public MasterDataDefineLabel.ElementType getTutorialCard()
    {
        MasterDataDefineLabel.ElementType ret_val = MasterDataDefineLabel.ElementType.NONE;

        if (m_CardIndex < m_CardOrder.Length)
        {
            ServerDataDefine.PacketStructHero hero = UserDataAdmin.Instance.getCurrentHero();
            if (hero != null &&
                hero.hero_id > 0 &&
                hero.hero_id < m_CardAssign.GetLength(0)
                )
            {
                ret_val = m_CardAssign[hero.hero_id][m_CardOrder[m_CardIndex]];
            }

            m_CardIndex++;
        }

        return(ret_val);
    }
    // Update is called once per frame
    void Update()
    {
        if (m_UpdateMode == UpdateMode.NONE)
        {
            return;
        }

        m_AnimSpeed = (m_IsSpeedUp) ? 1.75f : 1.0f;
        LocalSaveOption cOption = LocalSaveManager.Instance.LoadFuncOption();

        if (cOption != null)
        {
            m_AnimSpeed *= (cOption.m_OptionSpeed != 0) ? 1.0f : 0.6f;
        }

        float delta_time = Time.deltaTime;

        for (int idx = 0; idx < m_CutinObjects.Length; idx++)
        {
            m_CutinObjects[idx].update(delta_time);
        }

        if (m_DisappearCutinObjectInfo != null)
        {
            if (m_DisappearCutinObjectInfo.getPhase() != CutinObjectInfo.Phase.DISSPPEAR)
            {
                m_DisappearCutinObjectInfo = null;
            }
        }

        if (m_CurrentCutinObjectInfo != null && m_CurrentCutinObjectInfo.getPhase() == CutinObjectInfo.Phase.APPEAR)
        {
            // スキル表示物を下地のスケールに合わせる(キャラ出現時用)
            m_SkillAreaTransform.localScale = m_CurrentCutinObjectInfo.m_BGTransform.localScale;
            return;
        }
        m_SkillAreaTransform.localScale = Vector3.one;

        updateSkillAnim(delta_time);

        if (m_UpdateMode != UpdateMode.STEP_WAIT && m_SkillTime <= 0.0f)
        {
            // 割り込みスキル
            if (m_ResurrectInfo != null)
            {
                m_SkillInfos.Insert(0, m_ResurrectInfo);
                m_ResurrectInfo = null;
            }

            // アニメーションしていないので次のスキルへ
            if (m_IsNoCutinMode == false)
            {
                if (m_SkillInfos.Count > 0)
                {
                    int old_key = -1;

                    if (m_CurrentSkillInfo != null)
                    {
                        old_key = m_CurrentSkillInfo.m_Key;
                    }

                    m_CurrentSkillInfo = m_SkillInfos[0];
                    m_SkillInfos.RemoveAt(0);

                    if (old_key != m_CurrentSkillInfo.m_Key)
                    {
                        int caster_chara_id = 0;
                        MasterDataDefineLabel.ElementType skill_element = m_CurrentSkillInfo.m_SkillElement;
                        if (m_CurrentSkillInfo.m_Caster == GlobalDefine.PartyCharaIndex.HERO)
                        {
                            caster_chara_id = 0;
                            if (UserDataAdmin.HasInstance)
                            {
                                ServerDataDefine.PacketStructHero current_hero = UserDataAdmin.Instance.getCurrentHero();
                                if (current_hero != null)
                                {
                                    MasterDataHero master_data_hero = MasterFinder <MasterDataHero> .Instance.Find(current_hero.hero_id);

                                    if (master_data_hero != null)
                                    {
                                        caster_chara_id = -current_hero.hero_id;
                                        if (skill_element == MasterDataDefineLabel.ElementType.NONE)
                                        {
                                            skill_element = master_data_hero.getElement();
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            CharaOnce chara_once = BattleParam.m_PlayerParty.getPartyMember(m_CurrentSkillInfo.m_Caster, CharaParty.CharaCondition.EXIST);
                            if (chara_once != null)
                            {
                                MasterDataParamChara chara_master = chara_once.m_CharaMasterDataParam;

                                if ((m_CurrentSkillInfo.m_SkillType == ESKILLTYPE.eLINK || m_CurrentSkillInfo.m_SkillType == ESKILLTYPE.eLINKPASSIVE) &&
                                    chara_once.m_LinkParam != null
                                    )
                                {
                                    MasterDataParamChara link_chara_master = chara_once.m_LinkParam.m_cCharaMasterDataParam;
                                    if (link_chara_master != null)
                                    {
                                        chara_master = link_chara_master;
                                    }
                                }

                                caster_chara_id = (int)chara_master.fix_id;
                                if (skill_element == MasterDataDefineLabel.ElementType.NONE)
                                {
                                    skill_element = chara_master.element;
                                }
                            }
                        }

                        if (m_CurrentCutinObjectInfo != null)
                        {
                            m_DisappearCutinObjectInfo = m_CurrentCutinObjectInfo;
                            m_CurrentCutinObjectInfo   = null;
                            m_DisappearCutinObjectInfo.animDisappear();
                        }

                        if (m_DisappearCutinObjectInfo != m_CutinObjects[0])
                        {
                            m_CurrentCutinObjectInfo = m_CutinObjects[0];
                            m_CutinObjects[1].m_RootObject.transform.SetSiblingIndex(0);
                            m_CutinObjects[0].m_RootObject.transform.SetSiblingIndex(1);
                        }
                        else
                        {
                            m_CurrentCutinObjectInfo = m_CutinObjects[1];
                            m_CutinObjects[0].m_RootObject.transform.SetSiblingIndex(0);
                            m_CutinObjects[1].m_RootObject.transform.SetSiblingIndex(1);
                        }

                        m_CurrentCutinObjectInfo.initAnim(caster_chara_id, m_BgImages[(int)skill_element], m_IsEnableCharaImage);
                        m_CurrentCutinObjectInfo.animAppear();

                        // キャラ出現時用のスキル表示物を設定
                        //if (m_CurrentSkillInfo != null)
                        {
                            m_SkillObjects[0].SetActive(false);

                            setupSkillPanel(m_SkillObjects[1], m_CurrentSkillInfo, m_SkillLocateNext1.transform);
                            m_SkillObjects[1].SetActive(true);

                            if (m_SkillInfos.Count >= 1 && m_CurrentSkillInfo.m_Key == m_SkillInfos[0].m_Key)
                            {
                                setupSkillPanel(m_SkillObjects[2], m_SkillInfos[0], m_SkillLocateNext2.transform);
                                m_SkillObjects[2].SetActive(true);
                            }
                            else
                            {
                                m_SkillObjects[2].SetActive(false);
                            }
                        }

                        m_SkillAreaTransform.localScale = new Vector3(1.0f, 0.0f, 1.0f);
                    }
                    else
                    {
                        if (m_CurrentCutinObjectInfo != null &&
                            m_CurrentSkillInfo != null &&
                            m_CurrentSkillInfo.m_SkillElement != MasterDataDefineLabel.ElementType.NONE
                            )
                        {
                            Sprite bg_elem_sprite = m_BgImages[(int)m_CurrentSkillInfo.m_SkillElement];
                            m_CurrentCutinObjectInfo.startChangeElementAnimation(bg_elem_sprite, CutinObjectInfo.ANIM_TIME_SKILL * 0.25f / m_AnimSpeed);
                        }
                    }

                    startSkillAnim();
                }
                else
                {
                    if (m_ResurrectInfo == null)
                    {
                        m_CurrentSkillInfo = null;
                        if (m_CurrentCutinObjectInfo != null)
                        {
                            // キャラの消滅アニメ開始
                            m_DisappearCutinObjectInfo = m_CurrentCutinObjectInfo;
                            m_CurrentCutinObjectInfo   = null;
                            m_DisappearCutinObjectInfo.animDisappear();
                            m_UpdateMode = UpdateMode.AUTO;
                        }
                        else
                        {
                            // すべて終了
                            if (m_DisappearCutinObjectInfo == null)
                            {
                                m_UpdateMode = UpdateMode.NONE;
                            }
                        }
                    }
                }
            }
            else
            {
                if (m_SkillInfos.Count > 0)
                {
                    m_CurrentSkillInfo = m_SkillInfos[0];
                    m_SkillInfos.RemoveAt(0);
                    startSkillAnim();
                }
                else
                {
                    m_CurrentSkillInfo = null;
                    m_UpdateMode       = UpdateMode.NONE;
                }
            }
        }
    }