public void CreateRandomMap(bool noBlock) { Calls = new List <Map_Cell>(); MapCanvas.Children.Clear(); _players = new List <Player>(); _deadPlayers = new List <Player>(); _killsDeath = new List <Point>(); _gameObjectInCall = new List <Game_Object_In_Call>(); for (int i = 0; i < Width / 50; i++) { for (int j = 0; j < Height / 50; j++) { Map_Cell map_Call = new Map_Cell() { IndexLeft = i, IndexTop = j }; ///Это для размещения блока стены(не пробиваймые блоки) if (i % 2 != 0 && j % 2 != 0) { if (!noBlock) { Unit unit = new Unit() { PositionX = i, PositionY = j }; UC_Block uc_Block = new UC_Block() { Width = 50, Height = 50 }; Canvas.SetLeft(uc_Block, i * 50); Canvas.SetTop(uc_Block, j * 50); ///Непроходимый блок Game_Object_In_Call block = new Game_Object_In_Call() { EnumCallType = EnumCallType.Block, View = uc_Block }; unit.GameObject = block; map_Call.Block = true; ///В этой ячейке находится непроходимый блок map_Call.IUnits.Add(unit); ///И его же добавим в масив всех объектов GameObjectInCall.Add(block); ///Отображение MapCanvas.Children.Add(block.View); } } Calls.Add(map_Call); } } }
public void CreateObjectUnitInCall(Map_Cell item, Unit unit) { unit.CurrentMap = this; ///И его же добавим в масив всех объектов GameObjectInCall.Add(unit.GameObject); ///Добавляем в список всех юнитов item.IUnits.Add(unit); item.Used = true; ///Отображение MapCanvas.Children.Add(unit.GameObject.View); }
void _respaumTimer_Tick(object sender, object e) { List <Map_Cell> calls = CurrentMap.Calls.Where(p => !p.Used && !p.Using && !p.Block).ToList(); _respaumTimer.Completed -= _respaumTimer_Tick; _respaumTimer = null; if (calls.Count != 0) { Dead = false; CurrentMap.DeadPlayers.Remove(this); Health = MaxHealth; Mana = MaxMana; StartRegenerationTimer(); Random rand = new Random((int)DateTime.Now.Ticks); Map_Cell respaumCall = calls[rand.Next(0, calls.Count - 1)]; this.PositionX = respaumCall.IndexLeft; this.PositionY = respaumCall.IndexTop; CurrentMap.CreateObject(this, respaumCall.IndexLeft, respaumCall.IndexTop); ///Отображение CurrentMap.MapCanvas.Children.Add(this.GameObject.View); Invulnerability = true; ///Таймер временной неуязвимости после спаума _inviInvulnerabilityTimer = new Storyboard() { Duration = TimeSpan.FromSeconds(StaticVaribl.InvulnerabilityTime) }; _inviInvulnerabilityTimer.Completed += _inviInvulnerabilityTimer_Tick; if (!Paused) { _inviInvulnerabilityTimer.Begin(); } } else { ///Если на карте не было места где можно воскреснуть ///Таймер воскрешения _respaumTimer = new Storyboard() { Duration = TimeSpan.FromSeconds(RespaumTime) }; _respaumTimer.Completed += _respaumTimer_Tick; _respaumTimer.Begin(); } UpdateView(); }
public bool DropItem(ItemClass item) { ///Ячейка куда будет дропнут итем Map_Cell dropCall = null; ///Выбираем ячейку куда дропнуть итем List <Point> poin = UnitGenerator.RoundNumber(this.PositionX, this.PositionY); for (int i = 0; i < poin.Count; i++) { if (CurrentMap.Calls.Any(p => p.IndexLeft == poin[i].X && p.IndexTop == poin[i].Y)) { Map_Cell call = CurrentMap.Calls.Single(p => p.IndexLeft == poin[i].X && p.IndexTop == poin[i].Y); ///Проверим или можно в колонку кинуть итем if (!call.Used && !call.Using && !call.Block && call.Item.Count == 0) { dropCall = call; break; } } } if (dropCall != null) { RemoveItem(item, false); dropCall.Item.Add(item); item.PositionX = dropCall.IndexLeft; item.PositionY = dropCall.IndexTop; item.View.Width = 50; item.View.Height = 50; item.ItemPosition(); item.View.ApplayMargin(new Thickness(8)); CurrentMap.MapCanvas.Children.Add(item.View); return(true); } else { return(false); } }
public void CreatePlayer(Player player) { Players.Add(player); Canvas.SetZIndex(player.GameObject.View, 1000); ///Если один игрок ///Левый верхний угол спаума if (Players.Count == 1) { CreateObject(player, 0, 0); } else if (Players.Count == 2) { player.PositionX = Calls.Last().IndexLeft; player.PositionY = Calls.Last().IndexTop; CreateObject(player, Calls.Last().IndexLeft, Calls.Last().IndexTop); //player.PositionX = Calls[2].IndexLeft; //player.PositionY = Calls[2].IndexTop; //CreateObject(player, Calls[2].IndexLeft, Calls[2].IndexTop); } else if (Players.Count == 3) { Map_Cell call = Calls[208]; player.PositionX = call.IndexLeft; player.PositionY = call.IndexTop; CreateObject(player, call.IndexLeft, call.IndexTop); } else if (Players.Count == 4) { Map_Cell call = Calls[12]; player.PositionX = call.IndexLeft; player.PositionY = call.IndexTop; CreateObject(player, call.IndexLeft, call.IndexTop); } #region Добавление игрока ///И его же добавим в масив всех объектов GameObjectInCall.Add(player.GameObject); ///Отображение MapCanvas.Children.Add(player.GameObject.View); #endregion }