Example #1
0
 public void AddBuilding(int _key, UnitBuilding _building)
 {
     BuildingDic[_key] = _building;
     _building.Key     = _key;
     _building.ShowUnit(m_isExploxe);
     AttackBuildingPriorityList.Add(_building.BaseBuildingData.attack_priority, _building);
 }
Example #2
0
    private void ClearInnerData()
    {
        unitClicked   = 0;
        unitClicked_2 = 0;
        bonusClicked  = 0;
        bonusFocus    = false;
        currBuildNum  = -1;

        currBuild = null;
        for (int i = 0; i < squadElements.Count; ++i)
        {
            Destroy(squadElements[i].gameObject);
        }
        for (int i = 0; i < squadElements_2.Count; ++i)
        {
            Destroy(squadElements_2[i].gameObject);
        }
        for (int i = 0; i < squadElements_3.Count; ++i)
        {
            Destroy(squadElements_3[i].gameObject);
        }
        squadElements.Clear();
        squadElements_2.Clear();
        squadElements_3.Clear();
        avialableBounses.Clear();

        updateTime = 0.0f;
        sessionOn  = false;
    }
Example #3
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);
    }
Example #4
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);
    }
Example #5
0
    public void RemoveBuilding(int _key, UnitBuilding _building)
    {
        SoundManager.PlaySound("021_TreeDeath_01.ogg");
        _building.ClearUnit();
        _building.UnitGO.transform.localScale = new Vector3(0.1f, 0.1f, 1);
        BuildingDic.Remove(_key);

        int _index = AttackBuildingPriorityList.IndexOfValue(_building);

        if (_index >= 0)
        {
            AttackBuildingPriorityList.RemoveAt(_index);
        }
    }
Example #6
0
    /// <summary>
    /// 从对象池取 建筑
    /// </summary>
    /// <returns></returns>
    private UnitBuilding GetUnitBuildingFromPool()
    {
        foreach (UnitBuilding _building in m_BuildingList)
        {
            if (_building.UnitId == -1)
            {
                return(_building);
            }
        }

        UnitBuilding _newbuilding = new UnitBuilding();

        m_BuildingList.Add(_newbuilding);
        return(_newbuilding);
    }
    private void DrawLineManager(UnitBuilding building)
    {
        var lines = FindObjectsOfType <Line>();

        foreach (var line in lines)
        {
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("-"))
            {
                building.DeleteFromLine(line);
            }
            GUILayout.Label(building.CountOnLine(line).ToString());
            if (GUILayout.Button("+"))
            {
                building.AddToLine(line);
            }
            GUILayout.EndHorizontal();
        }
    }
Example #8
0
    /// <summary>
    /// Populates dwellings with a dwellings unitsPerWeek
    /// </summary>
    public void PopulateDwellings()
    {
        // Populates overworld dwellings
        foreach (DwellingBuilding building in DwellingsOwned)
        {
            building.UnitsPresent += building.UnitsPerWeek;
        }

        // populates town dwellings
        foreach (Castle c in Castle)
        {
            for (int i = 0; i < c.Town.Buildings.Length; i++)
            {
                if (c.Town.Buildings[i].Built && c.Town.Buildings[i].GetType().BaseType == typeof(UnitBuilding))
                {
                    UnitBuilding unitBuilding = (UnitBuilding)c.Town.Buildings[i];
                    unitBuilding.AdjustPresentUnits(unitBuilding.UnitsPerWeek);
                }
            }
        }
    }
Example #9
0
    // ОБРАБОТКА ДЕЙСТВИЙ С ОТРЯДАМИ ЮНИТОВ

    public void CreateNewBattleUnit(string unitName, int numToProd, int buildNum, ref UnitBuilding build) // Имя боевого юнита, ссылка на здание
    {
        // Подыскиваем подходящий BattleUnit SO
        BattleUnit BU = ResourceController.instance.allBattleUnits.Find(x => x.getUnitName == unitName);

        // Имя подразделения придумываем сами (!!!)
        string specName = ResourceController.instance.GetEteSquadName(unitName);

        RealBattleUnit RBU = new RealBattleUnit(specName); // Здесь в качестве ссылки должно даваться уникальное имя подразделения (!!! не unitName !!!)

        RBU.bu        = BU;
        RBU.buildNum  = build.buildNum;
        RBU.curAmount = 0;
        RBU.curStatus = ResourceController.SquadStatus.onReqruit;

        build.AddNewBattleUnit(RBU);
        ResourceController.instance.AddNewArmy(RBU);

        // Запускаем в производство это подразделение
        CreateNewSquadTask(specName, Mathf.Min(RBU.bu.getUnitAmount, numToProd), RBU.bu.getUnitRecruitTime, buildNum);
    }
Example #10
0
    public void makeUnit()
    {
        building = factory.makeUnitBuilding();

        building.produce();
    }
