using System.Collections.Generic; using System.Globalization; using System.Xml; using UnityEngine; namespace Ability { public enum InGameAbType { ADD_BULLET_AFTER, ADD_BULLET_PARALLEL, ADD_BULLET_45, ADD_BULLET_RICOCHET, ADD_DAMAGE, ADD_ATTACK_SPEED, ADD_HEALTH, ADD_XP, ADD_DROP_GOLD, ADD_HEADSHOT, HEAL, ADD_MINOR_DAMAGE, ADD_MINOR_SPEED, DECAY } //----------------------------------------------------------- public class InGameAbInfo { public float m_value; public int m_lvlUp; public int m_maxLvlUp; public int m_weight; } //----------------------------------------------------------- public class InGameAbilities { Dictionary m_abilities = new Dictionary(); //----------------------------------------------------------- public void Init() { ParseXml(); } //----------------------------------------------------------- void ParseXml() { TextAsset xml = Resources.Load("data/InGameAbilitySettings") as TextAsset; XmlDocument file = new XmlDocument(); file.LoadXml(xml.text); XmlNode pRoot = file.DocumentElement; if (pRoot == null) { CommonFunctions.myassert(false, "Root element not found or xml doesn't load!"); return; } NumberStyles style = NumberStyles.Number; CultureInfo culture = CultureInfo.CreateSpecificCulture("en-GB"); foreach (XmlNode childNode in pRoot.ChildNodes) { InGameAbInfo info = new InGameAbInfo(); foreach (XmlAttribute attr in childNode.Attributes) { if (attr.Name == "value") float.TryParse(attr.Value, style, culture, out info.m_value); if (attr.Name == "weight") int.TryParse(attr.Value, style, culture, out info.m_weight); if (attr.Name == "max_lvlup") int.TryParse(attr.Value, style, culture, out info.m_maxLvlUp); } InGameAbType type = GetAbilityTypeByName(childNode.Name); m_abilities.Add(type, info); } } //----------------------------------------------------------- public InGameAbType GetAbilityTypeByName(string name) { if (name == "ADD_BULLET_AFTER") return InGameAbType.ADD_BULLET_AFTER; else if (name == "ADD_BULLET_PARALLEL") return InGameAbType.ADD_BULLET_PARALLEL; else if (name == "ADD_BULLET_45") return InGameAbType.ADD_BULLET_45; else if (name == "ADD_BULLET_RICOCHET") return InGameAbType.ADD_BULLET_RICOCHET; else if (name == "ADD_DAMAGE") return InGameAbType.ADD_DAMAGE; else if (name == "ADD_ATTACK_SPEED") return InGameAbType.ADD_ATTACK_SPEED; else if (name == "ADD_HEALTH") return InGameAbType.ADD_HEALTH; else if (name == "ADD_XP") return InGameAbType.ADD_XP; else if (name == "ADD_DROP_GOLD") return InGameAbType.ADD_DROP_GOLD; else if (name == "ADD_HEADSHOT") return InGameAbType.ADD_HEADSHOT; else if (name == "HEAL") return InGameAbType.HEAL; else if (name == "ADD_MINOR_DAMAGE") return InGameAbType.ADD_MINOR_DAMAGE; else if (name == "ADD_MINOR_SPEED") return InGameAbType.ADD_MINOR_SPEED; else if (name == "DECAY") return InGameAbType.DECAY; CommonFunctions.myassert(false); return InGameAbType.ADD_HEALTH; } //----------------------------------------------------------- public string GetAbNameByType(InGameAbType type) { return CommonFunctions.GetInGameAbilityNameStr(type); } //----------------------------------------------------------- public InGameAbInfo GetAbilityInfoByType(InGameAbType type) { if (m_abilities.ContainsKey(type)) { InGameAbInfo info = m_abilities[type]; return info; } else CommonFunctions.myassert(false, "WRONG ABILITY!"); return null; } } }