示例#1
0
        void OnHPAdd(int legionId, int casterLegionId, float addHP)
        {
            LegionData legionData = War.GetLegionData(legionId);

            legionData.expeditionTotalHP += addHP;
//			legionData.expeditionLeftHP += addHP;
        }
示例#2
0
        void Update()
        {
            if (!War.isGameing)
            {
                return;
            }

            int count = War.scene.legionHP.Count;

            colorHPs.Clear();
            foreach (KeyValuePair <int, float> kvp in War.scene.legionHP)
            {
                int colorId = War.GetLegionData(kvp.Key).colorId - 1;
                colorHPs.Add(colorId, kvp.Value);
            }

            for (int i = 0; i < itemCount; i++)
            {
                TBLegionHPItem item = items[i];
                if (colorHPs.ContainsKey(i))
                {
                    float hp = colorHPs[i];
                    item.SetData(hp, War.sceneData.legionTotalMaxHP);
                }
            }
        }
示例#3
0
        /** 同步英雄下阵 */
        public void ExeHeroBackstag(int heroUid, int targetLegionId)
        {
            UnitCtl    heroUnit         = War.scene.GetUnitForUID(heroUid);
            LegionData targetLegionData = War.GetLegionData(targetLegionId);

            War.scene.KillHero(heroUnit, targetLegionData);
        }
示例#4
0
        /** 设置生产技能 */
        public void ExeSetProduceSkill(int legionId, int skillUid, float speed)
        {
            LegionData          legionData   = War.GetLegionData(legionId);
            UnitCtl             unitCtl      = War.scene.GetUnitForUID(legionData.unitData.uid);
            BLegionSkillManager skillManager = unitCtl.GetComponent <BLegionSkillManager> ();

            skillManager.SetProduceSkill(skillUid, speed);
        }
示例#5
0
        void OnBuildComplete()
        {
            if (War.vsmode != VSMode.PVE_Expedition)
            {
                gameObject.SetActive(false);
            }

            attack  = War.GetLegionData(1);
            defense = War.GetLegionData(2);
        }
示例#6
0
        void OnHPConst(int legionId, int casterLegionId, float constHP)
        {
            LegionData legionData = War.GetLegionData(legionId);

            legionData.expeditionTotalHP -= constHP;
            if (legionData.expeditionTotalHP < 0)
            {
                legionData.expeditionTotalHP = 0;
            }
        }
示例#7
0
        void Update()
        {
            if (!War.isGameing)
            {
                return;
            }
            float totalWidth = 0f;

            int   count        = War.scene.legionHP.Count;
            float itemMaxWidth = maxWidth - (count - 1) * itemMinWidth;



            colorHPs.Clear();
            foreach (KeyValuePair <int, float> kvp in War.scene.legionHP)
            {
                int colorId = War.GetLegionData(kvp.Key).colorId - 1;
                colorHPs.Add(colorId, kvp.Value);
            }

            for (int i = 0; i < itemCount; i++)
            {
                LegionHPItem item = items[i];
                if (colorHPs.ContainsKey(i))
                {
                    float hp = colorHPs[i];
                    item.SetNum(hp);
                    item.SetX(totalWidth);
                    float rate  = hp / War.scene.totalHP;
                    float width = rate * maxWidth;
                    if (width < itemMinWidth)
                    {
                        width = itemMinWidth;
                    }
                    if (width > maxWidth - totalWidth)
                    {
                        width = maxWidth - totalWidth;
                    }
                    if (width > itemMaxWidth)
                    {
                        width = itemMaxWidth;
                    }
                    totalWidth += width;
                    item.SetWidth(width);
                    if (!item.gameObject.activeSelf)
                    {
                        item.gameObject.SetActive(true);
                    }
                }
                else if (item.gameObject.activeSelf)
                {
                    item.gameObject.SetActive(false);
                }
            }
        }
