コード例 #1
0
ファイル: TileMap.cs プロジェクト: astryad/ProtectIt
        private void ResetTile(Tile targetTile)
        {
            targetTile.Next = null;
            targetTile.DistanceToExit = double.MaxValue;

            foreach (Tile tile in targetTile.GetNeighbours(this))
            {
                if (tile.Type != TileType.Wall)
                    tile.IsVisited = false;
            }

            targetTile.Ancestors.ForEach(
                tile => this.ResetTile(tile)
            );

            targetTile.Ancestors.Clear();
        }
コード例 #2
0
ファイル: TileMap.cs プロジェクト: astryad/ProtectIt
        private void BackwardUpdate(Tile source, Tile target)
        {
            // Check if we should use the source as new path
            if(source.DistanceToExit + target.Type.Weight < target.DistanceToExit) {
                if(target.Next != null) target.Next.Ancestors.Remove(target);
                target.Next = source;
                source.Ancestors.Add(target);
                target.DistanceToExit = source.DistanceToExit + target.Type.Weight;

                foreach (Tile tile in target.GetNeighbours(this))
                {
                    if(tile.Type == TileType.Wall) continue;
                    if(tile == target.Next) continue;

                    this.BackwardUpdate(target, tile);
                }
            }
        }