List <TmxLayerTile> GetTilesInView(Layer layer) { List <TmxLayerTile> inViewTiles = new List <TmxLayerTile>(); AccuracyAngle viewAngle = new AccuracyAngle(); Vector2 viewOrigin = (GameMain.mainPlayer.position + GameMain.mainPlayer.getDirectionVector(Direction.Backward, 50)); viewAngle.EnforceConsistency(); foreach (var tile in _map.Layers[(int)layer].Tiles) { Vector2 vecToPoint = new Vector2(tile.X - viewOrigin.X, tile.Y - viewOrigin.Y); float tileAngle = (3 * MathHelper.PiOver2) - (float)Math.Atan2(vecToPoint.Y, vecToPoint.X); if (tileAngle >= MathHelper.TwoPi) { tileAngle -= MathHelper.TwoPi; } else if (tileAngle <= 0) { tileAngle += MathHelper.TwoPi; } if (viewAngle.Contains(tileAngle)) { inViewTiles.Add(tile); } } return(inViewTiles); }
bool isTileInView(Vector2 tilePos) { AccuracyAngle viewAngle = new AccuracyAngle(); viewAngle.EnforceConsistency(); Vector2 vecToPoint = tilePos - (GameMain.mainPlayer.position + GameMain.mainPlayer.getDirectionVector(Direction.Backward, 50)); float tileAngle = (3 * MathHelper.PiOver2) - (float)Math.Atan2(vecToPoint.Y, vecToPoint.X); if (tileAngle >= MathHelper.TwoPi) { tileAngle -= MathHelper.TwoPi; } else if (tileAngle <= 0) { tileAngle += MathHelper.TwoPi; } if (raycast(tilePos, GameMain.mainPlayer.position, Layer.Wall, RaycastType.Hit)) { return(false); } return(viewAngle.Contains(tileAngle)); }