示例#8
0
        /** 兵营改变势力 */
        public void OnBuildChangeLegion(UnitData buildUnitData, int preLegionId, int targetLegionId)
        {
            // 强制更新兵营所属势力
            updateBuildLegion.Execute();

            if (preLegionId == targetLegionId)
            {
                Debug.Log("<color=red>preLegionId == targetLegionId</color>");
            }

            // 攻占方势力数据
            LegionData targetLegionData = War.GetLegionData(targetLegionId);

            UnitCtl heroUnit = GetHeroByBuild(buildUnitData.unit);

            if (heroUnit != null)
            {
                // 英雄数据
                HeroData heroData = heroUnit.heroData;
                // 英雄行为
                BHero heroBehaviour = heroUnit.GetComponent <BHero>();
                //
                int legionId = heroUnit.unitData.legionId;

                // ---如果状态是幕前
                if (heroData.state == HeroState.Foregstage)
                {
//					KillHero(heroUnit, targetLegionData);

                    if (War.requireSynch)
                    {
                        if (War.IsSendService(targetLegionData.legionId, targetLegionData.type))
                        {
                            War.service.C_SyncHeroBackstage_0x828(heroUnit.unitData.uid, targetLegionId);
                        }
                    }
                    else
                    {
                        KillHero(heroUnit, targetLegionData);
                    }
                }
            }
            else
            {
//				// 添加经验--占领
//				targetLegionData.levelData.AddExp_Build();
            }

            War.signal.BuildChangeLegionComplete();
        }
        public Vector3 GetLegionPosition(int legionId)
        {
            if (_screenSize.x != Screen.width || _screenSize.y != Screen.height)
            {
                GenerationLegionPositionDict();
            }

            LegionData legionData = War.GetLegionData(legionId);

            if (legionPositionDict.ContainsKey(legionData.colorId))
            {
                return(legionPositionDict[legionData.colorId]);
            }

            return(new Vector3(0, 0, 30));
        }
示例#10
0
        //获取非己方人口数量最大的势力的人口
        public float GetEnemyLegionHPMax(int mLegionId)
        {
            float hp = 0;

            foreach (var item in legionHP)
            {
                if (War.GetLegionData(mLegionId).GetRelation(item.Key) == RelationType.Enemy)
                {
                    if (hp < item.Value)
                    {
                        hp = item.Value;
                    }
                }
            }

            return(hp);
        }
示例#11
0
        /** 改变势力 */
        public void ChangeLegion(int legionId)
        {
            if (War.isRecord)
            {
                return;
            }

            if (War.requireSynch)
            {
                if (legionId == War.ownLegionID)
                {
                    ExeChangeLegion(legionId);
                    War.pvp.C_Build(uid, legionId);
                }
                else
                {
                    if (War.GetLegionData(legionId).type != LegionType.Player && War.isMainLegion)
                    {
                        ExeChangeLegion(legionId);
                        War.pvp.C_Build(uid, legionId);
                    }
                }
            }
            else
            {
                ExeChangeLegion(legionId);
            }

//			if(War.requireSynch)
//			{
////				ExeChangeLegion(legionId);
//
//				if (War.IsSendService (legionId, legionData.type))
//				{
//					War.pvp.C_Build(uid, legionId);
//				}
//			}
//			else
//			{
//				ExeChangeLegion(legionId);
//			}
        }
示例#12
0
        protected override void OnUpdate()
        {
            base.OnUpdate();



            if (_team != unitData.legionId)
            {
                _preteam = _team;
                _team    = unitData.legionId;
                if (_preteam == -1)
                {
                    _preteam = _team;
                }
                unitData.death = true;

                if (_changeInactiveTime <= 0)
                {
                    _changeInactivePreTeam = _preteam;
                    _changeInactiveTeam    = _team;
                    if (!_hasHero)
                    {
                        // 添加经验--占领
                        War.GetLegionData(_team).levelData.AddExp_Build(unitCtl);
                    }
                }

                _changeInactiveTime = changeInactiveTime;

                Coo.soundManager.PlaySound("effect_get_build");
            }

            if (_changeInactiveTime > 0)
            {
                _changeInactiveTime -= Time.deltaTime;
                if (_changeInactiveTime <= 0 && _changeInactiveTeam != _team)
                {
                    // 添加经验--占领
                    War.GetLegionData(_team).levelData.AddExp_Build(unitCtl);
                }
            }

            _hasHero = unitData.hasHero;

            if (_death != unitData.death)
            {
                _death = unitData.death;

                if (_death)
                {
                    buildChangeManager.StopAll();
                    buildChangeAvatar.Play(0, hideAvatarTime, showAvatarTime, 0.02f, effect);
                }
            }

            if (_death)
            {
                unitData.deathTime -= Time.deltaTime;

                if (unitData.deathTime <= 0)
                {
//					if(unitData.level > 1) unitData.level -= 1;
                }
            }
        }
