public virtual void OnLoadAsset(XmlReader reader)
        {
            switch (reader.Name)
            {
            case "Skill":
            {
                Name          = reader.GetAttrString("Name", string.Empty);
                Cooldown      = reader.GetAttrFloat("Cooldown", 0.0f);
                CastTime      = reader.GetAttrFloat("Casttime", 0.0f);
                Range         = reader.GetAttrFloat("Range", 0.0f);
                Delay         = reader.GetAttrFloat("Delay", 0.0f);
                Interruptable = reader.GetBoolAttribute("Interruptable", false);
                RequiredLevel = reader.GetAttrInt("Level", 0);
            }
            break;

            case "Effect":
            {
                string skillEffectAssetType = reader.GetAttrString("AssetType", "");
                var    asset = EffectUtility.CreateAssetOfType(skillEffectAssetType);
                if (asset != null)
                {
                    Effects.Add(asset);
                    Effects[Effects.Count - 1].OnLoadAsset(reader);
                }
            }
            break;

            case "Prerequisite":
            {
                var asset = new SkillPrerequisiteAsset();
                Prerequisites.Add(asset);
                Prerequisites [Prerequisites.Count - 1].OnLoadAsset(reader);
            }
            break;

            default:
            {
                if (Effects.Count > 0)
                {
                    Effects [Effects.Count - 1].OnLoadAsset(reader);
                }
            }
            break;
            }
        }
 /// <summary>
 /// constructor
 /// </summary>
 public SkillPrerequisite(SkillPrerequisiteAsset asset)
 {
     StatName  = asset.StatName;
     StatValue = asset.StatValue;
 }