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); }
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"); }