public static void DoingUnitAttackData(TeamAttackingData data)
    {
        int c_inj = 0, c_death = 0;
        int t_inj = 0, t_death = 0;

        foreach (var item in data.UnitAttackingDatas)
        {
            if (item == null)
            {
                continue;
            }
            BattleTools.DoDameger(item);

            //BUFF Time_3
            BattleTools.DoUnitBuff(item, EffectTimeType.Time_3);

            c_inj   += item.data.Injury;
            c_death += item.data.Death;
            t_inj   += item.toData.Injury;
            t_death += item.toData.Death;
        }

        UiIndex.AddEventText(string.Format("对敌人造成{0}点伤害,击伤{1}人,击杀{2}人",
                                           data.DoDamger, t_inj, t_death));

        UiIndex.AddEventText(string.Format("己方受到{0}点伤害,受伤{1}人,死亡{2}人\n",
                                           data.ByDamger, c_inj, c_death));
    }
    ///index 0-2 player 3-5 Enemy
    public void SetRankText(int index, Team team)
    {
        BattleTools.SetRankText(ranks[index], team, (Rank, Team) => { RegistTeamButton(Rank, Team); });
        // Rank rank = ranks[index];

        // rank.Hero_1_Text.text = "";
        // rank.Hero_2_Text.text = "";
        // rank.Army_Text_0.text = "";
        // rank.Army_Text_1.text = "";

        // if (team != null)
        // {
        //     if (team.MainHero != null) rank.Hero_1_Text.text = team.MainHero.Name;
        //     if (team.MinorHero != null) rank.Hero_2_Text.text = team.MinorHero.Name;
        //     TeamSummaryData dic = team.GetSummary();
        //     if (dic.Maxhp == 0) return;
        //     string str;
        //     str = string.Format("Hp:{0}/{1}\n攻击:{2}\n人数:{3}", dic.Hp, dic.Maxhp, dic.Ad, dic.Count);
        //     rank.Army_Text_0.text = str;
        //     str = string.Format("士气:{0}\n防御:{1}\n受伤:{2}", dic.Morale, dic.Ed, dic.Injury);
        //     rank.Army_Text_1.text = str;
        //     RegistTeamButton(rank, team);
        // }

        teams[index] = team;
    }
    public void Init()
    {
        if (!UiIndex.gameObject.activeSelf)
        {
            UiIndex.gameObject.SetActive(true);
        }

        BattleTools.DoTeamBuff(Player, Enemy, null, EffectTimeType.Time_0);  //初始化BUFF Time_0

        //UiIndex = GameObject.FindObjectOfType<BattlefieldUiIndex>();
        UiIndex.m_AttackButton.onClick.RemoveAllListeners();
        UiIndex.m_EscapeButton.onClick.RemoveAllListeners();
        UiIndex.m_AttackButton_Text.text = "进攻";
        UiIndex.m_EscapeButton_Text.text = "撤退";
        UiIndex.ClearEventText();
        UiIndex.HideTableWindow();
        UiIndex.HideInfoWindow();

        UpdataBattleRanksText();
        UiIndex.ClearEventText();
        UiIndex.AddEventText("战斗开始,请下令进攻!");
        UiIndex.m_AttackButton.onClick.AddListener(Attack);
        UiIndex.m_EscapeButton.onClick.AddListener(Escape);

        UiIndex.m_Skill_1_Button.onClick.AddListener(() => { SkillButtonOnClick(0); });
        UiIndex.m_Skill_2_Button.onClick.AddListener(() => { SkillButtonOnClick(1); });
        UiIndex.m_Skill_3_Button.onClick.AddListener(() => { SkillButtonOnClick(2); });
    }
    public static void SetDamager(int all_damger, int all_t_damger, TeamSummaryData team_dic, TeamSummaryData toteam_dic, List <UnitAttackingData> teamDatas)
    {
        float injpr   = BattleTools.GetInjurePr(all_t_damger, team_dic, toteam_dic);
        float t_injpr = BattleTools.GetInjurePr(all_damger, toteam_dic, team_dic);

        int all_Ed_damger = 0, avg_Ed_damger = 0, all_t_Ed_damger = 0, avg_t_Ed_damger = 0;

        if (team_dic != null)
        {
            all_Ed_damger = BattleTools.GetEdDamager(all_t_damger, team_dic);        //减少的总伤害
            avg_Ed_damger = (int)((float)all_Ed_damger / (float)team_dic.UnitCount); //平均减少的伤害  所有单位共享防御
        }

        if (toteam_dic != null)
        {
            all_t_Ed_damger = BattleTools.GetEdDamager(all_damger, toteam_dic);
            avg_t_Ed_damger = (int)((float)all_t_Ed_damger / (float)toteam_dic.UnitCount);
        }

        foreach (var item in teamDatas) //更新伤害
        {
            item.data.DoDamger   = Mathf.Clamp(item.data.DoDamger - avg_t_Ed_damger, 0, int.MaxValue);
            item.toData.DoDamger = Mathf.Clamp(item.toData.DoDamger - avg_Ed_damger, 0, int.MaxValue);
            item.data.InjuryPr   = injpr;
            item.toData.InjuryPr = t_injpr;
        }
    }
    private void SetTeamToTeamData(TeamAttackingData teamData)
    {
        TeamSummaryData          team_dic   = teamData.Team_dic;
        TeamSummaryData          toteam_dic = teamData.ToTeam_dic;
        List <UnitAttackingData> unitDatas  = teamData.UnitAttackingDatas;

        //buff1 例如调整特定单位对特定单位的伤害 调整伤害的BUFF                        Time_1
        foreach (var item in unitDatas)
        {
            BattleTools.DoUnitBuff(item, EffectTimeType.Time_1);
        }

        int all_damger   = BattleTools.GetDameger(unitDatas);       //造成总伤害
        int all_t_damger = BattleTools.GetByDameger(unitDatas);     //对方的造成总伤害

        // 此处调整受伤率

        // 根据各种因素调整伤害
        SetDamager(all_damger, all_t_damger, team_dic, toteam_dic, unitDatas);

        //buff3 例如调整特定单位对特定单位的保护效果 真实伤害 调整受到伤害的BUFF     Time_2
        foreach (var item in unitDatas)
        {
            BattleTools.DoUnitBuff(item, EffectTimeType.Time_2);
        }

        teamData.DoDamger = BattleTools.GetDameger(unitDatas);   //总实际伤害
        teamData.ByDamger = BattleTools.GetByDameger(unitDatas);
    }
    public void SetDistentDamger(TeamAttackingData[,] team_attack_datas)
    {
        //玩家对敌人调整距离伤害
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (team_attack_datas[i, j] == null)
                {
                    continue;
                }
                int  locIndex   = i; //当前队伍编号
                int  locToIndex = j; //当前敌方队伍编号
                bool isToteam   = false;
                Army army       = Player.army;
                TeamAttackingData[] toTeamAttackingData = new TeamAttackingData[3];

                for (int ic = 0; ic < 3; ic++)
                {
                    toTeamAttackingData[ic] = team_attack_datas[locIndex, ic];
                }

                foreach (var item in team_attack_datas[locIndex, locToIndex].UnitAttackingDatas)
                {
                    BattleUnitData unitData = item.data;
                    BattleTools.DealWithDistent(unitData, locIndex, locToIndex, toTeamAttackingData, army, isToteam);
                }
            }
        }

        //敌人对玩家调整距离伤害
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (team_attack_datas[j, i] == null)
                {
                    continue;
                }
                int  locIndex   = i; //当前队伍编号
                int  locToIndex = j; //当前敌方队伍编号
                bool isToteam   = true;
                Army army       = Enemy.army;
                TeamAttackingData[] toTeamAttackingData = new TeamAttackingData[3];

                for (int ic = 0; ic < 3; ic++)
                {
                    toTeamAttackingData[ic] = team_attack_datas[ic, locIndex];
                }

                foreach (var item in team_attack_datas[locToIndex, locIndex].UnitAttackingDatas)
                {
                    BattleUnitData unitData = item.toData;
                    BattleTools.DealWithDistent(unitData, locIndex, locToIndex, toTeamAttackingData, army, isToteam);
                }
            }
        }
    }
