示例#1
0
    /// <summary>
    /// 对星球增加建筑
    /// </summary>
    /// <param name="_starID"></param>
    /// <param name="_buildingTime"></param>
    public void addBuildingToStar(uint dbid, int _starID, int _buildingType, int finishPercentage)
    {
        //LoggerHelper.Error("dbid:" + dbid);
        UnitStar _star = GetUnitStarById(_starID);

        if (_star.BelongTo != null && _star.BelongTo.ID != dbid)
        {
            LoggerHelper.Error("星球和建筑主人不对");
            return;
        }

        //是否是升级建筑
        int _index = _star.IsLevelUpBuilding(_buildingType);

        if (_index >= 0)
        {
            _star.RemoveBuilding(_index, _star.GetBuildingByIndex(_index));
        }
        else
        {//新建建筑
            _index = _star.GetAddBuildingIndex();
            if (_index >= 0)
            {
                _star.AddBuildingLog(_buildingType);
            }
        }

        if (_index < 0)
        {
            return;
        }
        UnitBuilding _building = GetUnitBuildingFromPool();
        Vector2      _pos      = _star.GetAddBuildingPos(_index);

        if (_index >= 0)
        {
            _building.UnitId           = _star.UnitId * 100 + _index;
            _building.BaseBuildingData = BuildingData.dataMap.Get(_buildingType);
            _building.PositionX        = _pos.x;
            _building.PositionY        = _pos.y;
            _building.UnitParent       = BuildLayer;
            _building.InitPercentage   = finishPercentage;
            _building.BelongToStar     = _star;
            _building.AttackPlayerId   = dbid;
            _building.InitUnit();
            _building.SetGroup(GetGroupByPalyerId(dbid));//设置阵营信息
            _star.AddBuilding(_index, _building);

            if (_starID == CurStarID)//根据当前准备建设的建筑来刷新战斗UI
            {
                UIManager.I.GetUILogic <StarInfoUIMgr>().ShowBuildings(true);
            }
        }

        m_starDataManager.StarOrEndStartFighting(_star);
    }
示例#2
0
    /// <summary>
    /// 攻击 建筑
    /// </summary>
    /// <param name="_starID"></param>
    /// <param name="_buildingTime"></param>
    public void AttackBuilding(uint _attackplayerId, int _starID, int buildingPosition, int _Energy)
    {
        UnitStar     _star     = GetUnitStarById(_starID);
        UnitBuilding _building = _star.GetBuildingByIndex(buildingPosition);

        //LoggerHelper.Error("_building.BelongToStar.BelongTo.ID:" + _building.BelongToStar.BelongTo.ID + "_Energy:" + _Energy);

        if (_building != null)
        {
            //被攻击建筑所属
            if ((_building.BelongToStar != null) && (_building.BelongToStar.BelongTo != null) && (_building.BelongToStar.BelongTo.ID == _attackplayerId))
            {
                return;
            }

            _building.ReduceBuildingEnergy(_Energy);
            ShowFloatText(string.Concat(-_Energy), _building.PositionX, _building.PositionY, _building.BaseBuildingData.float_color);

            if (_building.CurEnergy <= 0)
            {
                _building.OnDead();
            }
            else
            {
                _building.OnHit();
            }
        }
        else
        {
            //LoggerHelper.Debug("没有该类建筑");
            return;
        }

        //LoggerHelper.Error("_attackplayerId:" + _attackplayerId + "_building.CurEnergy:" + _building.CurEnergy);
        if (_building.CurEnergy <= 0)
        {
            //LoggerHelper.Error("_building.CurEnergy:" + _building.CurEnergy);
            _star.RemoveBuilding(buildingPosition, _building);
            //拆一个建筑后就可以占领星球

            /*if (!AttackStar.Contains(_star))
             * {
             *  if (_star.IsInAttackStar())
             *  {
             *      AttackStar.Add(_star);
             *  }
             * }*/
            IsAttackStar(_star);
        }

        _star.showAttackBuildingEffect(_building.UnitGO.transform.localPosition);
    }