예제 #1
0
 //[RuntimeInitializeOnLoadMethod]
 //public static void LoadFromRecord() {
 //    CharacterInfo info = new CharacterInfo();
 //   info= info.Load<CharacterInfo>();
 //    Debug.Log(info.Items.Weapons.Count);
 //}
 public CharacterInfo(CharacterLogic Logic)
 {
     ID        = Logic.GetID();
     Level     = Logic.GetLevel();
     Exp       = Logic.GetExp();
     Career    = Logic.GetCareer();
     Attribute = Logic.GetAttribute();
     CurrentHP = Logic.GetCurrentHP();
     MaxHP     = Logic.GetMaxHP();
     Items     = new ItemGroup();
     Skills    = new SkillGroup();
 }
예제 #2
0
    public void AttackUnit(CharacterLogic attacker, CharacterLogic defender, UnityAction onComplete)
    {
        //以Sequence的形式呈现战斗过程,
        gameMode.BeforePlaySequence();
        gameMode.ResetSequence("Attack");
        List <BattleAttackInfo> atkInfo = AssembleAttackSequenceEvent(gameMode.AddSequenceEvent <Sequence.AttackAnimation>, attacker, defender);
        var getExp      = gameMode.AddSequenceEvent <Sequence.GetExp>();
        int damageCount = 0;

        foreach (var v in atkInfo)
        {
            damageCount += v.damageToDefender;
        }
        bool enemyDead = damageCount >= defender.GetCurrentHP();
        bool critical  = false;

        getExp.Info = BattleLogic.GetAttackExp(attacker, defender.GetCareer(), defender.GetLevel(), enemyDead, damageCount, critical);
        gameMode.PlaySequence(onComplete);
        //计算处方向 然后在Unitshower里面转向并攻击,抖动
    }
예제 #3
0
    public static LevelUPInfo GetAttackExp(CharacterLogic logic, int defenderCareerRank, int defenderLevel, bool isEnemyDead, int damage, bool isCritical)
    {
        int         attackerLevel  = logic.GetLevel();
        int         attackerExp    = logic.GetExp();
        int         careerRankDiff = 0;
        LevelUPInfo r         = new LevelUPInfo();
        int         levelDiff = attackerLevel - defenderLevel;
        int         exp       = careerRankDiff * 20 + levelDiff + 10;

        exp = Mathf.Max(exp, 2);
        if (isEnemyDead)
        {
            exp *= 3;
        }
        else
        {
            if (isCritical)
            {
                exp *= 2;
            }
        }
        exp        = Mathf.Min(100, exp);
        r.startExp = attackerExp;
        int finalExp = r.startExp + exp;

        r.endExp     = finalExp % 100;
        r.startLevel = attackerLevel;
        r.endLevel   = attackerLevel + finalExp / 100;
        if (r.endLevel > r.startExp)
        {
            CharacterAttribute add = GetGrow(logic.GetAttributeGrow());

            r.abilityData = new List <LevelUPInfo.AbilityData>();
            LevelUPInfo.AbilityData d = new LevelUPInfo.AbilityData(logic.GetAttribute().Array, add.Array);
            r.abilityData.Add(d);
        }
        return(r);
    }