private void OnAddSoldier() { if (bShow == false) { return; } UnitStar curStar = MogoWorld.m_dataMapManager.GetUnitStarById(MogoWorld.m_dataMapManager.CurStarID); UnitSoldier soldier; MogoUIBtn btn; UILabel numTxt; foreach (SoldierData data in SoldierData.dataMap.Values) { soldier = curStar.GetSoldierById(MogoWorld.thePlayer.ID, data.id); if (soldier != null) { int num = soldier.GetSoldierNum(); if (num > 0) { btn = GetSoldierBtn(data.id); numTxt = btn.transform.FindChild("NumText").gameObject.GetComponent <UILabel>(); numTxt.text = ((int)(num * (1 - StarInfoController.getInstance().soldierNumPercent))).ToString(); } } } }
public void SetStatus() { UnitStar star = MogoWorld.m_dataMapManager.GetUnitStarById(MogoWorld.m_dataMapManager.CurStarID); UnitSoldier soldier; UILabel numTxt; MogoUIBtn soldierBtn; foreach (SoldierData data in SoldierData.dataMap.Values) { soldier = star.GetSoldierById(MogoWorld.thePlayer.ID, data.id); soldierBtn = GetSoldierBtn(data.id); numTxt = soldierBtn.transform.FindChild("NumText").gameObject.GetComponent <UILabel>(); if (soldier != null)//当前有这种士兵 { soldierBtn.IsEnabled = true; SetSelectSign(soldierBtn, true); StarInfoController.getInstance().FightSoldierIdList.Add(data.id); numTxt.text = ((int)(soldier.GetSoldierNum() * (1 - StarInfoController.getInstance().soldierNumPercent))).ToString(); } else { soldierBtn.IsEnabled = false; SetSelectSign(soldierBtn, false); numTxt.text = ""; } } }
/// <summary> /// 对星球增加士兵 /// </summary> /// <param name="_starID"></param> /// <param name="_buildingTime"></param> public void addSoldierToStar(uint _playerId, int _starID, int _soldierType, int _Energy, int _isSelfProduce, bool _isMoveAnimation = true) { UnitStar _star = GetUnitStarById(_starID); UnitSoldier _Soldier = _star.GetSoldierById(_playerId, _soldierType); if (_star.BelongTo != null && _star.BelongTo.ID == MogoWorld.thePlayer.ID && _starID == CurStarID) { EventDispatcher.TriggerEvent(Events.StarUIEvent.AddSoldierEvent);//发送我方当前星球添加兵力的消息 } if (_Soldier != null) { _Soldier.AddSoldier(_Energy, _isSelfProduce); _star.CulAllSoldierAttack(); if (_isMoveAnimation && (_Soldier.GetGatherSoldierNum() > 0)) { m_starDataManager.StarTogether(_star); } m_starDataManager.StarOrEndStartFighting(_star); return; } _Soldier = GetUnitSoldierFromPool(); SoldierIndex++; _Soldier.UnitId = SoldierIndex; _Soldier.BelongTo = MogoWorld.GetEntityById(_playerId); _Soldier.BaseSoldierData = SoldierData.dataMap.Get(_soldierType); Vector2 _pos = _star.GetSoliderPositionById(_soldierType); //LoggerHelper.Error("_pos.x:" + _pos.x + "_pos.y:" + _pos.y); _Soldier.PositionX = _pos.x; _Soldier.PositionY = _pos.y; _Soldier.UnitParent = SoldierLyaer; _Soldier.AddSoldier(_Energy, _isSelfProduce); _Soldier.BelongToStar = _star; _Soldier.IsMoveAnimation = _isMoveAnimation; _Soldier.InitUnit(); _Soldier.SetGroup(GetGroupByPalyerId(_playerId));//设置阵营信息 _star.AddSoldier(_playerId, _soldierType, _Soldier); _star.CulAllSoldierAttack(); m_starDataManager.StarOrEndStartFighting(_star); if (_isMoveAnimation && (_Soldier.GetGatherSoldierNum() > 0)) { m_starDataManager.StarTogether(_star); //_Soldier.CallBack = SoldierCallback; } IsAttackStar(_star); }
public void SetAggregateSoldier() { UnitStar star = MogoWorld.m_dataMapManager.GetUnitStarById(MogoWorld.m_dataMapManager.CurStarID); UnitSoldier soldier; StarInfoController.getInstance().FightSoldierIdList.Clear(); foreach (SoldierData data in SoldierData.dataMap.Values) { soldier = star.GetSoldierById(MogoWorld.thePlayer.ID, data.id); if (soldier != null)//当前有这种士兵 { StarInfoController.getInstance().FightSoldierIdList.Add(data.id); } } }
/// <summary> /// 获取星球可出战士兵id /// </summary> /// <param name="star"></param> /// <returns></returns> public List <int> GetStarFightSoliderIdList(UnitStar star) { List <int> fightSoldierIdList = new List <int>(); UnitSoldier soldier; foreach (SoldierData data in SoldierData.dataMap.Values) { soldier = star.GetSoldierById(MogoWorld.thePlayer.ID, data.id); if (soldier != null)//当前有这种士兵 { fightSoldierIdList.Add(data.id); } } return(fightSoldierIdList); }
/// <param name="playerId">玩家id</param> /// <param name="startStarId">出发星球</param> /// <param name="endStarId">目标星球</param> /// <param name="isSelfProduce">1表示只出战自产兵,0表示全部出战</param> /// <param name="soldierTypeList">出战兵种id列表</param> /// <param name="percent">出战兵种数量百分比,0表示只出战一个</param> public void SendSoldier(LuaTable lt) { uint _playerId = Convert.ToUInt32(lt["0"]); UnitStar _StartStar = GetUnitStarById(Convert.ToInt32(lt["1"])); UnitStar _endStar = GetUnitStarById(Convert.ToInt32(lt["2"])); int isSelfProduce = Convert.ToInt32(lt["3"]); LuaTable soldierTypeluatable = lt["4"] as LuaTable; float percent = (float)Convert.ToDouble(lt["5"]); int _soldierType = 0; UnitSoldier _soldier; MapUtil.RoutePlanResult _result = MapUtil.Plan(_StartStar, _endStar); for (int i = 0; i < soldierTypeluatable.Count; i++) { _soldierType = Convert.ToInt32(soldierTypeluatable[i.ToString()]); _soldier = _StartStar.GetSoldierById(_playerId, _soldierType); if (_soldier == null) { continue; } if (isSelfProduce == 1 && _soldier.SelfProduceEnergy <= 0) { continue; } _soldier = _StartStar.RemoveSoldier(_playerId, _soldierType); int _moveOrdinaryEnergy; int _OrdinaryEnergy = _soldier.CurEnergy - _soldier.SelfProduceEnergy; if (isSelfProduce == 0)//移动全部士兵 { _moveOrdinaryEnergy = (int)(_OrdinaryEnergy * percent); } else {//移动自产士兵 _moveOrdinaryEnergy = 0; } int _moveSelfProduceEnergy = (int)(_soldier.SelfProduceEnergy * percent); /*if (_soldier.BaseSoldierData.id == 1) * { * LoggerHelper.Error("_moveSelfProduceEnergy:" + _moveSelfProduceEnergy + " percent:" + percent + " _soldier.SelfProduceEnergy:" + _soldier.SelfProduceEnergy); * }*/ int _leftOrinaryEnergy = _OrdinaryEnergy - _moveOrdinaryEnergy; int _leftSelfProduceEnergy = _soldier.SelfProduceEnergy - _moveSelfProduceEnergy; _soldier.RemoveSoldier(_leftOrinaryEnergy, false); _soldier.RemoveSoldier(_leftSelfProduceEnergy); if (_leftOrinaryEnergy > 0) { addSoldierToStar(_playerId, _StartStar.UnitId, _soldierType, _leftOrinaryEnergy, 0, false); } if (_leftSelfProduceEnergy > 0) { addSoldierToStar(_playerId, _StartStar.UnitId, _soldierType, _leftSelfProduceEnergy, 1, false); } if (_soldier != null) { _soldier.MovePath = _result; MoveSoldierList.Add(_soldier); } } }
/// <summary> /// 攻击士兵 /// </summary> /// <param name="_starID"></param> /// <param name="_buildingTime"></param> public void AttackSoldier(uint _playerId, int _starID, int _soldierType, int _Energy, int _type) { /*LoggerHelper.Error("_playerId:" + _playerId + "_starID:" + _starID + * "_soldierType:" + _soldierType + "_Energy:" + _Energy );*/ if (_Energy < 0) { _Energy = 0; } UnitStar _star = GetUnitStarById(_starID); UnitSoldier _Soldier = _star.GetSoldierById(_playerId, _soldierType); if (_Soldier != null) { _Soldier.RemoveSoldier(_Energy); //LoggerHelper.Error(_Soldier.BaseSoldierData.energy + " CurEnergy:" + _Soldier.CurEnergy); if (_star.IsExplore && (_Energy >= _Soldier.BaseSoldierData.energy)) { ShowFloatText(string.Concat(-(_Energy / _Soldier.BaseSoldierData.energy)), _Soldier.PositionX, _Soldier.PositionY, _Soldier.BaseSoldierData.float_color); } //LoggerHelper.Error("_playerId:" + _playerId + " _Energy" + (_Energy / _Soldier.BaseSoldierData.energy)); } else { //LoggerHelper.Debug("没有该类士兵"); return; } switch (_type) { //0建筑 1hit 2侵入 case 0: _Soldier.OnIntrusion(_Energy); break; case 1: if (_Soldier.CurEnergy <= 0) { _Soldier.OnDead(); _star.showAttackSoldierEffect(_playerId, _Soldier.UnitGO.transform.localPosition); } else { _Soldier.OnHit(); _star.showAttackSoldierEffect(_playerId, _Soldier.UnitGO.transform.localPosition); } break; case 2: _Soldier.OnIntrusion(_Energy); break; } //type 类型士兵全军覆没 if (_Soldier.CurEnergy <= 0) { _star.RemoveSoldier(_playerId, _soldierType); _Soldier.ClearUnit(); IsAttackStar(_star); } _star.CulAllSoldierAttack(); m_starDataManager.StarOrEndStartFighting(_star); }