void OnHPAdd(int legionId, int casterLegionId, float addHP) { LegionData legionData = War.GetLegionData(legionId); legionData.expeditionTotalHP += addHP; // legionData.expeditionLeftHP += addHP; }
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); } } }
/** 同步英雄下阵 */ public void ExeHeroBackstag(int heroUid, int targetLegionId) { UnitCtl heroUnit = War.scene.GetUnitForUID(heroUid); LegionData targetLegionData = War.GetLegionData(targetLegionId); War.scene.KillHero(heroUnit, targetLegionData); }
/** 设置生产技能 */ 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); }
void OnBuildComplete() { if (War.vsmode != VSMode.PVE_Expedition) { gameObject.SetActive(false); } attack = War.GetLegionData(1); defense = War.GetLegionData(2); }
void OnHPConst(int legionId, int casterLegionId, float constHP) { LegionData legionData = War.GetLegionData(legionId); legionData.expeditionTotalHP -= constHP; if (legionData.expeditionTotalHP < 0) { legionData.expeditionTotalHP = 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); } } }
/** 兵营改变势力 */ 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)); }
//获取非己方人口数量最大的势力的人口 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); }
/** 改变势力 */ 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); // } }
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; } } }
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); }
public static bool IsSendService(int legionId) { LegionData legionData = War.GetLegionData(legionId); return(War.IsSendService(legionData)); }
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); } } } }