public void AddBuilding(int _key, UnitBuilding _building) { BuildingDic[_key] = _building; _building.Key = _key; _building.ShowUnit(m_isExploxe); AttackBuildingPriorityList.Add(_building.BaseBuildingData.attack_priority, _building); }
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; }
/// <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); }
/// <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); }
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); } }
/// <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(); } }
/// <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); } } } }
// ОБРАБОТКА ДЕЙСТВИЙ С ОТРЯДАМИ ЮНИТОВ 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); }
public void makeUnit() { building = factory.makeUnitBuilding(); building.produce(); }
// Temporary function public void SetCurrentBuilding(int buildNum) { currBuild = ResourceController.instance.currentUnitBuildings.Find(x => x.buildNum == buildNum); currBuildNum = buildNum; }
//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; }
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); }