Example #11
0
 // Temporary function
 public void SetCurrentBuilding(int buildNum)
 {
     currBuild    = ResourceController.instance.currentUnitBuildings.Find(x => x.buildNum == buildNum);
     currBuildNum = buildNum;
 }
Example #12
0
    //public void UpdateStatic(UnitBuilding UB)
    public void UpdateStatic(int buildNum)
    {
        ClearInnerData();

        currBuild    = ResourceController.instance.currentUnitBuildings.Find(x => x.buildNum == buildNum);
        currBuildNum = buildNum;
        // currBuild = UB; // Вообще-то, тут еще надо предусмотреть возможность затирания массивов картинок
        // Debug.Log("currBuild.buildingUnits.Count " + currBuild.buildingUnits.Count.ToString());
        for (int i = 0; i < currBuild.buildingUnits.Count; ++i)
        {
            UnitImage img = Instantiate(unitImagePref);
            img.gameObject.SetActive(true);
            img.transform.SetParent(uipParent, false);
            img.SetNumber(i);
            img.SetSprite(currBuild.buildingUnits[i].bu.getUnitSprite); // Вроде так
            img.SetSquadData(currBuild.buildingUnits[i].specialName);
            img.SetQuantityData(currBuild.buildingUnits[i].curAmount);
            img.SetStatus(currBuild.buildingUnits[i].curStatus);
            squadElements.Add(img);
        }
        for (int i = currBuild.buildingUnits.Count; i < currBuild.numSlots; ++i)
        {
            UnitImage img = Instantiate(unitImagePref);
            img.gameObject.SetActive(true);
            img.transform.SetParent(uipParent, false);
            img.SetNumber(i);
            img.SetSprite(emptyUnitSprite); // Вроде так
            squadElements.Add(img);
        }

        for (int i = 0; i < currBuild.iconsOfActualUnits.Count; ++i)
        {
            UnitImage_2 img = Instantiate(unitImagePref_2);
            img.gameObject.SetActive(true);
            img.transform.SetParent(uipParent_2, false);
            img.SetNumber(i);
            img.SetSprite(currBuild.iconsOfActualUnits[i]);
            squadElements_2.Add(img);
        }

        for (int i = 0; i < currBuild.iconsOfActualBonus.Count; ++i)
        {
            UnitImage_3 img = Instantiate(unitImagePref_3);
            img.gameObject.SetActive(true);
            img.transform.SetParent(uipParent_3, false);
            img.SetBonusData(currBuild.namesOfActualBonuses[i], i, currBuild.iconsOfActualBonus[i]);
            img.AvailableIcon(true);
            squadElements_3.Add(img);
        }

        BonusOfUnitUpdate();

        /*
         * for (int i = 0; i < currBuild.namesOfActualBonuses.Count; ++i)
         * {
         *  Image img = Instantiate(bonusImagePref);
         *  img.transform.parent = bipParent;
         * }
         */

        if (!sessionOn)
        {
            squadElements[0].SelectedState(true);
        }
        sessionOn = true;
    }
