private void FillGrid(int rows, int columns)
        {
            if (ContentPanel.Children.Count == 0)
            {
                GameController.DefaultColor = App.Current.Resources["PhoneBackgroundColor"].ToString();
                GameController.Instance.Init(rows, columns);
                GameController.Instance.MaxInARow = 5;

                BlocksCollection collection = GameController.Instance.BlocksCollection;

                for (int i = 0; i < collection.Columns; i++)
                {
                    ContentPanel.ColumnDefinitions.Add(new ColumnDefinition());
                }
                for (int i = 0; i < collection.Rows; i++)
                {
                    ContentPanel.RowDefinitions.Add(new RowDefinition());
                }

                foreach (InARowGame.Lib.Block b in collection)
                {
                    BlockControl block = new BlockControl(b);
                    block.SetValue(Grid.ColumnProperty, b.X);
                    block.SetValue(Grid.RowProperty, b.Y);

                    ContentPanel.Children.Add(block);
                }
            }
        }
Exemplo n.º 2
0
        private void FillGrid(int rows, int columns)
        {
            if (ContentPanel.Children.Count == 0)
            {
                GameController.Instance.Init(rows, columns);

                BlocksCollection collection = GameController.Instance.BlocksCollection;

                for (int i = 0; i < collection.Columns; i++)
                {
                    ContentPanel.ColumnDefinitions.Add(new ColumnDefinition());
                }
                for (int i = 0; i < collection.Rows; i++)
                {
                    ContentPanel.RowDefinitions.Add(new RowDefinition());
                }

                foreach (AddOneGame.Lib.Block b in collection)
                {
                    BlockControl block = new BlockControl(b);
                    block.SetValue(Grid.ColumnProperty, b.X);
                    block.SetValue(Grid.RowProperty, b.Y);

                    this.ChangeOrientation += new ChangeOrientationDelegate(block.OnOrientationChanged);

                    ContentPanel.Children.Add(block);
                }
            }
        }
Exemplo n.º 3
0
        public IEnumerable <BlocksCollection> GetMergedBlocksFrom(Tilemap tilemap, Func <BlockData, BlockData, bool> mergeRule)
        {
            var blocks = TraverseBlocks(tilemap);
            HashSet <BlockData> visitedBlocks = new HashSet <BlockData>();
            Queue <BlockData>   blocksToVisit = new Queue <BlockData>(32);

            foreach (var startBlock in blocks)
            {
                var t = visitedBlocks;
                if (visitedBlocks.Contains(startBlock))
                {
                    continue;
                }
                var merged = new BlocksCollection();
                blocksToVisit.Clear();
                blocksToVisit.Enqueue(startBlock);
                while (blocksToVisit.Count > 0)
                {
                    var block = blocksToVisit.Dequeue();
                    if (visitedBlocks.Contains(block))
                    {
                        continue;
                    }
                    visitedBlocks.Add(block);
                    merged.Set(block);
                    GetNeighborsFrom(block, tilemap)
                    .Where(next => next != BlockData.Null)
                    .Where(next => !visitedBlocks.Contains(next))
                    .Where(next => mergeRule(block, next))
                    .ForEach(next => blocksToVisit.Enqueue(next));
                }
                yield return(merged);
            }
        }
 public BlockInstanceOptions(Block block)
 {
     positionZ        = 0;
     GenerateRenderer = true;
     GenerateCollider = true;
     IsTrigger        = false;
     Blocks           = null;
     BlockType        = block;
     Data             = null;
     IsStatic         = false;
     GameObject       = null;
 }
Exemplo n.º 5
0
 public SceneArea(BlocksCollection blocks, string name = null)
 {
     this.Blocks = blocks;
     if (name is null)
     {
         name = System.Guid.NewGuid().ToString();
     }
     Name = name;
     try
     {
         SpawnPoint = blocks.Where(block => block.BlockType is GameMap.Data.SceneData data && data.DataType == Data.SceneData.Type.SpawnPoint)
                      .First()
                      .Position;
     }
     catch
     {
         Debug.LogError($"Cannot found spawn point of scene {Name}.");
     }
 }
Exemplo n.º 6
0
        BlocksCollection MergeBlocks(BlockData startBlock, HashSet <BlockData> visitedBlocks)
        {
            var mergedBlocks = new BlocksCollection();
            Queue <BlockData> blocksToVisit = new Queue <BlockData>(32);

            blocksToVisit.Enqueue(startBlock);
            while (blocksToVisit.Count > 0)
            {
                var x     = blocksToVisit.Reverse().Take(100).ToArray();
                var block = blocksToVisit.Dequeue();
                if (visitedBlocks.Contains(block))
                {
                    continue;
                }
                visitedBlocks.Add(block);
                mergedBlocks.Set(block);
                GetNeighbors(block)
                .Where(next => next != BlockData.Null)
                .Where(next => !visitedBlocks.Contains(next))
                .Where(next => next.BlockType == block.BlockType)
                .ForEach(next => blocksToVisit.Enqueue(next));
            }
            return(mergedBlocks);
        }
 public UserBlockComponent(BlocksCollection blocks, int count, SceneArea scene) : base(blocks)
 {
     this.Count = count;
     this.Scene = scene;
 }
Exemplo n.º 8
0
 bool InSameScene(BlocksCollection a, BlocksCollection b)
 => GetSceneOfBlocks(a) == GetSceneOfBlocks(b);
Exemplo n.º 9
0
 SceneArea GetSceneOfBlocks(BlocksCollection blocks)
 => Scenes.Where(scene =>
                 scene.Blocks.Has(blocks.First().Position))
 .FirstOrDefault();