/********************************************************************************
 *	文件名:	BaseAttr.cs
 *	全路径:	\Script\Player\BaseAttr.cs
 *	创建人:	李嘉
 *	创建时间:2013-11-20
 *
 *	功能说明:Obj基础战斗属性,以及基础属性换算公式
 *	修改记录:
*********************************************************************************/
using GCGame.Table;
using UnityEngine.Events;

public enum SKILLDELANDGAINTYPE //技能的消耗和收益
{
    HPTYPE_INVAILID =-1,
    HPTYPE_VALUE =101,//血值
    HPTYPE_RATE  =102,//血百分百
    MPTYPE_VALUE = 201,//蓝值
    MPTYPE_RATE = 202,//蓝百分百
    XPTYPE_VALUE = 301,//战意值
    XPTYPE_RATE = 302,//战意百分百
    COINTYPE =401,//金币
}
public enum COMBATATTE
{
    MAXHP           =0,     //血上限
    MAXMP           =1,     //蓝上限
    MAXXP           =2,     //战意上限
    PYSATTACK       =3,     //物理攻击
    MAGATTACK       =4,     //魔法攻击
    PYSDEF          =5,     //物理防御
    MAGDEF          =6,     //魔法防御
    HIT             =7,     //命中
    DODGE           =8,     //闪避
    CRITICAL        =9,     //暴击
    DECRITICAL      =10,    //暴抗
    STRIKE          =11,    //穿透
    DUCTICAL        =12,    //韧性
    CRITIADD        =13,    //暴击伤害加成
    CRITIMIS        =14,    //暴击伤害减免
    MOVESPEED       =15,    //移动速度
    ATTACKSPEED     =16,    //攻击速度
    COMBATATTE_MAXNUM,
}

public enum  MIXBATATTR
{
    MIXATTR_BEGIN = 999,
    MIXATTR_ALLATTACK = 1000,
    MIXATTR_ALLDEF = 1001,
}

public class MaxBatAttrUtil
{
    public static bool IsContainType(MIXBATATTR nMixType, COMBATATTE nJudgeAttrType)
    {
        switch (nMixType)
        {
            case MIXBATATTR.MIXATTR_ALLDEF:
                {
                    if (nJudgeAttrType == COMBATATTE.PYSDEF || nJudgeAttrType == COMBATATTE.MAGDEF)
                    {
                        return true;
                    }
                }
                break;
            case MIXBATATTR.MIXATTR_ALLATTACK:
                {
                    if (nJudgeAttrType == COMBATATTE.PYSATTACK || nJudgeAttrType == COMBATATTE.MAGATTACK)
                    {
                        return true;
                    }
                }
                break;
            default:
                break;
        }
        return false;
    }
}

public class BaseAttr
{
    //生命值
    private long m_nHP = 0;
    public long HP 
    {
        get { return m_nHP; } 
        set { m_nHP = value; } 
    }
    private long m_nMaxHP = 0;
    public long MaxHP
    {
        get { return m_nMaxHP; }
        set { m_nMaxHP = value; }
    }
    private long m_nCurMaxHP = 0;
    public long CurMaxHP
    {
        get { return m_nCurMaxHP; }
        set { m_nCurMaxHP = value; }
    }
    //法力值
    private int m_nMp = 0;
    public int MP 
    { 
        get { return m_nMp; } 
        set { m_nMp = value; } 
    }

    //跨服声望
    private int m_nCrossServerScore = 0;
    public int CrossServerScore
    {
        get { return m_nCrossServerScore; }
        set { m_nCrossServerScore = value; }
    }

    private int m_nMaxMp = 0;
    public int MaxMP
    {
        get { return m_nMaxMp; }
        set { m_nMaxMp = value; }
    }
    //战意
    private int m_nXp = 0;
    public int XP 
    { 
        get { return m_nXp; } 
        set { m_nXp = value; } 
    }
    
    private int m_nMaxXp = 0;
    public int MaxXP
    {
        get { return m_nMaxXp; }
        set { m_nMaxXp = value; }
    }

    public long Exp { set; get; }
    public long HeadExp { set; get; }
    public long SkillExp { set; get; }
    public float Xiewei { set; get; }

    //名字
    private string m_RoleName = "";
    public string RoleName
    {
        get { return m_RoleName; }
        set { m_RoleName = value; }
    }

    //称号
    private string m_TitleName;
    public string TitlenName
    {
        set { GameManager.gameManager.PlayerDataPool.TitleInvestitive.SetTitleName(value); }
        get { return GameManager.gameManager.PlayerDataPool.TitleInvestitive.GetCurrentTitle(); }
    }
  
    //等级
    private int m_nLevel = 0;
    public int Level
    {
        get { return m_nLevel; }
        set { m_nLevel = value; }
    }

    //职业
    private int _Profession = 0;
    public int Profession
    {
        get { return _Profession; }
        set { _Profession = value; }
    }

    // 头像
    private string m_strHeadPic = "";
    public string HeadPic
    {
        get { return m_strHeadPic; }
        set { m_strHeadPic = value; }
    }

    //数据表ID,既RoleBase中的ID
    private int m_nRoleBaseID = -1;
    public int RoleBaseID
    {
        get { return m_nRoleBaseID; }
        set { m_nRoleBaseID = value; }
    }
    // 数据表,延迟初始化
    public Tab_RoleBaseAttr RoleData
    {
        get
        {
            return _roleData ?? (_roleData = TableManager.GetRoleBaseAttrByID(RoleBaseID, 0));
        }
    }
    private Tab_RoleBaseAttr _roleData;

    //玩家支付的数目
    private int m_PayCout;
    public int PayCount
    {
        set { m_PayCout = value; }
        get { return m_PayCout; }
    }

