Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
 public DestroyerInfo(DestroyerDirection direction)
 {
     CurrentField  = new FloatRect();
     FieldPosition = new Vector2i(0, 0);
     Direction     = direction;
 }