Esempio n. 1
0
    /// <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);
    }
Esempio n. 2
0
    /// <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);
    }