Ejemplo n.º 1
0
        private void FixedUpdate()
        {
            if (!photonView.isMine)
            {
                return;
            }

            //如果更换场景摄像头被Destroy了则playercamera指向新场景的摄像头
            if (!playercamera)
            {
                playercamera = FindObjectOfType <Camera>().transform;
            }

            if (!Ground)
            {
                Ground = GameObject.Find("Ground(Clone)").transform;
            }

            cooltime += Time.deltaTime;
            if (cooltime >= 0.2f)
            {
                cooltime = 0f;
                //每10帧判断敌人队伍是否应该被看见
                foreach (var item in WorldObj.allTeams)
                {
                    //判断每一支非己方的TeamObj是否该被看见
                    if (item.nationality != nationality)
                    {
                        bool       seen       = false; //是否该被看见变量
                        GameObject infoSource = null;
                        foreach (var team in WorldObj.allTeams)
                        {
                            if (team.nationality == nationality)
                            {
                                if (Vector3.Distance(item.transform.position, team.transform.position) < WorldObj.SkillDistance)
                                {
                                    seen       = true;
                                    infoSource = team.gameObject;
                                    break;
                                }
                            }
                        }
                        foreach (var eachcity in WorldObj.allCities)
                        {
                            if (eachcity && eachcity.nationality == nationality)
                            {
                                if (Vector3.Distance(item.transform.position, eachcity.transform.position) < WorldObj.SkillDistance)
                                {
                                    seen       = true;
                                    infoSource = eachcity.gameObject;
                                    break;
                                }
                            }
                        }


                        //根据判断结果使敌人消失或者显形(包括敌人血条teamHealthCanvas)
                        if (seen && !item.visible) //使显形
                        {
                            item.visible = true;
                            StartCoroutine(Funcs.SlowDisappearIE(item.teamHealthCanvas, 2f, 100f, true));
                            StartCoroutine(Funcs.SlowDisappearIE(item.transform, 2f, 100f, true));
                            try
                            {
                                //侦查信息显示
                                uiController.ScoutInfoShow(nationality, WorldObj.AnimatorAction.Victory, WorldObj.ScoutInfoType.EnemyBeFound, infoSource);
                            }
                            catch (Exception)
                            {
                            }
                        }
                        else if (!seen && item.visible)//使消失
                        {
                            item.visible = false;
                            StartCoroutine(Funcs.SlowDisappearIE(item.teamHealthCanvas, 2f, 100f, false));
                            StartCoroutine(Funcs.SlowDisappearIE(item.transform, 2f, 100f, false));
                        }
                    }
                }
            }


            //如果正在操作界面的城市受到攻击,则关闭UI
            if (cityController.cityObj && cityController.cityObj.fighting && WorldObj.UIRun)
            {
                uiController.CloseAllPanels();
            }

            //如果城市的敌人列表中的队伍不再攻城或者已经不存在,则从列表中清除该队伍
            foreach (var item in WorldObj.allCities)
            {
                if (item && item.fighting)
                {
                    for (int i = 0; i < item.enemies.Count; i++)
                    {
                        TeamObj fightTeam = null;
                        foreach (var eachTeam in WorldObj.allTeams)
                        {
                            if (eachTeam.hero == item.enemies[i])
                            {
                                fightTeam = eachTeam;
                            }
                        }

                        if ((fightTeam && !fightTeam.enemies.Contains(item.word)) || !fightTeam)
                        {
                            item.UpdateEnemies(item.enemies[i], false);
                        }
                        if (item.enemies.Count == 0)
                        {
                            item.UpdateFighting(false);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 英雄使用英雄技
        /// </summary>
        /// <param name="_objTeam">目标队伍</param>
        public void HeroUseSkill(TeamObj _objTeam)
        {
            if (!clickSkill)
            {
                return;
            }
            clickSkill = false;

            //如果本队伍是工兵,则不适用英雄技
            if (teamObj.soldiertype == WorldObj.SoldierType.Worker ||
                teamObj.soldiertype == WorldObj.SoldierType.Tank)
            {
                return;
            }
            //判断目标队伍距离
            if (Vector3.Distance(_objTeam.transform.position, teamObj.transform.position) > WorldObj.SkillDistance)
            {
                return;
            }

            switch (WorldObj.MatchHero(teamObj.hero).heroskill)
            {
            case WorldObj.HeroSkill.none:
                break;

            case WorldObj.HeroSkill.IncreaseOwnSpeed:
                if (_objTeam.nationality == countryObj.nationality)
                {
                    //急行军倒计时,计时完毕恢复初始速度
                    _objTeam.UpdateTeamNAVSpeed(WorldObj.IncreaseOwnSpeedCoefficient * _objTeam.GetComponent <NavMeshAgent>().speed);
                    StartCoroutine(TeamSpeedCountDownRestore(WorldObj.IncreaseOwnSpeedTime, _objTeam));
                    // 英雄技能进入冷却
                    HeroSkillCoolDown();
                }
                break;

            case WorldObj.HeroSkill.ReduceEnemySpeed:
                if (_objTeam.nationality != countryObj.nationality)
                {
                    //缓慢倒计时,计时完毕恢复初始速度
                    _objTeam.UpdateTeamNAVSpeed(WorldObj.ReduceEnemySpeedCoefficient * _objTeam.GetComponent <NavMeshAgent>().speed);
                    StartCoroutine(TeamSpeedCountDownRestore(WorldObj.ReduceEnemySpeedTime, _objTeam));
                    // 英雄技能进入冷却
                    HeroSkillCoolDown();
                }
                break;

            case WorldObj.HeroSkill.Disorient:
                if (_objTeam.nationality != countryObj.nationality)
                {
                    //迷惑减低军心
                    _objTeam.UpdateTeamMorale(Mathf.RoundToInt(WorldObj.DisorientCoefficient * _objTeam.GetComponent <TeamObj>().teammorale));
                    // 英雄技能进入冷却
                    HeroSkillCoolDown();
                }
                break;

            case WorldObj.HeroSkill.Encourage:
                if (_objTeam.nationality == countryObj.nationality)
                {
                    //鼓舞提升军心
                    _objTeam.UpdateTeamMorale(Mathf.RoundToInt(WorldObj.EncourageCoefficient * _objTeam.GetComponent <TeamObj>().teammorale));
                    // 英雄技能进入冷却
                    HeroSkillCoolDown();
                }
                break;

            case WorldObj.HeroSkill.Silence:
                if (_objTeam.nationality != countryObj.nationality)
                {       //保存原技能
                    HeroObj            objHero       = WorldObj.MatchHero(_objTeam.hero);
                    WorldObj.HeroSkill originalSkill = objHero.heroskill;
                    //沉默对手
                    objHero.GiveHeroSkill(WorldObj.HeroSkill.none);
                    //计时结束后恢复对手
                    StartCoroutine(HeroSkillSilenceCountDownRestore(WorldObj.SilenceTime, objHero, originalSkill));
                    // 英雄技能进入冷却
                    HeroSkillCoolDown();
                }
                break;

            case WorldObj.HeroSkill.Disease:
                if (_objTeam.nationality != countryObj.nationality)
                {
                    //瘟疫降低敌方队伍人数
                    _objTeam.UpdateSoldierNumber(Mathf.RoundToInt(WorldObj.DiseaseCoefficient * _objTeam.GetComponent <TeamObj>().soldiernumber));
                    // 英雄技能进入冷却
                    HeroSkillCoolDown();
                }
                break;

            default:
                break;
            }
        }