You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

140 lines
4.6 KiB

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<InGameAbType, InGameAbInfo> m_abilities = new Dictionary<InGameAbType, InGameAbInfo>();
//-----------------------------------------------------------
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;
}
}
}