void setPropertyState(ESkillType skillType, object[] data) // for destination position
    {
        if (data == null)
        {
            return;
        }

        if (data.Length <= 0)
        {
            return;
        }

        if (skillType == ESkillType.TARGET)
        {
            foreach (System.Collections.Generic.KeyValuePair <ESkillAction, SkillState> iterator in listState)
            {
                switch (iterator.Key)
                {
                case ESkillAction.ONCE:
                    SkillStateOnce stateOnce = iterator.Value as SkillStateOnce;
                    if ((ESkillOffense)Ability == ESkillOffense.SINGLE)
                    {
                        stateOnce.enemy = (GameObject)data[0];
                    }
                    else
                    {
                        stateOnce.destPosition = (Vector3)data[0];
                    }
                    break;

                case ESkillAction.DROP:
                    SkillStateDrop stateDrop = iterator.Value as SkillStateDrop;
                    stateDrop.destPosition = (Vector3)data[0];
                    break;

                case ESkillAction.TRAP:
                    SkillStateTrap stateTrap = iterator.Value as SkillStateTrap;
                    stateTrap.position = (Vector3)data[0];
                    break;
                }
            }
        }
    }
    SkillState getClassSkill(ESkillAction type)
    {
        SkillState s = null;

        switch (type)
        {
        case ESkillAction.ONCE:
            s = new SkillStateOnce();
            break;

        case ESkillAction.DROP:
            s = new SkillStateDrop();
            break;

        case ESkillAction.EXPLOSION:
            s = new SkillStateExplosion();
            break;

        case ESkillAction.TRAP:
            s = new SkillStateTrap();
            break;

        case ESkillAction.FADE:
            s = new SkillStateFade();
            break;

        case ESkillAction.BUFF:
            s = new SkillStateBuff();
            break;

        case ESkillAction.ARMAGGEDDON:
            s = new SkillStateArmaggeddon();
            break;

        case ESkillAction.DESTROY:
            s = new SkillStateDestroy();
            break;
        }
        return(s);
    }
    void setPropertyFromDatabase()
    {
        foreach (System.Collections.Generic.KeyValuePair <ESkillAction, SkillState> state in listState)
        {
            foreach (System.Collections.Generic.KeyValuePair <string, object> iterator in
                     ReadDatabase.Instance.SkillInfo[ID.ToUpper()].States[state.Key.ToString()].Values)
            {
                #region COMMON VALUE
                switch (iterator.Key.ToUpper())
                {
                case "COLLISION":
                    state.Value.collisionNum = int.Parse(iterator.Value.ToString());
                    return;

                case "EFFECT":
                    string[] s = iterator.Value.ToString().Trim().Split('/');
                    state.Value.effectType = (EBulletEffect)Extensions.GetEnum(EBulletEffect.NONE.GetType(), s[0].ToUpper());

                    System.Collections.Generic.List <string> listValue = new System.Collections.Generic.List <string>();
                    for (int i = 1; i < s.Length; i++)
                    {
                        listValue.Add(s[i]);
                    }
                    state.Value.effectValue = listValue.ToArray();
                    break;

                case "EFFECTGO":
                    state.Value.effectObjectID = iterator.Value.ToString();
                    break;

                case "DAMAGE":
                    if (iterator.Value.ToString().Trim().Equals("true"))
                    {
                        state.Value.hasDamage = true;
                    }
                    else
                    {
                        state.Value.hasDamage = false;
                    }
                    break;

                case "COLLIDERMOVETO":
                    state.Value.colliderMoveTo = iterator.Value.ToString();
                    break;
                }
                #endregion

                #region COLLIDER
                bool           hasCollider  = false;
                ESkillCollider colliderType = ESkillCollider.BOX;
                for (int i = 0; i < ColliderName.Length; i++)
                {
                    string s = ColliderName[i];
                    if (string.Compare(iterator.Key.Trim(), s, true) == 0)
                    {
                        hasCollider = true;
                        switch (s)
                        {
                        case "SphereCollider": colliderType = ESkillCollider.SPHERE; break;

                        case "BoxCollider": colliderType = ESkillCollider.BOX; break;

                        case "CapsuleCollider": colliderType = ESkillCollider.CAPSULE; break;
                        }
                        break;
                    }
                }
                #endregion

                if (hasCollider)
                {
                    state.Value.hasCollider   = true;
                    state.Value.colliderValue = iterator.Value;
                    state.Value.colliderType  = colliderType;
                }
                else
                {
                    switch (state.Key)
                    {
                        #region DROP
                    case ESkillAction.DROP:
                        SkillStateDrop drop = state.Value as SkillStateDrop;

                        switch (iterator.Key.ToUpper())
                        {
                        case "SPEED":
                            drop.Speed = float.Parse(iterator.Value.ToString());
                            break;
                        }
                        break;

                        #endregion
                        #region TRAP
                    case ESkillAction.TRAP:
                        SkillStateTrap trap = state.Value as SkillStateTrap;

                        switch (iterator.Key.ToUpper())
                        {
                        case "DURATION":
                            trap.duration = float.Parse(iterator.Value.ToString());
                            break;
                        }
                        break;

                        #endregion
                        #region BUFF
                    case ESkillAction.BUFF:
                        SkillStateBuff buff = state.Value as SkillStateBuff;

                        switch (iterator.Key.ToUpper())
                        {
                        case "DURATION":
                            buff.duration = float.Parse(iterator.Value.ToString());
                            break;

                        case "TYPE":
                            buff.type = (ESkillStateBuffType)Extensions.GetEnum(ESkillStateBuffType.ROTATION.GetType(), iterator.Value.ToString().ToUpper());
                            break;

                        case "VALUE":
                            buff.value = iterator.Value;
                            break;
                        }
                        break;

                        #endregion
                        #region ARMAGGEDDON
                    case ESkillAction.ARMAGGEDDON:
                        SkillStateArmaggeddon armaggeddon = state.Value as SkillStateArmaggeddon;

                        switch (iterator.Key.ToUpper())
                        {
                        case "DURATION":
                            armaggeddon.duration = float.Parse(iterator.Value.ToString());
                            break;

                        case "TYPE":
                            armaggeddon.type = (ESkillArmaggeddon)Extensions.GetEnum(ESkillArmaggeddon.METEOR.GetType(),
                                                                                     iterator.Value.ToString().ToUpper());
                            break;
                        }
                        break;

                        #endregion
                        #region END
                    case ESkillAction.EXPLOSION:
                        SkillStateExplosion end = state.Value as SkillStateExplosion;

                        switch (iterator.Key.ToUpper())
                        {
                        case "COLLISION":
                            end.collision = int.Parse(iterator.Value.ToString());
                            break;
                        }
                        break;
                        #endregion
                    }
                }
            }
        }
    }
    SkillState getClassSkill(ESkillAction type)
    {
        SkillState s = null;

        switch (type)
        {
            case ESkillAction.ONCE:
                s = new SkillStateOnce();
                break;
            case ESkillAction.DROP:
                s = new SkillStateDrop();
                break;
            case ESkillAction.EXPLOSION:
                s = new SkillStateExplosion();
                break;
            case ESkillAction.TRAP:
                s = new SkillStateTrap();
                break;
            case ESkillAction.FADE:
                s = new SkillStateFade();
                break;
            case ESkillAction.BUFF:
                s = new SkillStateBuff();
                break;
            case ESkillAction.ARMAGGEDDON:
                s = new SkillStateArmaggeddon();
                break;
            case ESkillAction.DESTROY:
                s = new SkillStateDestroy();
                break;
        }
        return s;
    }