public override bool Update(Vector2D mouseS, IMapManager currentMap)
        {
            if (currentMap == null)
            {
                return(false);
            }

            spriteToDraw = GetDirectionalSprite(pManager.CurrentBaseSprite);

            mouseScreen = mouseS;
            mouseWorld  = new Vector2D(mouseScreen.X + ClientWindowData.Singleton.ScreenOrigin.X,
                                       mouseScreen.Y + ClientWindowData.Singleton.ScreenOrigin.Y);

            var spriteRectWorld = new RectangleF(mouseWorld.X - (spriteToDraw.Width / 2f),
                                                 mouseWorld.Y - (spriteToDraw.Height / 2f), spriteToDraw.Width,
                                                 spriteToDraw.Height);

            bool ValidPosition = false;

            if (pManager.CurrentPermission.Range > 0)
            {
                if (
                    (pManager.PlayerManager.ControlledEntity.GetComponent <TransformComponent>(ComponentFamily.Transform)
                     .Position - mouseWorld).Length > pManager.CurrentPermission.Range)
                {
                    return(false);
                }
            }

            if (pManager.CurrentPermission.IsTile)
            {
                return(false);
            }

            currentTile = currentMap.GetWallAt(mouseWorld);

            if (currentTile == null || !currentTile.IsSolidTile())
            {
                return(false);
            }

            ITile wallTop = currentMap.GetWallAt(new Vector2D(currentTile.Position.X, currentTile.Position.Y - currentMap.GetTileSpacing()));

            if (wallTop == null)
            {
                return(false);
            }

            ITile wallTopNorth     = currentMap.GetWallAt(new Vector2D(wallTop.Position.X, wallTop.Position.Y - currentMap.GetTileSpacing()));
            ITile wallCurrentSouth = currentMap.GetWallAt(new Vector2D(currentTile.Position.X, currentTile.Position.Y - currentMap.GetTileSpacing()));

            ITile wallTopEast     = currentMap.GetWallAt(new Vector2D(wallTop.Position.X + currentMap.GetTileSpacing(), wallTop.Position.Y));
            ITile wallCurrentEast = currentMap.GetWallAt(new Vector2D(currentTile.Position.X + currentMap.GetTileSpacing(), currentTile.Position.Y));

            ITile wallTopWest     = currentMap.GetWallAt(new Vector2D(wallTop.Position.X - currentMap.GetTileSpacing(), wallTop.Position.Y));
            ITile wallCurrentWest = currentMap.GetWallAt(new Vector2D(currentTile.Position.X - currentMap.GetTileSpacing(), currentTile.Position.Y));

            switch (pManager.Direction)
            {
            case Direction.North:
                if (wallTopNorth == null || wallTopNorth.IsSolidTile() || wallTop.IsSolidTile())
                {
                    return(false);
                }
                else
                {
                    mouseWorld = new Vector2D(wallTop.Position.X + currentMap.GetTileSpacing() / 2f,
                                              wallTop.Position.Y - spriteToDraw.AABB.Height);
                    ValidPosition = true;
                }
                break;

            case Direction.East:
                if (wallTopEast == null || wallTopEast.IsSolidTile() || wallCurrentEast.IsSolidTile())
                {
                    return(false);
                }
                else
                {
                    mouseWorld =
                        new Vector2D(wallTop.Position.X + spriteToDraw.AABB.Width + currentMap.GetTileSpacing(),
                                     wallTop.Position.Y + currentMap.GetTileSpacing() / 2f);
                    ValidPosition = true;
                }
                break;

            case Direction.South:
                if (!currentTile.IsSolidTile() || wallCurrentSouth.IsSolidTile())
                {
                    return(false);
                }
                else
                {
                    mouseWorld = new Vector2D(wallTop.Position.X + currentMap.GetTileSpacing() / 2f,
                                              wallTop.Position.Y + spriteToDraw.AABB.Height +
                                              currentMap.GetTileSpacing());
                    ValidPosition = true;
                }
                break;

            case Direction.West:
                if (wallTopWest == null || wallTopWest.IsSolidTile() || wallCurrentWest.IsSolidTile())
                {
                    return(false);
                }
                else
                {
                    mouseWorld = new Vector2D(wallTop.Position.X - spriteToDraw.AABB.Width,
                                              wallTop.Position.Y + currentMap.GetTileSpacing() / 2f);
                    ValidPosition = true;
                }
                break;
            }

            mouseScreen = new Vector2D(mouseWorld.X - ClientWindowData.Singleton.ScreenOrigin.X,
                                       mouseWorld.Y - ClientWindowData.Singleton.ScreenOrigin.Y);

            return(true);
        }