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); } } }
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); } } }
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; }
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}."); } }
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; }
bool InSameScene(BlocksCollection a, BlocksCollection b) => GetSceneOfBlocks(a) == GetSceneOfBlocks(b);
SceneArea GetSceneOfBlocks(BlocksCollection blocks) => Scenes.Where(scene => scene.Blocks.Has(blocks.First().Position)) .FirstOrDefault();