示例#13
0
        bool Rescue()
        {
//			Debug.Log("--------------Rescue--------------");

            // 救援,随机派部队数量
            int sendCount = aiConfig.GetRescueSendCount();

//			Debug.Log("救援,随机派部队数量 sendCount=" + sendCount);
            if (sendCount <= 0)
            {
                return(false);
            }

            UnitCtl rescueUnit     = null;
            float   minRescueScore = 9999999;

            foreach (UnitCtl build in ownBuilds)
            {
                build.unitData.GenerationFromLegionUnitTotalNum();
                if (build.unitData.attackUnitNum > 0)
                {
                    float distance = 0;
                    foreach (UnitCtl buildB in ownBuilds)
                    {
                        if (build == buildB)
                        {
                            continue;
                        }
                        distance += War.scene.GetBuildDistance(build, buildB);
                    }
                    distance = ownBuilds.Count > 1 ? distance / (ownBuilds.Count - 1) : 0;;
                    build.unitData.rescueScore = build.hp + distance * distanceScoreRate_Rescue;

                    if (build.unitData.rescueScore < minRescueScore)
                    {
                        minRescueScore = build.unitData.rescueScore;
                        rescueUnit     = build;
                    }
                }
            }

            if (rescueUnit == null)
            {
                return(false);
            }

            // 救援,生成派兵的建筑
            List <UnitCtl> ownSelectBuilds = new List <UnitCtl>();
            int            index           = 0;

            foreach (UnitCtl build in ownBuilds)
            {
                if (index < sendCount && build != rescueUnit)
                {
                    ownSelectBuilds.Add(build);
                    index++;
                    if (index >= sendCount)
                    {
                        break;
                    }
                }
            }

            if (ownSelectBuilds.Count <= 0)
            {
                return(false);
            }


            bool isSend = true;

            float rescueHP = 0;

            foreach (UnitCtl ownBuild in ownSelectBuilds)
            {
                rescueHP += ownBuild.unitData.hp * aiConfig.sendArmPercent;
            }

            float enemyHP = 0;

            foreach (KeyValuePair <int, int> kvp in rescueUnit.unitData.fromLegionUnitTotalNumDict)
            {
                if (kvp.Value > 0)
                {
                    LegionData itemLegionData = War.GetLegionData(kvp.Key);
                    if (unitData.GetRelation(itemLegionData.legionId) == RelationType.Enemy)
                    {
                        enemyHP += WarFormula.WD_Solider2Casern_Damage(rescueUnit.unitData.def, itemLegionData.soliderInitData.atk, kvp.Value * itemLegionData.soliderData.hp2UnitRate);
                    }
                    else
                    {
                        rescueHP += kvp.Value * itemLegionData.soliderData.hp2UnitRate;
                    }
                }
            }

            isSend = rescueHP > enemyHP;

            if (isSend)
            {
//				Debug.Log("<color=blue>救援</color>");
                foreach (UnitCtl ownBuild in ownSelectBuilds)
                {
                    BSendArming bSendArming = ownBuild.GetComponent <BSendArming>();
                    bSendArming.Send(rescueUnit, aiConfig.sendArmPercent);
                }
            }



            return(isSend);
        }
示例#14
0
        public static bool IsSendService(int legionId)
        {
            LegionData legionData = War.GetLegionData(legionId);

            return(War.IsSendService(legionData));
        }