Example #13
0
    private void DrawLineManager(UnitBuilding building)
    {
        var lines = FindObjectsOfType<Line>();

        foreach (var line in lines)
        {

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("-"))
            {
                building.DeleteFromLine(line);
            }
            GUILayout.Label(building.CountOnLine(line).ToString());
            if (GUILayout.Button("+"))
            {
                building.AddToLine(line);
            }
            GUILayout.EndHorizontal();
        }
    }
        public override void Update(GameTime gameTime)
        {
            if (WaveManager.GetState() == WaveFSM.PickEnemyState.self && WaveManager.CurrentWave > 4 &&
                WaveManager.ActiveTeam != Parent.ParentController.ParentShip.GetTeam())
            {
                AiState s = Parent.GetExistingState(typeof(PickAttackerState));
                Parent.SetState(s == null ? new PickAttackerState() : s);
            }
            else
            {
                if (TargetObject == null && TargetCard == null)
                {
                    bool Damaged = false;
                    foreach (UnitBasic u in FactionManager.SortedUnits[Parent.ParentController.ParentShip.GetTeam()])
                    {
                        if (u.GetType().IsSubclassOf(typeof(MiningPlatform)))
                        {
                            if (u.HullDamage > 0)
                            {
                                Damaged = true;
                                break;
                            }
                        }
                    }

                    if (FactionManager.CanBuildMiningPlatform(Parent.ParentController.ParentShip.FactionNumber) &&
                        (WaveManager.ActiveTeam != Parent.ParentController.ParentShip.GetTeam() || FactionManager.NeutralUnitCount < 3 ||
                         (FactionManager.Factions[Parent.ParentController.ParentShip.FactionNumber].MiningPlatformCount < 2 &&
                          Damaged)))
                    {
                        float BestStrength = 100000;

                        foreach (MineralRock m in Parent.ParentController.ParentShip.ParentScene.Enumerate(typeof(MineralRock)))
                        {
                            if (m.miningPlatform == null)
                            {
                                float MineralRockStrength = 0;

                                foreach (MiningPlatform f in
                                         Parent.ParentController.ParentShip.ParentScene.Enumerate(typeof(MiningPlatform)))
                                {
                                    if (f.IsAlly(Parent.ParentController.ParentShip))
                                    {
                                        MineralRockStrength += Vector2.Distance(m.Position.get(), f.Position.get()) / 1000;
                                    }
                                }

                                foreach (UnitTurret f in
                                         Parent.ParentController.ParentShip.ParentScene.Enumerate(typeof(UnitTurret)))
                                {
                                    if (f.IsAlly(Parent.ParentController.ParentShip))
                                    {
                                        MineralRockStrength += Vector2.Distance(m.Position.get(), f.Position.get()) / 2000;
                                    }
                                }

                                if (MineralRockStrength < BestStrength)
                                {
                                    BestStrength = MineralRockStrength;
                                    TargetObject = m;
                                }
                            }
                        }
                    }
                    else if (WaveManager.ActiveTeam == Parent.ParentController.ParentShip.GetTeam() &&
                             PathFindingManager.CellJobQue.Count == 0 && WaveManager.CurrentWave > 1)
                    {
                        Faction f = FactionManager.Factions[Parent.ParentController.ParentShip.FactionNumber];

                        TurretCard BestCard     = null;
                        float      BestStrength = 0;

                        foreach (TurretCard c in f.Cards)
                        {
                            float s = c.GetPlaceStrength(f.FactionNumber);
                            if (s > BestStrength)
                            {
                                BestStrength = s;
                                BestCard     = c;
                            }
                        }

                        if (BestCard != null && (!BestCard.FactionCostIncreases.ContainsKey(f.FactionNumber) ? f.Cells >= BestCard.CardCellsCost :
                                                 f.Cells >= BestCard.CardCellsCost + BestCard.CardCellsCostIncrease * BestCard.FactionCostIncreases[f.FactionNumber]))
                        {
                            TargetCard         = BestCard;
                            TargetCardPosition = BestCard.GetPlacePosition(f.FactionNumber);
                        }
                    }
                }
                else
                {
                    if (TargetObject != null)
                    {
                        if (TargetObject.GetType().Equals(typeof(MineralRock)))
                        {
                            MineralRock m = (MineralRock)TargetObject;
                            if (m.miningPlatform != null)
                            {
                                TargetObject = null;
                            }
                        }
                        else if (TargetObject.GetType().IsSubclassOf(typeof(UnitBuilding)))
                        {
                            UnitBuilding b = (UnitBuilding)TargetObject;
                            if (b.IsUpdgraded)
                            {
                                TargetObject = null;
                            }
                        }
                    }
                    else if (Vector2.Distance(TargetCardPosition, Parent.ParentController.ParentShip.FloatingViewPosition) < 4)
                    {
                        PlayerShip ParentShip = Parent.ParentController.ParentShip;
                        int        CardCost   = TargetCard.CardCellsCost;

                        if (TargetCard.FactionCostIncreases.ContainsKey(ParentShip.FactionNumber))
                        {
                            CardCost += TargetCard.CardCellsCostIncrease *
                                        TargetCard.FactionCostIncreases[ParentShip.FactionNumber];
                        }

                        if (TargetCard.FactionCostIncreases.ContainsKey(ParentShip.FactionNumber))
                        {
                            TargetCard.FactionCostIncreases[ParentShip.FactionNumber]++;
                        }
                        else
                        {
                            TargetCard.FactionCostIncreases.Add(ParentShip.FactionNumber, 1);
                        }

                        FactionManager.AddCells(ParentShip.FactionNumber, -CardCost);
                        UnitTurret u = (UnitTurret)TargetCard.GetUnit(ParentShip.FactionNumber);
                        u.MyCard = TargetCard;
                        ParentShip.PlaceTurret(u);

                        TargetCard = null;
                    }
                }
            }
            if (WaveFSM.WaveStepState.WeaponsFree && !Parent.ParentController.ParentShip.Dead &&
                TargetObject == null && TargetCard == null)
            {
                if (WaveManager.ActiveTeam != Parent.ParentController.ParentShip.GetTeam())
                {
                    AiState s = Parent.GetExistingState(typeof(AttackState));
                    Parent.SetState(s == null ? new AttackState() : s);
                }
                else
                {
                    AiState s = Parent.GetExistingState(typeof(DefendState));
                    Parent.SetState(s == null ? new DefendState() : s);
                }
            }

            base.Update(gameTime);
        }