Beispiel #7
0
        static void Main(string[] args)
        {
            var aInts = new[] { 1, 2, 3, 4, 5 };
            var bInts = new[] { 6, 7, 8, 9, 10 };

            var genBaseTeamA = BattleTools.GenBaseTeam(aInts, BelongTeam.A);
            var genBaseTeamB = BattleTools.GenBaseTeam(bInts, BelongTeam.B);

            var battleGround = new BattleGround(genBaseTeamA.Concat(genBaseTeamB));
            var goBattle     = battleGround.GoBattle();

            Console.Out.WriteLine($"result::{goBattle}");
        }
    public override void DoEffect(string skillName, King king, King toking, BattleData battleData)
    {
        int damager = int.Parse(Values[0]);
        List <TeamAttackingData> team_attack_datas = new List <TeamAttackingData>();


        foreach (var team in toking.army.team)
        {
            if (team == null)
            {
                continue;
            }
            if (team.GetBattleCount() == 0)
            {
                continue;
            }
            TeamAttackingData        teamData = new TeamAttackingData();
            List <UnitAttackingData> list     = new List <UnitAttackingData>();

            TeamSummaryData data = team.GetSummary();
            list = BattleContorl.CreateSkillToUnitData(skillName, damager, team, data, battleData);

            //调整伤亡率
            BattleContorl.SetDamager(damager, 0, null, data, list);

            //buff3 例如调整特定单位对特定单位的保护效果 真实伤害 调整受到伤害的BUFF     Time_2
            foreach (var unitdata in list)
            {
                BattleTools.DoUnitBuff(unitdata, EffectTimeType.Time_2);
            }

            teamData.DoDamger = BattleTools.GetDameger(list);
            team_attack_datas.Add(teamData);
            teamData.UnitAttackingDatas = list;
        }

        foreach (var item in team_attack_datas)
        {
            BattleContorl.DoingUnitAttackData(item);
        }

        //BUFF 战后BUFF Time_4
        foreach (var item in team_attack_datas)
        {
            BattleTools.DoTeamBuff(king, toking, item, EffectTimeType.Time_4);
        }
    }
    public void Attack()
    {
        TeamAttackingData[,] team_attack_datas = new TeamAttackingData[3, 3];
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                team_attack_datas[i, j] = CeateAttackingData(Player.army.team[i], Enemy.army.team[j], (j + i + 1), Round, this);
            }
        }

        foreach (var item in team_attack_datas)
        {
            if (item != null)
            {
                foreach (var iitem in item.UnitAttackingDatas)
                {
                    iitem.battleData.AllTeamAttackDatas = team_attack_datas;
                }
            }
        }


        //此处根据攻击距离调整伤害
        SetDistentDamger(team_attack_datas);

        foreach (var item in team_attack_datas)
        {
            if (item != null)
            {
                SetTeamToTeamData(item);
            }
        }

        UiIndex.AddEventText("--{ 回合-" + Round + " }--");


        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (team_attack_datas[i, j] == null)
                {
                    continue;
                }
                if (team_attack_datas[i, j].DoDamger <= 0 && team_attack_datas[i, j].ByDamger <= 0)
                {
                    continue;
                }

                UiIndex.AddEventText("[己方队伍" + (i + 1) + "] - [敌方队伍" + (j + 1) + "]");

                DoingUnitAttackData(team_attack_datas[i, j]);
            }
        }

        UpdataBattleRanksText();

        //BUFF 战后BUFF Time_4
        foreach (var item in team_attack_datas)
        {
            BattleTools.DoTeamBuff(Player, Enemy, item, EffectTimeType.Time_4);
        }

        DorV();

        Round++;
    }
 public void UpdataRanksText()
 {
     BattleTools.SetRankText(Ranks[0], Player.army.team[0], (Rank, Team) => { });
     BattleTools.SetRankText(Ranks[1], Player.army.team[1], (Rank, Team) => { });
     BattleTools.SetRankText(Ranks[2], Player.army.team[2], (Rank, Team) => { });
 }