public override void Update() { GetNodes(); List <Name> clickedGemsNames = new List <Name>(); List <GemNode> clickedGems = new List <GemNode>(); int gemsCount = 0; clickedGemsNames = engine.LastClicked.FindAll(n => n.BaseName == BaseNames.Gem); if (clickedGemsNames.Count == 2) { gemsCount = 2; clickedGems = new List <GemNode>(gemsCount); engine.LastClicked.Clear(); } bool gemSpawned = false; foreach (GemNode target in gemNodes) { Vector2f position = new Vector2f(target.Position.X, target.Position.Y); if (gemsCount > 0 && clickedGemsNames.Contains(target.Entity.Name)) { clickedGems.Add(target); gemsCount--; } if (target.Entity.Name.BaseName == BaseNames.Gem) { gemSpawned = true; var id = target.Entity.Name.Id - 1; Vector2i gridPlace = GetGridPlace(id); if (initCoords) { coordGrid[gridPlace.X * Settings.GameSize + gridPlace.Y] = position; var gem = (Shape)target.Display.DisplayObject; gem.Position = new Vector2f(target.Position.X, target.Position.Y); } gemGrid[gridPlace.X, gridPlace.Y] = target.Gem.GemType; } if (target.Entity.Name.BaseName == BaseNames.Destroyer) { var destroyer = (RectangleShape)target.Display.DisplayObject; Name name = target.Entity.Name; DestroyerDirection direction = destroyerGrid[target.Entity.Name].Direction; for (int i = 0; i < fieldGrid.Count; i++) { var field = fieldGrid[i]; var gridPlace = GetGridPlace(idGrid[i]); if (field.Contains(destroyer.GetGlobalBounds().Left + destroyer.Size.X, destroyer.GetGlobalBounds().Top + destroyer.Size.Y) ) { if (!(destroyerGrid[name].CurrentField == field)) { destroyerGrid[name].CurrentField = field; destroyerGrid[name].FieldPosition = gridPlace; needDelete.Add(idGrid[i]); CheckBonuses(new List <int> { idGrid[i] }, new List <int> { idGrid[i] }); } break; } } var fieldPosition = destroyerGrid[name].FieldPosition; if (direction == DestroyerDirection.Left && fieldPosition.Y <= 0 || direction == DestroyerDirection.Right && fieldPosition.Y >= Settings.GameSize - 1 || direction == DestroyerDirection.Up && fieldPosition.X <= 0 || direction == DestroyerDirection.Down && fieldPosition.X >= Settings.GameSize - 1 ) { engine.RemoveList.Add(target.Entity.Name); destroyerGrid.Remove(target.Entity.Name); break; } } } if (initCoords && gemSpawned) { initCoords = false; } else if (engine.GameState == GameState.NewGame) { PlayMatch(clickedGems, clickedGemsNames); } }
public DestroyerInfo(DestroyerDirection direction) { CurrentField = new FloatRect(); FieldPosition = new Vector2i(0, 0); Direction = direction; }