Beispiel #1
0
    public void SetBattleData(BattleSendData battleSendData)
    {
        m_BattleData       = battleSendData;
        m_TimelinePlayList = new List <PlayableAsset>();
        int offset = m_BattleData.m_IsDirect ? 0 : 2;

        m_TimelinePlayList.Add(m_TimelineAssets[offset + (m_BattleData.m_IsPlayerAttack ? (int)TimelineType.PlayerAtkDir : (int)TimelineType.EnemyAtkDir)]);
        if (!m_BattleData.m_IsHeal && m_BattleData.m_IsCounter)
        {
            m_TimelinePlayList.Add(m_TimelineAssets[offset + (!m_BattleData.m_IsPlayerAttack ? (int)TimelineType.PlayerAtkDir : (int)TimelineType.EnemyAtkDir)]);
        }

        attacker.SetActorInfo(m_BattleData.m_IsPlayerAttack ? m_BattleData.m_AttackerData : m_BattleData.m_TargetData);
        target.SetActorInfo(!m_BattleData.m_IsPlayerAttack ? m_BattleData.m_AttackerData : m_BattleData.m_TargetData);
    }
Beispiel #2
0
    public void AttackWithCurrentPlayer(Player player, HexTile destTile, bool checkScenarion = true)
    {
        if (!destTile.m_IsHighLight && !destTile.m_Impassible)
        {
            Debug.Log("destination invalid");
            return;
        }

        Player attacker = player;
        Player target   = m_PlayerManager.GetPlayer(destTile.m_Hex);

        if (checkScenarion && m_ScenarionManager.SetBeforeScenarion(attacker, target, destTile.m_Hex))
        {
            ChangeState(GameState.Scenarion);
            return;
        }

        string       backGround     = "";
        string       getItem        = "";
        bool         isHeal         = attacker.m_IsEnemy && target.m_IsEnemy;
        int          getExp         = 0;
        bool         isDirectAtk    = HexCoord.HexDistance(attacker.m_Hex, target.m_Hex) == 1;
        bool         isCounter      = target.GetIsCanAttack(isDirectAtk);
        int          attackerDamage = 0;
        int          targetDamage   = 0;
        int          level;
        int          raceID      = attacker.m_IsEnemy ? target.m_Race : attacker.m_Race;
        string       playerClass = m_ElementManager.GetRace(raceID).name;
        HexTile      targetTile  = m_StageMapManager.GetMapTile(attacker.m_Hex);
        PlayerRecord playerData  = new PlayerRecord();

        isCounter &= GetBattleResult(attacker, target, destTile, isDirectAtk, isHeal, out attackerDamage, ref getExp);
        if (isCounter)
        {
            GetBattleResult(target, attacker, targetTile, isDirectAtk, isHeal, out targetDamage, ref getExp);
        }
        if (!isHeal)
        {
            int      enemyIndex = attacker.m_IsEnemy ? attacker.playerIndex : target.playerIndex;
            HexCoord hex        = attacker.m_IsEnemy ? attacker.m_Hex : target.m_Hex;
            SetBattleScenarionChecker(enemyIndex, hex);
        }
        attacker.TurnEnd();
        m_StageMapManager.RemoveHighlightTiles();

        BattlePlayerData attackerData = GetBattlePlayerData(attacker, targetTile, targetDamage);
        BattlePlayerData targetData   = GetBattlePlayerData(target, destTile, attackerDamage);

        //level up
        PlayerRecord lvUpProp     = null;
        Player       checkLevelUp = m_IsPlayerTurn ? attacker : target;

        lvUpProp = checkLevelUp.LevelUp(m_PlayerLevelMax, m_PlayerHPMax, m_PlayerStateMax);
        if (lvUpProp != null)
        {
            level      = checkLevelUp.m_Level;
            playerData = checkLevelUp.GetPlayerProp();
            checkLevelUp.LevelUp(lvUpProp);
        }

        Player enemy = attacker.m_IsEnemy ? attacker : target;

        if (!isHeal && !enemy.IsAlive)
        {
            if (UnityEngine.Random.Range(0f, 1f) < 0.5)
            {
                m_PlayerDataManager.m_PlayerGold += target.m_Gold;
                getItem = "<color=yellow>" + target.m_Gold + "</color>Gold";
            }
            else
            {
                if (m_PlayerDataManager.m_PlayerWeapons.ContainsKey(target.m_EquipWeapon))
                {
                    m_PlayerDataManager.m_PlayerWeapons[target.m_EquipWeapon]++;
                }
                else
                {
                    m_PlayerDataManager.m_PlayerWeapons.Add(target.m_EquipWeapon, 1);
                }
                getItem = m_ElementManager.GetWeapon(target.m_EquipWeapon).name;
            }
        }
        battleData = new BattleSendData(attackerData, targetData, backGround, isHeal || !attacker.m_IsEnemy, isHeal, isDirectAtk, isCounter, getExp, getItem, playerClass, lvUpProp, playerData);
        //TODO set battle data to demo
        ////send to battle scene
        //isWaitingBattle = true;

        //battleData = new BattleSendData(attackerName, targetName, backGround, attackerTileName, targetTileName, isPlayerAttack, isHeal, isCounter, isDirectAtk, attackerDefensRate, targetDefensRate, attackerMaxHP, attackerHP, damageByAttacker, targetMaxHP, targetHP, damageByTarget, getItem, playerExp, getExp, level, playerClass, playerData, lvUpProp);
        //Debug.Log(Newtonsoft.Json.JsonConvert.SerializeObject(battleData));
        ////SceneManager.LoadScene("Battle");
    }