    //玩家已花费的灵玉 
    private int m_JadgeCost;
    public int JadgeCost
    {
        set { m_JadgeCost = value; }
        get { return m_JadgeCost; } 
    }

    //玩家已经登录的天数
    private int m_LoginDays;
    public int LoginDays
    {
        set { m_LoginDays = value; }
        get { return m_LoginDays; }
    }

    //补签次数
    private int m_RecheckNum;
    public int RecheckNum
    {
        set { m_RecheckNum = value; }
        get { return m_RecheckNum; }
    }

    //可否再领一次奖(在线签到)
    private int m_TimeDouble;
    public int TimeDouble
    {
        set { m_TimeDouble = value; }
        get { return m_TimeDouble; }
    }
    //进阶翅膀ID
    private int m_AdvanceWingId;
    public int AdvanceWingId
    {
        set { m_AdvanceWingId = value; }
        get { return m_AdvanceWingId; }
    }
    //神兵ID
    private int m_AdvanceGodweaponId;
    public int AdvanceGodweaponId
    {
        set { m_AdvanceGodweaponId = value; }
        get { return m_AdvanceGodweaponId; }
    }
    //暗器ID
    private int m_AdvanceWishId;
    public int AdvanceWishId
    {
        set { m_AdvanceWishId = value; }
        get { return m_AdvanceWishId; }
    }

    //Seal玉玺
    private int m_AdvanceSealId;
    public int AdvanceSealId
    {
        get { return m_AdvanceSealId; }
        set { m_AdvanceSealId = value; }
    }

    //Mask面具
    private int m_AdvanceMaskId;
    public int AdvanceMaskId
    {
        set { m_AdvanceMaskId = value; }
        get { return m_AdvanceMaskId; }
    }

    //Crown皇冠
    private int m_AdvanceCrownId;
    public int AdvanceCrownId
    {
        set { m_AdvanceCrownId = value; }
        get { return m_AdvanceCrownId; }
    }

    //队长福利等级
    private int m_CaptainWelfareLevel;
    public int CaptainWelfareLevel
    {
        get { return m_CaptainWelfareLevel; }
        set { m_CaptainWelfareLevel = value; }
    }

    private int m_nPkValue = 0;
    public int PKValue
    {
        get { return m_nPkValue; }
        set { m_nPkValue = value; }
    }

    private int m_nForce = -1;
    public int Force
    {
        get { return m_nForce; }
        set {
            m_nForce = value;
            if (CaptureFlagStatePanelCtr.Instance && CaptureFlagStatePanelCtr.Instance.isActiveAndEnabled)
                CaptureFlagStatePanelCtr.Instance.SetCampMark();
        }
    }

    private int m_nWarForce = 0;
    public int WarForce    //用来把判断是否是在战场 不是0表示是在战场   并且和主角相同表示是在同一个阵营
    {
        get { return m_nWarForce; }
        set { m_nWarForce = value; }
    }

    //比武积分
    private int m_FightScore;
    public int FightScore
    {
        set { m_FightScore = value; }
        get { return m_FightScore; }
    }

    //情义积分
    private int m_QingYiScore;
    public int QingYiScore
    {
        set { m_QingYiScore = value; }
        get { return m_QingYiScore; }
    }

    //受赠积分
    private int m_ShouZengScore;
    public int ShouZengScore
    {
        get { return m_ShouZengScore; }
        set { m_ShouZengScore = value; }
    }
    private float m_fMoveSpeed = 5.0f;
    public float MoveSpeed
    {
        get
        {
#if UNITY_ANDROID
            return m_fMoveSpeed - 0.1f;
#else
            return m_fMoveSpeed;
#endif
        }
        set
        {
            if (m_fMoveSpeed != value)
            {
                m_fMoveSpeed = value;
                if (onMoveSpeedUpdate != null)
                    onMoveSpeedUpdate();
            }
        }
    }
    /// <summary>
    /// 移动速度被修改事件
    /// </summary>
    // 注:暂时采用事件抛出的方式来通知角色需要更新速度
    public UnityAction onMoveSpeedUpdate;
    
    //死亡状态
    public bool Die { get; set; }

    //朝向
    private float m_fDirection = 0.0f;
    public float Direction
    {
        get { return m_fDirection; }
        set { m_fDirection = value; }
    }

    //战斗力
    private int m_nCombatValue = 0;
    public int CombatValue
    {
        get { return m_nCombatValue; }
        set { m_nCombatValue = value; }
    }

    //装备总评分 装备基础评分+宝石+强化
    private int m_EquipTotalCombatValue = 0;
    public int EquipTotalCombatValue
    {
        set { m_EquipTotalCombatValue = value; }
        get { return m_EquipTotalCombatValue; }
    }

    //每日活力
    private int m_DailyActivityVal = 0;
    public int DailyActivityVal
    {
        set { m_DailyActivityVal = value; }
        get { return m_DailyActivityVal; }
    }

    //体能
    private int m_nCurStamina = 0;
    public int CurStamina
    {
        get { return m_nCurStamina; }
        set { m_nCurStamina = value; }
    }
    private int m_nOffLineExp = 0;
    public int OffLineExp
    {
        get { return m_nOffLineExp;  }
        set { m_nOffLineExp = value;  }
    }

    //学会的轻功技能等级
    private int m_nLightSkillLevel = 0;
    public int LightSkillLevel
    {
        get { return m_nLightSkillLevel; }
        set { m_nLightSkillLevel = value; }
    }

    private ulong _Guid = 0;
    public ulong Guid
    {
        get { return _Guid; }
        set { _Guid = value; }
    }
}