public void init(PVPPlayerSkillSlot aiSkillSlot, Player player)
    {
        _player = player;

        _playerTagIndex = player.playerTagIndex;

        chargingEffect.Stop();
        chargingFullNoticeEffect.Stop();
        chargingFullEffect.Stop();
        _isFullCharging = false;

        skillSlot = aiSkillSlot;

        _lastClickState = false;

        lastClickedSlotIndex = -1;
        blockThis            = false;
        isClicked            = false;
        _isPress             = false;
        isWaitingPress       = false;

        isLocked = false;
        //Debug.Log(skillId);

        skillSlot.skillData.exeData.init(AttackData.AttackerType.Hero, AttackData.AttackType.Skill, skillSlot.skillData, skillSlot.skillInfo.transcendData, skillSlot.skillInfo.transcendLevel);

        chargingTimeLimit = skillSlot.skillData.getChargingTime(skillSlot.skillInfo.reinforceLevel).AsFloat();

        lbLeftItemNum.text = Mathf.RoundToInt(skillSlot.useMp / player.maxMp * 100.0f).ToString();        //Mathf.CeilToInt(useMp).ToString();

        tfItemName.text = skillSlot.skillData.name;

        spBackground.spriteName  = RareType.getRareBgSprite(skillSlot.skillInfo.rare);
        spFrameBorder.spriteName = RareType.getRareLineSprite(skillSlot.skillInfo.rare);

        Icon.setSkillIcon(skillSlot.skillInfo.getSkillIcon(), spSkillIcon);
        spSkillIcon.MakePixelPerfect();

        resetCoolTime();

        btn.isEnabled = true;
    }
    void updateSkillRuneAI()
    {
        if (_updateSkillDelay > 0.0f)
        {
            _updateSkillDelay -= GameManager.globalDeltaTime;
            return;
        }
        else
        {
            _updateSkillDelay += UPDATE_SKILL_DELAY;
        }

        if (nowPlayingSkillAni || nowChargingSkill != null)
        {
            return;
        }

        _nowSelectSkillSlot = null;

        bool canUse = false;

        // 사용 가능한지 검사한다.
        for (int i = 0; i < _skillSlotsNum; ++i)
        {
            _skillScoreCheckers[i].index  = i;
            _skillScoreCheckers[i].canUse = skillSlots[i].canUse();

            if (_skillScoreCheckers[i].canUse)
            {
                canUse = true;

                                #if UNITY_EDITOR
//				if(BattleSimulator.nowSimulation == false)
//				{
//									Debug.LogError(" i : " + i + "    " + skillSlots[i].skillData.id + "    는 일단 사용 가능하다!" );
//				}
                                #endif
            }
        }

        // 사용 할 수 있는 녀석이 하나라도 있음.
        if (canUse)
        {
            // 그럼 모든 슬롯에 대해 점수를 계산함.
            // 단 현재 소환 가능 개수가 1개 이상인 애들이어야함.
            for (i = 0; i < SKILL_SLOT_NUM; ++i)
            {
                if (i < _skillSlotsNum)
                {
                    _skillScoreCheckers[i].score = skillSlots[i].pvpPoint();

                    if (skillSlots[i].skillData.targeting <= 1)
                    {
                        if (checkSkillType_0_1_BestTargetingPosition(skillSlots[i]) == false)
                        {
                            _skillScoreCheckers[i].score = -10000;
                        }
                    }

#if UNITY_EDITOR
                    if (BattleSimulator.nowSimulation == false)
                    {
                        //Debug.LogError(i + "   " +  skillSlots[i].skillData.id + " : _skillScoreCheckers[i].score : " + _skillScoreCheckers[i].score);
                    }
#endif
                }
                else
                {
                    _skillScoreCheckers[i].canUse = false;
                    _skillScoreCheckers[i].score  = -10000;
                }
            }

            _skillScoreCheckers.Sort(_aIScoreSorter);

            // 1번 스킬이 즉시 소환가능하면 소환.
            if (_skillScoreCheckers[0].canUse)
            {
                if (_skillScoreCheckers[0].score > -999)
                {
                                        #if UNITY_EDITOR
                    if (BattleSimulator.nowSimulation == false)
                    {
                        //Debug.LogError("   1번 스킬 사용 가능! index: " + _skillScoreCheckers[0].index + "   id: " + skillSlots[_skillScoreCheckers[0].index].skillData.id );
                    }
                                        #endif
                    _nowSelectSkillSlot            = (PVPPlayerSkillSlot)skillSlots[_skillScoreCheckers[0].index];
                    moveType                       = MoveType.SKILL;
                    skillModeProgressTime          = 0.0f;
                    skillMoveIsNormal              = true;
                    _pvpTargetPosition             = cTransformPosition;
                    skillTargetingPositionMaxPoint = 0.0f;
                    _updateSkillDelay             += UPDATE_SKILL_DELAY;
                }
            }
            else
            {
                // 사용 가능 개수가 1개 이상인 애들 중
                // 1등은 현재 사용을 할 수 없어. 쿨타임 & MP에 걸려서.
                // 그럼 후순위들을 계산해봄.
                // 만약 후순위 녀석을 소환한다고 치자. 그런데 얘를 소환해서
                // mp를 써도 1순위 애를 몇초후에 그대로 소환할 수 있으면 소환한다.
                // 아니면 소환못한다.
                for (i = 1; i < SKILL_SLOT_NUM; ++i)
                {
//					Debug.Log("  <<<<  " + i + "   번 스킬 체크!!!"  );
                    if (_skillScoreCheckers[i].score > -999)
                    {
                        if (_skillScoreCheckers[i].canUse &&
                            skillSlots[_skillScoreCheckers[0].index].canUseAfterCoolTime(skillSlots[_skillScoreCheckers[i].index].useMp))
                        {
                            _nowSelectSkillSlot = (PVPPlayerSkillSlot)skillSlots[_skillScoreCheckers[i].index];

#if UNITY_EDITOR
                            if (BattleSimulator.nowSimulation == false)
                            {
//								Debug.LogError(_skillScoreCheckers[i].index +  " 번 스킬 사용!!!!"  + "    " + skillSlots[_skillScoreCheckers[0].index].skillData.id) ;
                            }
#endif
                            moveType = MoveType.SKILL;
                            skillModeProgressTime          = 0.0f;
                            skillMoveIsNormal              = true;
                            skillTargetingPositionMaxPoint = 0.0f;
                            _pvpTargetPosition             = cTransformPosition;
                            _updateSkillDelay             += UPDATE_SKILL_DELAY;
                            return;
                        }
                    }
                }
            }
        }
    }
 public void clear()
 {
     _player   = null;
     skillSlot = null;
 }