示例#15
0
        public void Execute()
        {
//			Debug.Log("UpdateHP War.processState = "+ War.processState);
            if (War.processState != WarProcessState.Gameing)
            {
                return;
            }

            friendHP = 0f;
            totalHP  = 0f;


            friendBuildCount = 0;
            totalBuildCount  = 0;
            legionHP.Clear();
            //			Debug.Log(("<color=green>------------------</color>"));

            foreach (KeyValuePair <int, LegionData> kvp in War.sceneData.legionDict)
            {
                if (kvp.Value.type != LegionType.Neutral)
                {
                    legionHP.Add(kvp.Value.legionId, 0);
                }
            }

            foreach (UnitCtl unit in buildList)
            {
                //				Debug.Log(string.Format("<color=green>buildList unit.teamData.team={0},   unit.teamData.type={1},   totalHP={2}</color>", unit.teamData.team, unit.teamData.type, totalHP));
                if (unit.legionData.type == LegionType.Neutral)
                {
                    continue;
                }

                AddBuild(unit);
            }

            foreach (UnitCtl unit in soliderList)
            {
                //				Debug.Log(string.Format("<color=green>soliderList unit.teamData.team={0},   unit.teamData.type={1},   totalHP={2}</color>", unit.teamData.team, unit.teamData.type, totalHP));
                if (unit.legionData.type == LegionType.Neutral)
                {
                    continue;
                }

                AddHP(unit);
            }

            if (totalHP > 0)
            {
                friendHPRate = friendHP / totalHP;
            }
            else
            {
                friendHPRate = 0.5f;
            }



//			if(totalHP > 0)
//			{
//
//				//				Debug.Log("<color=green>totalHP="+totalHP+"</color>");
//				if(legionHP.ContainsKey(War.ownLegionData.legionId))
//				{
//					myHPRate =legionHP[War.ownLegionData.legionId] / totalHP;
//				}
//				else
//				{
//					myHPRate = 0F;
//
//					//					Debug.Log("<color=green>myHPRate = 0F;</color>");
//				}
//			}
//			else
//			{
//				if(legionHP.ContainsKey(War.ownLegionData.legionId))
//				{
//					myHPRate =0F;
//					//					Debug.Log("<color=green>----myHPRate = 0F;</color>");
//				}
//			}

            //			Debug.Log("<color=green>myHPRate="+myHPRate+"</color>");



            if (friendBuildCount <= 0)
            {
                War.Over(OverType.Lose);
            }
            else if (friendBuildCount >= totalBuildCount)
            {
                War.Over(OverType.Win);
            }
            else if (War.timeLimit && War.time >= War.timeMax)
            {
                if (friendBuildCount == totalBuildCount * 0.5f)
                {
                    War.Over(OverType.Draw, true);
                }
                else if (friendBuildCount <= totalBuildCount * 0.5f)
                {
                    War.Over(OverType.Lose, true);
                }
                else
                {
                    War.Over(OverType.Win, true);
                }
            }

            return;

            if (friendHPRate <= 0)
            {
                War.Over(OverType.Lose);
            }
            else if (friendHPRate >= 1)
            {
                War.Over(OverType.Win);
            }
            else if (War.timeLimit && War.time >= War.timeMax)
            {
                if (War.vsmode == VSMode.PVE_Expedition)
                {
                    War.Over(OverType.Win, true);
                }
                else
                {
                    bool  isWin     = false;
                    float buildRate = friendBuildCount * 1f / totalBuildCount;
                    if (buildRate == 0.5f)
                    {
                        isWin = friendHPRate > 0.5f;
                    }
                    else
                    {
                        isWin = buildRate > 0.5f;
                    }
                    Debug.LogFormat("buildRate={0}, friendBuildCount={1}, totalBuildCount={2}, myHPRate={3}, isWin={4}", buildRate, friendBuildCount, totalBuildCount, friendHPRate, isWin);

                    War.Over(isWin ? OverType.Win : OverType.Lose, true);
                }
            }
            else
            {
                if (War.vsmode == VSMode.PVE_Expedition)
                {
                    if (War.GetLegionData(1).expeditionTotalHP < 1 && War.GetLegionData(2).expeditionTotalHP < 1)
                    {
                        War.Over(OverType.Win);
                    }
                }
            }
        }